private static void init() { MemStats memStats = default; if (sizeof_C_MStats != @unsafe.Sizeof(memStats)) { println(sizeof_C_MStats, @unsafe.Sizeof(memStats)); throw("MStats vs MemStatsType size mismatch"); } if (@unsafe.Offsetof(memstats.heap_live) % 8L != 0L) { println(@unsafe.Offsetof(memstats.heap_live)); throw("memstats.heap_live not aligned to 8 bytes"); } }
public void Draw(Rect r) { int border = MemConst.TableBorder; float split = MemConst.SplitterRatio; int toolbarHeight = 50; GUILayout.BeginArea(r, MemStyles.Background); GUILayout.BeginHorizontal(MemStyles.Toolbar); // categories { GUILayout.Label("Category: ", GUILayout.MinWidth(120)); string[] literals = _unpacked != null ? _categoryLiterals : MemConst.MemTypeCategories; int newCategory = GUILayout.SelectionGrid(_memTypeCategory, literals, literals.Length, MemStyles.ToolbarButton); if (newCategory != _memTypeCategory) { _memTypeCategory = newCategory; RefreshTables(); } } GUILayout.FlexibleSpace(); // size limiter { GUILayout.Label("Size: ", GUILayout.MinWidth(120)); int newLimiter = GUILayout.SelectionGrid(_memTypeSizeLimiter, MemConst.MemTypeLimitations, MemConst.MemTypeLimitations.Length, MemStyles.ToolbarButton); if (newLimiter != _memTypeSizeLimiter) { _memTypeSizeLimiter = newLimiter; RefreshTables(); } } GUILayout.EndHorizontal(); GUILayout.Space(3); GUILayout.BeginHorizontal(MemStyles.Toolbar); // search box - types { string enteredString = GUILayout.TextField(_searchTypeString, 100, MemStyles.SearchTextField, GUILayout.MinWidth(200)); if (enteredString != _searchTypeString) { _searchTypeString = enteredString; RefreshTables(); } if (GUILayout.Button("", MemStyles.SearchCancelButton)) { _searchTypeString = ""; GUI.FocusControl(null); // Remove focus if cleared RefreshTables(); } } GUILayout.FlexibleSpace(); if (GUILayout.Button("Show Type Stats", EditorStyles.toolbarButton)) { MemStats.ShowTypeStats(_typeTable.GetSelected() as MemType); } GUILayout.FlexibleSpace(); // search box - instances { string enteredString = GUILayout.TextField(_searchInstanceString, 100, MemStyles.SearchTextField, GUILayout.MinWidth(200)); if (enteredString != _searchInstanceString) { _searchInstanceString = enteredString; RefreshTables(); } if (GUILayout.Button("", MemStyles.SearchCancelButton)) { _types.Remove(MemConst.SearchResultTypeString); _searchInstanceString = ""; GUI.FocusControl(null); // Remove focus if cleared RefreshTables(); } } GUILayout.EndHorizontal(); int startY = toolbarHeight + border; int height = (int)(r.height - border * 2 - toolbarHeight); if (_typeTable != null) { _typeTable.Draw(new Rect(border, startY, (int)(r.width * split - border * 1.5f), height)); } if (_objectTable != null) { _objectTable.Draw(new Rect((int)(r.width * split + border * 0.5f), startY, (int)r.width * (1.0f - split) - border * 1.5f, height)); } GUILayout.EndArea(); }