public static void EndSample(IntPtr luaState) { #if DEBUG if (!IsMainThread) { return; } if (beginSampleMemoryStack.Count <= 0) { return; } long nowMemoryCount = LuaLib.GetLuaMemory(luaState); long nowMonoCount = GC.GetTotalMemory(false); Sample sample = beginSampleMemoryStack[beginSampleMemoryStack.Count - 1]; beginSampleMemoryStack.RemoveAt(beginSampleMemoryStack.Count - 1); sample.costTime = getcurrentTime - sample.currentTime; var monoGC = nowMonoCount - sample.currentMonoMemory; var luaGC = nowMemoryCount - sample.currentLuaMemory; sample.costLuaGC = luaGC > 0 ? luaGC : 0; sample.costMonoGC = monoGC > 0 ? monoGC : 0; if (!sample.CheckSampleValid()) { sample.Restore(); return; } sample.fahter = beginSampleMemoryStack.Count > 0 ? beginSampleMemoryStack[beginSampleMemoryStack.Count - 1] : null; if (m_SampleEndAction != null && beginSampleMemoryStack.Count == 0) { if (LuaDeepProfilerSetting.Instance.isRecord && LuaDeepProfilerSetting.Instance.isNeedRecord) { //迟钝了 if (sample.costTime >= (1 / 30.0f) * 10000000) { sample.captureUrl = Sample.Capture(); } else if (sample.costLuaGC > LuaDeepProfilerSetting.Instance.captureLuaGC) { sample.captureUrl = Sample.Capture(); } else { sample.captureUrl = null; } } m_SampleEndAction(sample); } //释放掉被累加的Sample if (beginSampleMemoryStack.Count != 0 && sample.fahter == null) { sample.Restore(); } #endif }
public static void EndSample(IntPtr luaState) { if (!IsMainThread) { return; } if (beginSampleMemoryStack.Count <= 0) { return; } long nowMemoryCount = LuaDLL.GetLuaMemory(luaState); long nowMonoCount = GC.GetTotalMemory(false); Sample sample = beginSampleMemoryStack.Pop(); sample.costTime = (int)(getcurrentTime - sample.currentTime); var monoGC = nowMonoCount - sample.currentMonoMemory; var luaGC = nowMemoryCount - sample.currentLuaMemory; sample.currentLuaMemory = (int)nowMemoryCount; sample.currentMonoMemory = (int)nowMonoCount; sample.costLuaGC = (int)luaGC; sample.costMonoGC = (int)monoGC; if (sample.childs.Count > 0) { long mono_gc = 0; long lua_gc = 0; for (int i = 0, imax = sample.childs.Count; i < imax; i++) { Sample c = sample.childs[i]; lua_gc += c.costLuaGC; mono_gc += c.costMonoGC; } sample.costLuaGC = (int)Math.Max(lua_gc, luaGC); sample.costMonoGC = (int)Math.Max(mono_gc, monoGC); } if (!sample.CheckSampleValid()) { sample.Restore(); return; } sample.fahter = beginSampleMemoryStack.Count > 0 ? beginSampleMemoryStack.Peek() : null; //UnityEngine.Debug.Log(sample.name); if (beginSampleMemoryStack.Count == 0) { // TODO NetWorkClient.SendMessage(sample); } //释放掉被累加的Sample if (beginSampleMemoryStack.Count != 0 && sample.fahter == null) { sample.Restore(); } }
public void DequeueSample() { while (m_runningSamplesQueue.Count > 0) { Sample s = null; lock (this) { s = m_runningSamplesQueue.Dequeue(); } LuaProfilerTreeViewItem.s_frameCount = s.frameCount; var instance = LuaDeepProfilerSetting.Instance; if (!(instance.isRecord && !instance.isStartRecord)) { m_catchLuaMemory += s.costLuaGC; } LoadRootSample(s, LuaDeepProfilerSetting.Instance.isRecord); s.Restore(); } if (LuaProfilerWindow.DoClear != null) { LuaProfilerWindow.DoClear(); LuaProfilerWindow.DoClear = null; } }
private void DequeueSample() { lock (this) { if (m_runningSamplesQueue.Count > 0) { while (m_runningSamplesQueue.Count > 0) { Sample s = null; lock (this) { s = m_runningSamplesQueue.Dequeue(); LoadRootSample(s, LuaDeepProfilerSetting.Instance.isRecord); s.Restore(); } } } else if (m_historySamplesQueue.Count > 0) { int delNum = 0; while (m_historySamplesQueue.Count > 0 && delNum < MAX_DEAL_COUNT) { lock (this) { Sample s = m_historySamplesQueue.Dequeue(); LoadRootSample(s, false, true); } delNum++; } } } }
private static void DoSendMessage() { while (true) { try { if (m_sendThread == null) { UnityEngine.Debug.LogError("<color=#ff0000>m_sendThread null</color>"); return; } if (m_sampleQueue.Count > 0) { while (m_sampleQueue.Count > 0) { NetBase s = null; lock (m_sampleQueue) { s = m_sampleQueue.Dequeue(); } bw.Write(PACK_HEAD); if (s is Sample) { bw.Write((int)0); } else if (s is LuaRefInfo) { bw.Write((int)1); } Serialize(s, bw); s.Restore(); } } else if (m_frameCount != HookLuaSetup.frameCount) { bw.Write(PACK_HEAD); //写入message 头编号 bw.Write((int)0); Sample s = Sample.Create(0, (int)LuaLib.GetLuaMemory(LuaProfiler.mainL), ""); Serialize(s, bw); s.Restore(); m_frameCount = HookLuaSetup.frameCount; } Thread.Sleep(10); } #pragma warning disable 0168 catch (ThreadAbortException e) { } catch (Exception e) { UnityEngine.Debug.Log(e); Close(); } #pragma warning restore 0168 } }
public static void EndSample(IntPtr luaState) { #if DEBUG if (beginSampleMemoryStack.Count <= 0) { return; } int count = beginSampleMemoryStack.Count; Sample sample = beginSampleMemoryStack[beginSampleMemoryStack.Count - 1]; long oldMemoryCount = sample.currentLuaMemory; beginSampleMemoryStack.RemoveAt(count - 1); long nowMemoryCount = GetLuaMemory(luaState); sample.fahter = count > 1 ? beginSampleMemoryStack[count - 2] : null; if (!isDeep) { long delta = nowMemoryCount - oldMemoryCount; long tmpDelta = delta; if (delta > 0) { delta = Math.Max(delta - 32, 0);//byte[0] 的字节占用是40 byte[] luagc = new byte[delta]; } for (int i = 0, imax = beginSampleMemoryStack.Count; i < imax; i++) { Sample s = beginSampleMemoryStack[i]; s.currentLuaMemory += tmpDelta; beginSampleMemoryStack[i] = s; } Profiler.EndSample(); } sample.costTime = Time.realtimeSinceStartup - sample.currentTime; var gc = nowMemoryCount - sample.realCurrentLuaMemory; sample.costGC = gc > 0 ? gc : 0; if (beginSampleMemoryStack.Count == 0 && _stableGC) { LuaLib.lua_gc(luaState, LuaGCOptions.LUA_GCRESTART, 0); LuaLib.lua_gc(luaState, LuaGCOptions.LUA_GCCOLLECT, 0); } if (m_SampleEndAction != null && beginSampleMemoryStack.Count == 0) { m_SampleEndAction(sample); } if (sample.fahter == null) { sample.Restore(); } #endif }
private void LoadRootSample(Sample sample) { lock (this) { if (!CheckSampleValid(sample)) { sample.Restore(); return; } Sample item = null; if (m_runingSampleDict.TryGetValue(sample.name, out item)) { item.AddSample(sample); sample.Restore(); return; } m_runingSampleDict.Add(sample.name, sample); m_runningSamplesQueue.Enqueue(sample); } }
private static void DoSendMessage() { while (true) { try { if (m_sendThread == null) { UnityEngine.Debug.LogError("<color=#ff0000>m_sendThread null</color>"); return; } lock (m_sampleDict) { m_sampleDict.Clear(); } if (m_sampleQueue.Count > 0) { while (m_sampleQueue.Count > 0) { Sample s = null; bw.Write(PACK_HEAD); lock (m_sampleQueue) { s = m_sampleQueue.Dequeue(); } Serialize(s, bw); s.Restore(); ns.Flush(); } } else { bw.Write((int)0); ns.Flush(); } Thread.Sleep(10); } #pragma warning disable 0168 catch (ThreadAbortException e) { } catch (Exception e) { UnityEngine.Debug.Log(e); Close(); } #pragma warning restore 0168 } }
protected override TreeViewItem BuildRoot() { if (m_runningSamplesQueue.Count > 0) { while (m_runningSamplesQueue.Count > 0) { Sample s = null; lock (this) { s = m_runningSamplesQueue.Dequeue(); LoadRootSample(s, LuaDeepProfilerSetting.Instance.isRecord); s.Restore(); } } m_runingSampleDict.Clear(); } else if (m_historySamplesQueue.Count > 0) { int delNum = 0; while (m_historySamplesQueue.Count > 0 && delNum < MAX_DEAL_COUNT) { lock (this) { Sample s = m_historySamplesQueue.Dequeue(); LoadRootSample(s, false); } delNum++; } if (m_historySamplesQueue.Count == 0) { foreach (var t in roots) { ExpandNodeRecursive(t); } } } if (!needRebuild) { return(m_root); } ReLoadTreeItems(); // Utility method that initializes the TreeViewItem.children and -parent for all items. SetupParentsAndChildrenFromDepths(m_root, m_treeViewItems); needRebuild = false; // Return root of the tree return(m_root); }
public static void EndSample(IntPtr luaState) { #if DEBUG if (beginSampleMemoryStack.Count <= 0) { return; } int count = beginSampleMemoryStack.Count; Sample sample = beginSampleMemoryStack[beginSampleMemoryStack.Count - 1]; beginSampleMemoryStack.RemoveAt(count - 1); long nowMemoryCount = LuaLib.GetLuaMemory(luaState); sample.costTime = Time.realtimeSinceStartup - sample.currentTime; var gc = nowMemoryCount - sample.currentLuaMemory; sample.costGC = gc > 0 ? gc : 0; sample.fahter = count > 1 ? beginSampleMemoryStack[count - 2] : null; if (m_SampleEndAction != null && beginSampleMemoryStack.Count == 0) { if (LuaDeepProfilerSetting.Instance.isRecord) { //迟钝了 if (sample.costTime >= 1 / 30.0f) { sample.captureUrl = Sample.Capture(); } else if (sample.costGC > LuaDeepProfilerSetting.Instance.captureGC) { sample.captureUrl = Sample.Capture(); } else { sample.captureUrl = null; } } m_SampleEndAction(sample); } //释放掉被累加的Sample if (beginSampleMemoryStack.Count != 0 && sample.fahter == null) { sample.Restore(); } #endif }
public void DequeueSample() { while (m_runningSamplesQueue.Count > 0) { Sample s = null; lock (this) { s = m_runningSamplesQueue.Dequeue(); } m_catchLuaMemory += s.costLuaGC; LoadRootSample(s, LuaDeepProfilerSetting.Instance.isRecord); s.Restore(); } if (LuaProfilerWindow.DoClear != null) { LuaProfilerWindow.DoClear(); LuaProfilerWindow.DoClear = null; } }
public static void SendMessage(Sample sample) { if (m_client == null) { return; } lock (m_sampleDict) { Sample s; if (m_sampleDict.TryGetValue(sample.name, out s)) { s.AddSample(sample); sample.Restore(); } else { m_sampleDict.Add(sample.name, sample); m_sampleQueue.Enqueue(sample); } } }
public void DequeueSample() { lock (this) { if (m_runningSamplesQueue.Count > 0) { while (m_runningSamplesQueue.Count > 0) { Sample s = null; lock (this) { s = m_runningSamplesQueue.Dequeue(); m_catchLuaMemory += s.costLuaGC; LoadRootSample(s, LuaDeepProfilerSetting.Instance.isRecord); s.Restore(); } } } } }
public static void EndSample(IntPtr luaState) { if (!IsMainThread) { return; } var setting = LuaDeepProfilerSetting.Instance; if (setting == null) { return; } if (beginSampleMemoryStack.Count <= 0) { return; } long nowMemoryCount = LuaLib.GetLuaMemory(luaState); long nowMonoCount = GC.GetTotalMemory(false); Sample sample = beginSampleMemoryStack.Pop(); sample.costTime = (int)(getcurrentTime - sample.currentTime); var monoGC = nowMonoCount - sample.currentMonoMemory; var luaGC = nowMemoryCount - sample.currentLuaMemory; sample.currentLuaMemory = (int)nowMemoryCount; sample.currentMonoMemory = (int)nowMonoCount; sample.costLuaGC = (int)luaGC; sample.costMonoGC = (int)monoGC; if (sample.childs.Count > 0) { long mono_gc = 0; long lua_gc = 0; for (int i = 0, imax = sample.childs.Count; i < imax; i++) { Sample c = sample.childs[i]; lua_gc += c.costLuaGC; mono_gc += c.costMonoGC; } sample.costLuaGC = (int)Math.Max(lua_gc, luaGC); sample.costMonoGC = (int)Math.Max(mono_gc, monoGC); } if (!sample.CheckSampleValid()) { sample.Restore(); return; } sample.fahter = beginSampleMemoryStack.Count > 0 ? beginSampleMemoryStack.Peek() : null; //UnityEngine.Debug.Log(sample.name); if (beginSampleMemoryStack.Count == 0) { if (setting != null && setting.isNeedCapture) { //迟钝了 if (sample.costTime >= (1 / (float)(setting.captureFrameRate)) * 10000000) { sample.captureUrl = Sample.Capture(); } else if (sample.costLuaGC > setting.captureLuaGC) { sample.captureUrl = Sample.Capture(); } else if (sample.costMonoGC > setting.captureMonoGC) { sample.captureUrl = Sample.Capture(); } else { sample.captureUrl = null; } } NetWorkClient.SendMessage(sample); } //释放掉被累加的Sample if (beginSampleMemoryStack.Count != 0 && sample.fahter == null) { sample.Restore(); } }
public static void EndSample(IntPtr luaState) { if (!IsMainThread) { return; } var setting = LuaDeepProfilerSetting.Instance; if (setting == null) { return; } if (beginSampleMemoryStack.Count <= 0) { return; } long nowMemoryCount = LuaLib.GetLuaMemory(luaState); long nowMonoCount = GC.GetTotalMemory(false); Sample sample = beginSampleMemoryStack[beginSampleMemoryStack.Count - 1]; beginSampleMemoryStack.RemoveAt(beginSampleMemoryStack.Count - 1); sample.costTime = (int)(getcurrentTime - sample.currentTime); var monoGC = nowMonoCount - sample.currentMonoMemory; var luaGC = nowMemoryCount - sample.currentLuaMemory; sample.costLuaGC = (int)(luaGC > 0 ? luaGC : 0); sample.costMonoGC = (int)(monoGC > 0 ? monoGC : 0); if (!sample.CheckSampleValid()) { sample.Restore(); return; } sample.fahter = beginSampleMemoryStack.Count > 0 ? beginSampleMemoryStack[beginSampleMemoryStack.Count - 1] : null; //UnityEngine.Debug.Log(sample.name); if (beginSampleMemoryStack.Count == 0) { if (setting != null && setting.isNeedCapture) { //迟钝了 if (sample.costTime >= (1 / (float)(setting.captureFrameRate)) * 10000000) { sample.captureUrl = Sample.Capture(); } else if (sample.costLuaGC > setting.captureLuaGC) { sample.captureUrl = Sample.Capture(); } else if (sample.costMonoGC > setting.captureMonoGC) { sample.captureUrl = Sample.Capture(); } else { sample.captureUrl = null; } } NetWorkClient.SendMessage(sample); } //释放掉被累加的Sample if (beginSampleMemoryStack.Count != 0 && sample.fahter == null) { sample.Restore(); } }