Пример #1
0
    public static void CalculateFrameInterval(HanoiNode n, HanoiNode preN)
    {
        int   preFrameIndex     = 0;
        float preFrameStartTime = 0.0f;
        int   count             = n.Children.Count;

        for (int i = 0; i < count; i++)
        {
            HanoiNode node = n.Children[i];
            if (node is HanoiFrameInfo)
            {
                HanoiFrameInfo hfi = (HanoiFrameInfo)node;
                if (preFrameStartTime > 0)
                {
                    HanoiFrameInfo hfiChild = (HanoiFrameInfo)n.Children[preFrameIndex];
                    //只记录相邻帧的前帧结束时间,非相邻帧信息不显示
                    if (!hfiChild.isHandle && hfi.frameID - hfiChild.frameID == 1)
                    {
                        hfiChild.frameEndTime = hfi.frameTime;
                        hfiChild.frameFunTime = hfi.frameFunTime;
                        hfiChild.frameLuaTime = hfi.frameLuaTime;
                        hfiChild.isHandle     = true;
                    }
                }
                preFrameIndex     = i;
                preFrameStartTime = hfi.frameTime;
            }
        }
    }
Пример #2
0
    public void handleMsgForDetailScreen(JSONObject jsonMsg, List <HanoiNode> resultNodeRoot)
    {
        if (jsonMsg == null)
        {
            return;
        }
        if (jsonMsg.IsNull || jsonMsg.type != JSONObject.Type.OBJECT)
        {
            return;
        }
        if (Root == null || Root.callStats == null)
        {
            return;
        }

        HanoiNode newNode = null;

        bool isFrameInfo = jsonMsg.GetField("fid");

        //是帧信息
        if (isFrameInfo)
        {
            newNode = new HanoiFrameInfo(Root.callStats);
        }
        else
        {
            //函数信息
            newNode = new HanoiNode(Root.callStats);
        }
        if (readObject(jsonMsg, newNode))
        {
            resultNodeRoot.Add(newNode);
        }
    }
Пример #3
0
    public static void DrawFrameStatementRecursively(HanoiNode n)
    {
        if (n is HanoiFrameInfo)
        {
            HanoiFrameInfo hfi      = (HanoiFrameInfo)n;
            Color          preColor = Handles.color;
            Handles.color = Color.gray;
            if (IsTimeRangeInScreenClipRange((float)hfi.frameTime, (float)hfi.frameTime))
            {
                Handles.DrawLine(new Vector3(hfi.frameTime, 0), new Vector3(hfi.frameTime, VisualizerWindow.m_winHeight));
            }
            Handles.color = preColor;
        }

        for (int i = 0; i < n.Children.Count; i++)
        {
            DrawFrameStatementRecursively(n.Children[i]);
        }
    }
Пример #4
0
    public static void CalculateFrameInterval(HanoiNode n, HanoiNode preN)
    {
        int   preFrameIndex     = 0;
        float preFrameStartTime = 0.0f;
        int   count             = n.Children.Count;

        for (int i = 0; i < count; i++)
        {
            HanoiNode node = n.Children[i];
            if (node is HanoiFrameInfo)
            {
                HanoiFrameInfo hfi = (HanoiFrameInfo)node;
                if (preFrameStartTime > 0)
                {
                    HanoiFrameInfo hfiChild = (HanoiFrameInfo)n.Children[preFrameIndex];
                    hfiChild.frameEndTime = hfi.frameTime;
                }
                preFrameIndex     = i;
                preFrameStartTime = hfi.frameTime;
            }
        }
    }
Пример #5
0
    public static void DrawSelectedFrameInfoRecursively(HanoiNode n, float mouseX)
    {
        if (n is HanoiFrameInfo)
        {
            HanoiFrameInfo hfi      = (HanoiFrameInfo)n;
            Color          preColor = Handles.color;

            if (mouseX >= hfi.frameTime && mouseX <= hfi.frameEndTime)
            {
                float beginPosX = hfi.frameEndTime;
                Rect  r         = new Rect();
                r.position = new Vector2(beginPosX, 0);
                r.width    = HanoiVars.LabelBackgroundWidth / 1.5f;
                r.height   = 60;
                Color bg = Color.white;
                bg.a = 0.5f;
                Handles.DrawSolidRectangleWithOutline(r, bg, bg);

                Handles.color = Color.green;
                GUI.color     = Color.black;
                Handles.Label(new Vector3(beginPosX, 0), string.Format("frameID:{0:0}", hfi.frameID));
                Handles.Label(new Vector3(beginPosX, 15), string.Format("frameTime:{0:0.00}", hfi.frameTime));
                Handles.Label(new Vector3(beginPosX, 30), string.Format("frameUnityTime:{0:0.00}", hfi.frameUnityTime));
                Handles.Label(new Vector3(beginPosX, 45), string.Format("frameInterval:{0:0.00}", hfi.frameEndTime - hfi.frameTime));
                Handles.DrawLine(new Vector3(hfi.frameTime, 0), new Vector3(hfi.frameTime, VisualizerWindow.m_winHeight));
                Handles.DrawLine(new Vector3(hfi.frameEndTime, 0), new Vector3(hfi.frameEndTime, VisualizerWindow.m_winHeight));
            }

            Handles.color = preColor;
        }

        for (int i = 0; i < n.Children.Count; i++)
        {
            DrawSelectedFrameInfoRecursively(n.Children[i], mouseX);
        }
    }
