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 static void Diff() { IntPtr L = LuaProfiler.mainL; if (L == IntPtr.Zero) { return; } isHook = false; if (historyRef == -100) { Debug.LogError("has no history"); return; } int oldTop = LuaDLL.lua_gettop(L); LuaDLL.lua_getglobal(L, "miku_handle_error"); LuaDLL.lua_getglobal(L, "miku_diff"); LuaDLL.lua_getref(L, historyRef); if (LuaDLL.lua_type(L, -1) != LuaTypes.LUA_TTABLE) { Debug.LogError(LuaDLL.lua_type(L, -1)); LuaDLL.lua_settop(L, oldTop); historyRef = -100; return; } if (LuaDLL.lua_pcall(L, 1, 3, oldTop + 1) == 0) { LuaDLL.lua_remove(L, oldTop + 1); } int nullObjectRef = LuaDLL.luaL_ref(L, LuaIndexes.LUA_REGISTRYINDEX); int rmRef = LuaDLL.luaL_ref(L, LuaIndexes.LUA_REGISTRYINDEX); int addRef = LuaDLL.luaL_ref(L, LuaIndexes.LUA_REGISTRYINDEX); LuaDiffInfo ld = LuaDiffInfo.Create(); SetNullObject(nullObjectRef, ld.nullRef); SetAddOrRm(rmRef, ld.rmRef, ld.rmDetail); SetAddOrRm(addRef, ld.addRef, ld.addDetail); NetWorkClient.SendMessage(ld); LuaDLL.lua_unref(L, nullObjectRef); LuaDLL.lua_unref(L, rmRef); LuaDLL.lua_unref(L, addRef); LuaDLL.lua_settop(L, oldTop); isHook = true; }
public static void PopAllSampleWhenLateUpdate() { for (int i = 0, imax = beginSampleMemoryStack.Count; i < imax; i++) { var item = beginSampleMemoryStack[i]; if (item.fahter == null) { NetWorkClient.SendMessage(item); //item.Restore(); } } beginSampleMemoryStack.Clear(); }
public static void PopAllSampleWhenLateUpdate() { while (beginSampleMemoryStack.Count > 0) { var item = beginSampleMemoryStack.Pop(); if (item.fahter == null) { NetWorkClient.SendMessage(item); //item.Restore(); } } beginSampleMemoryStack.Clear(); }
public static void SendRemoveRef(string funName, string funAddr, byte type) { LuaRefInfo refInfo = LuaRefInfo.Create(0, funName, funAddr, type); var setting = LuaDeepProfilerSetting.Instance; if (!setting.isLocal) { NetWorkClient.SendMessage(refInfo); } else if (m_onReceiveRef != null) { m_onReceiveRef(refInfo); } }
public static void SendFrameSample() { var setting = LuaDeepProfilerSetting.Instance; long memoryCount = LuaLib.GetLuaMemory(_mainL); Sample sample = Sample.Create(getcurrentTime, (int)memoryCount, ""); if (!setting.isLocal) { NetWorkClient.SendMessage(sample); } else if (m_onReceiveSample != null) { m_onReceiveSample(sample); } }
public static void PopAllSampleWhenLateUpdate(IntPtr luaState) { while (beginSampleMemoryStack.Count > 0) { var item = beginSampleMemoryStack.Pop(); if (item.fahter == null) { if (beginSampleMemoryStack.Count > 0) { long mono_gc = 0; long lua_gc = 0; long cost_time = 0; for (int i = 0, imax = item.childs.Count; i < imax; i++) { Sample c = item.childs[i]; lua_gc += c.costLuaGC; mono_gc += c.costMonoGC; cost_time += c.costTime; } item.costLuaGC = (int)Math.Max(lua_gc, 0); item.costMonoGC = (int)Math.Max(mono_gc, 0); item.costTime = (int)cost_time; popChilds.Add(item); } else { item.costLuaGC = (int)LuaDLL.GetLuaMemory(luaState) - item.currentLuaMemory; item.costTime = (int)(getcurrentTime - item.currentTime); item.costMonoGC = (int)(GC.GetTotalMemory(false) - item.currentMonoMemory); item.currentLuaMemory = (int)LuaDLL.GetLuaMemory(luaState); for (int i = 0, imax = popChilds.Count; i < imax; i++) { popChilds[i].fahter = item; } popChilds.Clear(); // TODO NetWorkClient.SendMessage(item); } //item.Restore(); } } beginSampleMemoryStack.Clear(); }
public static void DiffServer() { NetWorkClient.SendMessage(Diff()); }
public static void SendRemoveRef(string funName, string funAddr, byte type) { LuaRefInfo refInfo = LuaRefInfo.Create(0, funName, funAddr, type); NetWorkClient.SendMessage(refInfo); }
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 MarkStaticServer() { NetWorkClient.SendMessage(Record()); }
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(); } }