1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-17 23:56:05 +02:00
Beef/IDE/src/ui/ProfileDialog.bf

110 lines
2.8 KiB
Beef
Raw Normal View History

2019-08-23 11:56:54 -07:00
using System;
using Beefy;
using Beefy.theme.dark;
using Beefy.widgets;
using Beefy.gfx;
namespace IDE.ui
{
class ProfileDialog : IDEDialog
{
EditWidget mDescEdit;
DarkComboBox mThreadCombo;
EditWidget mSampleRateEdit;
public this()
{
mTitle = new String("Profile");
mText = new String("");
mDescEdit = AddEdit("");
mThreadCombo = new DarkComboBox();
mThreadCombo.Label = "All Threads";
mThreadCombo.mPopulateMenuAction.Add(new => PopulateThreadList);
AddDialogComponent(mThreadCombo);
mWindowFlags = BFWindow.Flags.ClientSized | BFWindow.Flags.TopMost | BFWindow.Flags.Caption |
BFWindow.Flags.Border | BFWindow.Flags.SysMenu | BFWindow.Flags.Resizable;
mSampleRateEdit = AddEdit(scope String()..AppendF("{0}", gApp.mSettings.mDebuggerSettings.mProfileSampleRate));
AddOkCancelButtons(new (evt) => { StartProfiling(); }, null, 0, 1);
}
void StartProfiling()
{
var str = scope String();
mThreadCombo.GetLabel(str);
int spacePos = str.IndexOf(' ');
if (spacePos > 0)
str.RemoveToEnd(spacePos);
int threadId = int.Parse(str).GetValueOrDefault();
str.Clear();
mSampleRateEdit.GetText(str);
int sampleRate = int.Parse(str).GetValueOrDefault();
if (sampleRate < 0)
sampleRate = gApp.mSettings.mDebuggerSettings.mProfileSampleRate;
sampleRate = Math.Clamp(sampleRate, 10, 10000);
str.Clear();
mDescEdit.GetText(str);
gApp.mProfilePanel.StartProfiling(threadId, str, sampleRate);
}
void PopulateThreadList(Menu menu)
{
var subItem = menu.AddItem("All Threads");
subItem.mOnMenuItemSelected.Add(new (evt) => { mThreadCombo.Label = "All Threads"; });
String threadInfo = scope .();
gApp.mDebugger.GetThreadInfo(threadInfo);
for (var infoLine in threadInfo.Split('\n'))
{
if (@infoLine.Pos == 0)
continue;
var infoSections = infoLine.Split('\t');
StringView id = infoSections.GetNext().GetValueOrDefault();
StringView name = infoSections.GetNext().GetValueOrDefault();
var str = scope String();
str.AppendF("{0} - {1}", id, name);
subItem = menu.AddItem(str);
subItem.mOnMenuItemSelected.Add(new (item) => { mThreadCombo.Label = item.mLabel; });
}
}
public override void ResizeComponents()
{
base.ResizeComponents();
float curY = GS!(30);
mDescEdit.Resize(GS!(6), curY, mWidth - GS!(6) - GS!(6), GS!(22));
curY += GS!(42);
mThreadCombo.Resize(GS!(6), curY, mWidth - GS!(6) - GS!(6), GS!(24));
curY += GS!(42);
mSampleRateEdit.Resize(GS!(6), curY, mWidth - GS!(6) - GS!(6), GS!(24));
}
public override void Draw(Graphics g)
{
base.Draw(g);
DrawLabel(g, mDescEdit, "Profile Description (Optional)");
DrawLabel(g, mThreadCombo, "Thread");
DrawLabel(g, mSampleRateEdit, "Sample Rate");
}
public override void CalcSize()
{
mWidth = GS!(280);
mHeight = GS!(180);
}
}
}