public void DrawHeapMemory(Rect rect) { if (_unpackedCrawl != null) { if (_unpackedCrawl.managedHeap.Length <= 0) { Rect heapMemBorder2 = new Rect(rect.x, (rect.height - ((memUsageSectors.Count + 1.0f) * 2) * 22) + offsetDialogPosY, rect.width, rect.height); GUI.Label(heapMemBorder2, "No Managed Objects found", memTitleStyleText); return; } if (memUsageSectors.Count <= 0) { heapSpace = 0; heapSize = 0; sized = 0; foreach (var segment in _unpackedCrawl.managedHeap) { MemoryHeapUsage memSector = new MemoryHeapUsage(); memSector.section = segment; memUsageSectors.Add(memSector); heapSize += (ulong)segment.bytes.Length; } for (int k = 0; k < memUsageSectors.Count; k++) { foreach (var manage in _unpackedCrawl.managedObjects) { if (manage.address >= memUsageSectors[k].section.startAddress && manage.address <= (memUsageSectors[k].section.startAddress + (ulong)memUsageSectors[k].section.bytes.Length)) { memUsageSectors[k].sectors.Add(manage); memUsageSectors[k].totalSizeOfElements += manage.size; } } if (EditorUtility.DisplayCancelableProgressBar("BuildData", string.Format("{0}/{1}", k, memUsageSectors.Count), k * 1.0f / memUsageSectors.Count)) { break; } } foreach (var manage in _unpackedCrawl.managedObjects) { sized += manage.size; } EditorUtility.ClearProgressBar(); memUsageSectors.Sort(memComparer1); for (int h = 0; h < memUsageSectors.Count; h++) { memUsageSectors[h].sectors.Sort(memComparer2); } heapSpace = ((memUsageSectors[memUsageSectors.Count - 1].section.startAddress + (ulong)memUsageSectors[memUsageSectors.Count - 1].section.bytes.Length)) - memUsageSectors[0].section.startAddress; } Rect rt = new Rect(rect.x, 160, 120, 22); GUI.Label(rt, string.Format("Total count ({0})", memUsageSectors.Count)); rt.x += 120; rt.width = 100; GUI.Label(rt, string.Format("Go to page ({0})", memUsageSectors.Count / c_ItemsPerPage + 1)); rt.x += 100; rt.width = 40; string strPage = GUI.TextField(rt, m_Page.ToString()); rt.x += 40; rt.width = 80; int.TryParse(strPage, out m_Page); if (GUI.Button(rt, "Prev")) { m_Page--; } rt.x += 80; if (GUI.Button(rt, "Next")) { m_Page++; } m_Page = Mathf.Max(1, Mathf.Min(memUsageSectors.Count / c_ItemsPerPage + 1, m_Page)); Rect heapMemBorder = new Rect(rect.x, 200, rect.width, 22); GUI.Box(heapMemBorder, GUIContent.none, memHeapStyle2); GUI.Label(heapMemBorder, string.Format(" Mono Heap (Memory Sections found:{0}) heapSpace:{1} heapSize:{2} realSize:{3}", _unpackedCrawl.managedHeap.Length, heapSpace, heapSize, sized), memTitleStyleText); int altura = (((c_ItemsPerPage + 1) * 2) * 22); scrollPosition = GUI.BeginScrollView(new Rect(0, 220, rect.width, rect.height - 200), scrollPosition, new Rect(0, 0, rect.width - 20, altura)); for (int h = (m_Page - 1) * c_ItemsPerPage; h < m_Page * c_ItemsPerPage && h < memUsageSectors.Count; h++) { tmpStyle = memHeapStyle; int h0 = h - (m_Page - 1) * c_ItemsPerPage; GUI.Box(new Rect(rect.x, 42 + (22 * h0) + (h0 * 20), rect.width, 15), GUIContent.none, memHeapBarBGStyle); Rect labelPos = new Rect(rect.x, 22 + (22 * h0) + (h0 * 20), rect.width, 30); GUI.Label(labelPos, " Memory sector " + h + ": " + memUsageSectors[h].section.startAddress + " - Size " + SizeSuffix(memUsageSectors[h].section.bytes.Length, 2) + " - Elements Size: " + memUsageSectors[h].totalSizeOfElements + " - # elements in this section: " + memUsageSectors[h].sectors.Count, memHeapStyleText); for (int r = 0; r < memUsageSectors[h].sectors.Count; r++) { float zoomed = ((float)memUsageSectors[h].section.bytes.Length) / (rect.width - 20); Rect position = new Rect(rect.x + ((memUsageSectors[h].sectors[r].address - memUsageSectors[h].section.startAddress) / zoomed), 22 + 20 + (22 * h0) + (h0 * 20), memUsageSectors[h].sectors[r].size / zoomed, 15); GUI.Box(position, GUIContent.none, tmpStyle); } } GUI.EndScrollView(); } }
public void DrawHeapMemory(Rect rect) { memUsageSectors.Clear(); int i = 0; int j = 0; long sized = 0; if (_unpackedCrawl != null) { if (_unpackedCrawl.managedHeap.Length <= 0) { Rect heapMemBorder2 = new Rect(rect.x, (rect.height - ((memUsageSectors.Count + 1.0f) * 2) * 22) + offsetDialogPosY, rect.width, rect.height); GUI.Label(heapMemBorder2, "No Managed Objects found", memTitleStyleText); return; } foreach (var segment in _unpackedCrawl.managedHeap) { i++; MemoryHeapUsage memSector = new MemoryHeapUsage(); memSector.section = segment; memUsageSectors.Add(memSector); } for (int k = 0; k < memUsageSectors.Count; k++) { foreach (var manage in _unpackedCrawl.managedObjects) { if (manage.address >= memUsageSectors[k].section.startAddress && manage.address <= (memUsageSectors[k].section.startAddress + (ulong)memUsageSectors[k].section.bytes.Length)) { memUsageSectors[k].sectors.Add(manage); memUsageSectors[k].totalSizeOfElements += manage.size; } } } foreach (var manage in _unpackedCrawl.managedObjects) { sized += manage.size; j++; } memUsageSectors.Sort(memComparer1); ulong heapSpace = ((memUsageSectors[memUsageSectors.Count - 1].section.startAddress + (ulong)memUsageSectors[memUsageSectors.Count - 1].section.bytes.Length)) - memUsageSectors[0].section.startAddress; Rect heapMemBorder = new Rect(rect.x, 150, rect.width, ((memUsageSectors.Count + 1.0f) * 2) * 22); GUI.Box(heapMemBorder, GUIContent.none, memHeapStyle2); GUI.Label(heapMemBorder, " Mono Heap (Memory Sections found: " + _unpackedCrawl.managedHeap.Length + ")", memTitleStyleText); int altura = (((memUsageSectors.Count + 1) * 2) * 22); scrollPosition = GUI.BeginScrollView(new Rect(0, 170, rect.width, rect.height - 150), scrollPosition, new Rect(0, 0, rect.width - 20, altura)); for (int h = 0; h < memUsageSectors.Count; h++) { tmpStyle = memHeapStyle; memUsageSectors[h].sectors.Sort(memComparer2); GUI.Box(new Rect(rect.x, 42 + (22 * h) + (h * 20), rect.width, 15), GUIContent.none, memHeapBarBGStyle); Rect labelPos = new Rect(rect.x, 22 + (22 * h) + (h * 20), rect.width, 30); GUI.Label(labelPos, " Memory sector " + h + ": " + memUsageSectors[h].section.startAddress + " - Size " + SizeSuffix(memUsageSectors[h].section.bytes.Length, 2) + " - Elements Size: " + memUsageSectors[h].totalSizeOfElements + " - # elements in this section: " + memUsageSectors[h].sectors.Count, memHeapStyleText); for (int r = 0; r < memUsageSectors[h].sectors.Count; r++) { float zoomed = ((float)memUsageSectors[h].section.bytes.Length) / (rect.width - 20); Rect position = new Rect(rect.x + ((memUsageSectors[h].sectors[r].address - memUsageSectors[h].section.startAddress) / zoomed), 22 + 20 + (22 * h) + (h * 20), memUsageSectors[h].sectors[r].size / zoomed, 15); GUI.Box(position, GUIContent.none, tmpStyle); } } GUI.EndScrollView(); } }
public void DrawHeapMemory(Rect rect) { memUsageSectors.Clear(); int i = 0; int j = 0; int sized = 0; if (_unpackedCrawl != null) { //Debug.Log(" SIZE " + _unpackedCrawl.managedHeap.Length); foreach (var segment in _unpackedCrawl.managedHeap) { //Debug.Log(i + " test " + segment.startAddress + " " + ((ulong)segment.bytes.Length)); i++; MemoryHeapUsage memSector = new MemoryHeapUsage(); memSector.section = segment; memUsageSectors.Add(memSector); } for (int k = 0; k < memUsageSectors.Count; k++) { foreach (var manage in _unpackedCrawl.managedObjects) { if (manage.address >= memUsageSectors[k].section.startAddress && manage.address <= (memUsageSectors[k].section.startAddress + (ulong)memUsageSectors[k].section.bytes.Length)) { memUsageSectors[k].sectors.Add(manage); } } } foreach (var manage in _unpackedCrawl.managedObjects) { sized += manage.size; j++; } //Debug.Log("EL sized " + sized + "___" + j); //Debug.Log("VM Granularity " + _unpackedCrawl.virtualMachineInformation.allocationGranularity); memUsageSectors.Sort(memComparer1); ulong heapSpace = ((memUsageSectors[memUsageSectors.Count - 1].section.startAddress + (ulong)memUsageSectors[memUsageSectors.Count - 1].section.bytes.Length)) - memUsageSectors[0].section.startAddress; //Debug.Log("::::"+ memUsageSectors[0].section.bytes.Length); //Debug.Log(" HEAPPP "+heapSpace+"__"+ memUsageSectors[0].section.startAddress + "__" + memUsageSectors[0].section.bytes.Length + "__"+ memUsageSectors[memUsageSectors.Count - 1].section.startAddress+"__"+ memUsageSectors[memUsageSectors.Count - 1].section.bytes.Length+"__"+rect.width); Rect heapMemBorder = new Rect(rect.x, (rect.height - ((memUsageSectors.Count + 1.0f) * 2) * 22) + offsetDialogPosY, rect.width, rect.height); GUI.Box(heapMemBorder, GUIContent.none, memHeapStyle2); if (!bShowMemHeap) { GUI.Label(heapMemBorder, " Click to show Mono Heap", memTitleStyleText); } else { GUI.Label(heapMemBorder, " Mono Heap (Click to Hide)", memTitleStyleText); } for (int h = 0; h < memUsageSectors.Count; h++) { tmpStyle = memHeapStyle; memUsageSectors[h].sectors.Sort(memComparer2); GUI.Box(new Rect(rect.x, (rect.height - (22 * ((memUsageSectors.Count) * 2 - h * 2))) + offsetDialogPosY, rect.width, 20), GUIContent.none, memHeapBarBGStyle); for (int r = 0; r < memUsageSectors[h].sectors.Count; r++) { float zoomed = ((float)memUsageSectors[h].section.bytes.Length) / rect.width; Rect labelPos = new Rect(rect.x, (rect.height - (22 * ((memUsageSectors.Count + 0.5f) * 2 - h * 2))) + offsetDialogPosY, rect.width, 30); GUI.Label(labelPos, " Memory sector " + h + ": " + memUsageSectors[h].section.startAddress + " size " + SizeSuffix(memUsageSectors[h].section.bytes.Length, 2), memHeapStyleText); Rect position = new Rect(rect.x + ((memUsageSectors[h].sectors[r].address - memUsageSectors[h].section.startAddress) / zoomed), (rect.height - (22 * (memUsageSectors.Count * 2 - (h) * 2))) + offsetDialogPosY, memUsageSectors[h].sectors[r].size / (int)zoomed, 20); GUI.Box(position, GUIContent.none, tmpStyle); } } if (heapMemBorder.Contains(Event.current.mousePosition)) { if (Event.current.type == EventType.MouseDown) { bShowMemHeap = !bShowMemHeap; } } if (!bShowMemHeap) { if (((rect.height - ((memUsageSectors.Count + 1.0f) * 2) * 22) + offsetDialogPosY) <= rect.height - 20) { offsetDialogPosY += 20 * Time.deltaTime; } } else { if (((rect.height - ((memUsageSectors.Count + 1.0f) * 2) * 22) + offsetDialogPosY) >= (rect.height - ((memUsageSectors.Count + 1.0f) * 2) * 22)) { offsetDialogPosY -= 20 * Time.deltaTime; } } } }