mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 11:38:21 +02:00
123 lines
2.9 KiB
Beef
123 lines
2.9 KiB
Beef
using System;
|
|
using Beefy;
|
|
using Beefy.gfx;
|
|
using Beefy.widgets;
|
|
using Beefy.geom;
|
|
using System.Collections.Generic;
|
|
using Beefy.utils;
|
|
using System.Diagnostics;
|
|
using Beefy.theme.dark;
|
|
using Beefy.events;
|
|
|
|
namespace MemProfiler
|
|
{
|
|
class Board : Widget
|
|
{
|
|
DarkListView mListView;
|
|
DarkButton mGetButton;
|
|
|
|
public this()
|
|
{
|
|
mListView = new DarkListView();
|
|
AddWidget(mListView);
|
|
|
|
mListView.AddColumn(200, "Name");
|
|
mListView.AddColumn(200, "Self");
|
|
mListView.AddColumn(200, "Total");
|
|
mListView.InitScrollbars(false, true);
|
|
|
|
mGetButton = (DarkButton)DarkTheme.sDarkTheme.CreateButton(this, "Get", 0, 0, 0, 0);
|
|
mGetButton.mMouseClickHandler.Add(new (evt) => { GetData(); });
|
|
}
|
|
|
|
public override void Resize(float x, float y, float width, float height)
|
|
{
|
|
base.Resize(x, y, width, height);
|
|
|
|
mListView.Resize(x, y, width, height - 20);
|
|
mGetButton.Resize(20, mHeight - 20, 128, 20);
|
|
}
|
|
|
|
public override void Draw(Graphics g)
|
|
{
|
|
base.Draw(g);
|
|
|
|
g.DrawBox(DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.Bkg), 0, 0, mWidth, mHeight);
|
|
|
|
g.SetFont(DarkTheme.sDarkTheme.mSmallFont);
|
|
g.DrawString(StackStringFormat!("FPS: {0}", gApp.mLastFPS), mWidth - 128, mHeight - 18);
|
|
|
|
g.FillRect(mUpdateCnt % 200 + 200, mHeight - 2, 2, 2);
|
|
}
|
|
|
|
void ValueClicked(MouseEvent theEvent)
|
|
{
|
|
DarkListViewItem clickedItem = (DarkListViewItem)theEvent.mSender;
|
|
DarkListViewItem item = (DarkListViewItem)clickedItem.GetSubItem(0);
|
|
|
|
mListView.GetRoot().SelectItemExclusively(item);
|
|
mListView.SetFocus();
|
|
}
|
|
|
|
void GetData()
|
|
{
|
|
//const char* cmd = "Get";
|
|
//DWORD bytesRead = 0;
|
|
|
|
mListView.GetRoot().Clear();
|
|
|
|
String pipeName = scope String();
|
|
pipeName.FormatInto(@"\\.\pipe\HeapDbg_{0}", gApp.mProcessInformation.mProcessId);
|
|
|
|
String cmd = "Get";
|
|
|
|
char8[] charData = new char8[16*1024*1024];
|
|
defer delete charData;
|
|
|
|
int32 bytesRead = 0;
|
|
if (Windows.CallNamedPipeA(pipeName, (void*)cmd, (int32)cmd.Length, (void*)charData.CArray(), (int32)charData.Count, &bytesRead, 0))
|
|
{
|
|
String data = scope String();
|
|
data.Reference(charData.CArray(), bytesRead, charData.Count);
|
|
|
|
ListViewItem curItem = mListView.GetRoot();
|
|
|
|
for (var lineView in data.Split('\n'))
|
|
{
|
|
String lineViewStr = scope String(lineView);
|
|
|
|
if (lineViewStr == "-")
|
|
{
|
|
curItem = curItem.mParentItem;
|
|
}
|
|
else
|
|
{
|
|
var childItem = curItem.CreateChildItem();
|
|
childItem.mMouseDownHandler.Add(new => ValueClicked);
|
|
|
|
int32 idx = 0;
|
|
for (var dataStr in lineViewStr.Split('\t'))
|
|
{
|
|
if (idx == 0)
|
|
childItem.Label = scope String(dataStr);
|
|
else
|
|
{
|
|
var subItem = childItem.CreateSubItem(idx);
|
|
subItem.Label = scope String(dataStr);
|
|
subItem.mMouseDownHandler.Add(new => ValueClicked);
|
|
}
|
|
|
|
idx++;
|
|
}
|
|
|
|
curItem = childItem;
|
|
}
|
|
|
|
}
|
|
|
|
//tree->InsertItem()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|