mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-17 07:44:09 +02:00
109 lines
2.9 KiB
Beef
109 lines
2.9 KiB
Beef
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 | .PopupPosition;
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|