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; } } }
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); } }
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]); } }
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; } } }
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); } }
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); }
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); }