Пример #6
0
    bool readObject(JSONObject obj, HanoiNode node)
    {
        if (obj.type != JSONObject.Type.OBJECT)
        {
            return(false);
        }
        JSONObject loadObj = null;

        if (node is HanoiFrameInfo)
        {
            HanoiFrameInfo frameNode = (HanoiFrameInfo)node;
            loadObj = obj.GetField("frameTime");
            if (loadObj && loadObj.IsNumber)
            {
                frameNode.frameTime = obj.GetField("frameTime").f;
            }
            else
            {
                Debug.LogFormat("frameTime load error");
            }

            loadObj = obj.GetField("frameUnityTime");
            if (loadObj && loadObj.IsNumber)
            {
                frameNode.frameUnityTime = obj.GetField("frameUnityTime").f;
            }
            else
            {
                Debug.LogFormat("frameUnityTime load error");
            }

            loadObj = obj.GetField("frameID");
            if (loadObj && loadObj.IsNumber)
            {
                frameNode.frameID = (int)obj.GetField("frameID").n;
            }
            else
            {
                Debug.LogFormat("frameID load error");
            }
        }
        else
        {
            loadObj = obj.GetField("currentLine");
            if (loadObj && loadObj.IsNumber)
            {
                node.currentLine = (int)obj.GetField("currentLine").n;
            }
            else
            {
                Debug.LogFormat("currentLine load error");
            }

            loadObj = obj.GetField("lineDefined");
            if (loadObj && loadObj.IsNumber)
            {
                node.lineDefined = (int)obj.GetField("lineDefined").n;
            }
            else
            {
                Debug.LogFormat("lineDefined load error");
            }

            loadObj = obj.GetField("timeConsuming");
            if (loadObj && loadObj.IsNumber)
            {
                node.timeConsuming = obj.GetField("timeConsuming").n;
            }
            else
            {
                Debug.LogFormat("timeConsuming load error");
            }

            loadObj = obj.GetField("stackLevel");
            if (loadObj && loadObj.IsNumber)
            {
                node.stackLevel = (int)obj.GetField("stackLevel").n;
                if (node.stackLevel > m_maxStackLevel)
                {
                    m_maxStackLevel = node.stackLevel;
                }
            }
            else
            {
                Debug.LogFormat("stackLevel load error");
            }

            loadObj = obj.GetField("callType");
            if (loadObj && loadObj.IsString)
            {
                switch (obj.GetField("callType").str)
                {
                case "C":
                    node.callType = eHanoiCallType.C;
                    break;

                case "Lua":
                    node.callType = eHanoiCallType.Lua;
                    break;
                }
            }
            else
            {
                Debug.LogFormat("callType load error");
            }

            loadObj = obj.GetField("begintime");
            if (loadObj && loadObj.IsNumber)
            {
                node.beginTime = obj.GetField("begintime").n;
            }
            else
            {
                Debug.LogFormat("beginTime load error");
            }

            loadObj = obj.GetField("endtime");
            if (loadObj && loadObj.IsNumber)
            {
                node.endTime = obj.GetField("endtime").n;
            }
            else
            {
                Debug.LogFormat("endTime load error");
            }

            loadObj = obj.GetField("moduleName");
            if (loadObj && loadObj.IsString)
            {
                node.moduleName = obj.GetField("moduleName").str;
            }
            else
            {
                Debug.LogFormat("moduleName load error");
            }

            loadObj = obj.GetField("funcName");
            if (loadObj && loadObj.IsString)
            {
                node.funcName = obj.GetField("funcName").str;
            }
            else
            {
                Debug.LogFormat("funcName load error");
            }

            foreach (JSONObject childJson in obj.GetField("children").list)
            {
                bool      isOnStackZero   = node.stackLevel == 0;
                double    lastStackOneEnd = 0.0;
                HanoiNode child           = new HanoiNode(node);
                if (readObject(childJson, child))
                {
                    node.Children.Add(child);
                }
                if (isOnStackZero)
                {
                    lastStackOneEnd = child.endTime;
                }
            }
        }
        return(true);
    }
Пример #7
0
    public bool Load(string filename)
    {
        m_hanoiData = null;
        try
        {
            string templateJsonText = System.IO.File.ReadAllText("Assets/Resources/luaprofiler_jsonObjTemplates.json");
            string text             = System.IO.File.ReadAllText(filename);
            m_json = new JSONObject(templateJsonText.Replace("$$", text));

            if (m_json.type != JSONObject.Type.OBJECT)
            {
                return(false);
            }

            if (m_json.list.Count != 1)
            {
                return(false);
            }


            HanoiNode.s_count = 0;

            m_hanoiData = new HanoiRoot();
            if (m_json.GetField("content") && m_json.GetField("content").IsArray)
            {
                JSONObject jsonContent = m_json.GetField("content");
                HanoiNode  contentNode = new HanoiNode(null);

                for (int i = 0; i < jsonContent.list.Count; i++)
                {
                    JSONObject j       = (JSONObject)jsonContent.list[i];
                    HanoiNode  newNode = null;

                    bool isFrameInfo = j.GetField("frameID");
                    //是帧信息
                    if (isFrameInfo)
                    {
                        newNode = new HanoiFrameInfo(contentNode);
                    }
                    else
                    {
                        //函数信息
                        newNode = new HanoiNode(contentNode);
                    }
                    if (readObject(j, newNode))
                    {
                        contentNode.Children.Add(newNode);
                    }
                }
                Root.callStats = contentNode;
            }

            Debug.LogFormat("reading {0} objects.", HanoiNode.s_count);
        }
        catch (Exception e)
        {
            Debug.LogException(e);
            return(false);
        }

        return(true);
    }