mirror of
https://github.com/Facepunch/sbox-public.git
synced 2026-04-19 05:48:07 -04:00
This commit imports the C# engine code and game files, excluding C++ source code. [Source-Commit: ceb3d758046e50faa6258bc3b658a30c97743268]
90 lines
2.2 KiB
C#
90 lines
2.2 KiB
C#
using Sandbox.Diagnostics;
|
|
namespace Editor;
|
|
|
|
[Dock( "Editor", "Performance", "timer" )]
|
|
public class PerformanceDock : Widget
|
|
{
|
|
RealtimeChart Chart;
|
|
Button MenuButton;
|
|
|
|
public float RefreshSpeed = 0.25f;
|
|
|
|
public PerformanceDock( Widget parent ) : base( parent )
|
|
{
|
|
MinimumSize = 200;
|
|
|
|
MenuButton = new Button.Clear( "", this );
|
|
MenuButton.Icon = "settings";
|
|
MenuButton.Clicked = OpenMenu;
|
|
|
|
Chart = new RealtimeChart( this );
|
|
Chart.BackgroundColor = Theme.SurfaceBackground.Darken( 0.7f );
|
|
Chart.Visible = true;
|
|
Chart.Lower();
|
|
}
|
|
|
|
private void OpenMenu()
|
|
{
|
|
var menu = new ContextMenu( this );
|
|
|
|
menu.AddOption( new Option { Text = "Every Frame", Checkable = true, Checked = RefreshSpeed == 0, Triggered = () => RefreshSpeed = 0 } );
|
|
menu.AddOption( new Option { Text = "Fast", Checkable = true, Checked = RefreshSpeed == 0.1f, Triggered = () => RefreshSpeed = 0.1f } );
|
|
menu.AddOption( new Option { Text = "Medium", Checkable = true, Checked = RefreshSpeed == 0.25f, Triggered = () => RefreshSpeed = 0.25f } );
|
|
menu.AddOption( new Option { Text = "Slow", Checkable = true, Checked = RefreshSpeed == 0.5f, Triggered = () => RefreshSpeed = 0.5f } );
|
|
|
|
menu.Position = MenuButton.ScreenRect.BottomLeft;
|
|
menu.Visible = true;
|
|
}
|
|
|
|
protected override void DoLayout()
|
|
{
|
|
base.DoLayout();
|
|
|
|
if ( Chart.IsValid() )
|
|
{
|
|
Chart.Position = 0;
|
|
Chart.Size = Size;
|
|
}
|
|
|
|
MenuButton.Size = 32;
|
|
MenuButton.Position = 8;
|
|
}
|
|
|
|
RealTimeSince timeSinceUpdate;
|
|
int framesSinceUpdate;
|
|
|
|
[EditorEvent.Frame]
|
|
public void Frame()
|
|
{
|
|
framesSinceUpdate++;
|
|
|
|
if ( timeSinceUpdate < RefreshSpeed )
|
|
return;
|
|
|
|
if ( !Chart.IsValid() )
|
|
return;
|
|
|
|
// TODO - add a toolbar with settings for all this shit
|
|
// especially ScrollSize and the update speed above
|
|
|
|
timeSinceUpdate = 0;
|
|
|
|
Chart.ScrollSize = (int)(RefreshSpeed * 20) + 1;
|
|
Chart.MinMax = new Vector2( 16, 0 );
|
|
Chart.Stacked = true;
|
|
Chart.ChartType = "bar";
|
|
Chart.GridLineMajor = 4;
|
|
Chart.GridLineMinor = 0;
|
|
|
|
foreach ( var entry in PerformanceStats.Timings.GetMain() )
|
|
{
|
|
var renderColor = entry.Color;
|
|
Chart.SetData( entry.Name, "image", renderColor, entry.GetMetric( framesSinceUpdate ) );
|
|
}
|
|
|
|
Chart.Draw();
|
|
|
|
framesSinceUpdate = 0;
|
|
}
|
|
}
|