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();
            }
        }
示例#2
0
        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();
            }
        }
示例#3
0
        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;
                    }
                }
            }
        }