1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +00:00

Debugger - Add FPS and other metrics to performance tab as well

Debugger - Add RGB.NET delta to rendering tab
This commit is contained in:
Robert 2022-02-05 12:11:14 +01:00
parent 1e92d19c2f
commit 5b9d3e783a
5 changed files with 120 additions and 6 deletions

View File

@ -208,6 +208,7 @@ namespace Artemis.Core.Services
); );
_logger.Information("Startup arguments: {args}", StartupArguments); _logger.Information("Startup arguments: {args}", StartupArguments);
_logger.Information("Elevated permissions: {perms}", IsElevated); _logger.Information("Elevated permissions: {perms}", IsElevated);
_logger.Information("Stopwatch high resolution: {perms}", Stopwatch.IsHighResolution);
ApplyLoggingLevel(); ApplyLoggingLevel();

View File

@ -11,6 +11,7 @@
d:DataContext="{d:DesignInstance local:PerformanceDebugViewModel}"> d:DataContext="{d:DesignInstance local:PerformanceDebugViewModel}">
<Grid> <Grid>
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" /> <RowDefinition Height="Auto" />
<RowDefinition Height="*" /> <RowDefinition Height="*" />
</Grid.RowDefinitions> </Grid.RowDefinitions>
@ -19,7 +20,18 @@
If you are having performance issues, below you can find out which plugin might be the culprit. If you are having performance issues, below you can find out which plugin might be the culprit.
</TextBlock> </TextBlock>
<ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Hidden" PreviewMouseWheel="ScrollViewer_PreviewMouseWheel"> <TextBlock Grid.Row="1" HorizontalAlignment="Right" Margin="0,5,5,0">
<Run Text="FPS: " />
<Run FontWeight="Bold" Text="{Binding CurrentFps}" />
<Run Text="at" />
<Run Text="{Binding RenderWidth}" /><Run Text="x" /><Run Text="{Binding RenderHeight}" />
<Run Text="- Renderer:"></Run>
<Run Text="{Binding Renderer}"></Run>
<Run Text="- RGB.NET delta:"></Run>
<Run Text="{Binding Delta}"></Run>
</TextBlock>
<ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Hidden" PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
<ItemsControl ItemsSource="{Binding Items}" Margin="0 0 10 0"> <ItemsControl ItemsSource="{Binding Items}" Margin="0 0 10 0">
<ItemsControl.ItemTemplate> <ItemsControl.ItemTemplate>
<DataTemplate> <DataTemplate>

View File

@ -1,7 +1,13 @@
using System.Linq; using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Timers; using System.Timers;
using System.Windows;
using System.Windows.Media.Imaging;
using Artemis.Core; using Artemis.Core;
using Artemis.Core.Services; using Artemis.Core.Services;
using SkiaSharp;
using SkiaSharp.Views.WPF;
using Stylet; using Stylet;
namespace Artemis.UI.Screens.Settings.Debug.Tabs.Performance namespace Artemis.UI.Screens.Settings.Debug.Tabs.Performance
@ -10,14 +16,56 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs.Performance
{ {
private readonly IPluginManagementService _pluginManagementService; private readonly IPluginManagementService _pluginManagementService;
private readonly Timer _updateTimer; private readonly Timer _updateTimer;
private readonly ICoreService _coreService;
private readonly Timer _fpsTimer;
private double _currentFps;
private int _renderWidth;
private int _renderHeight;
private string _renderer;
private int _frames;
private double _delta;
private double _lastDelta;
public PerformanceDebugViewModel(IPluginManagementService pluginManagementService) public PerformanceDebugViewModel(ICoreService coreService, IPluginManagementService pluginManagementService)
{ {
_coreService = coreService;
_pluginManagementService = pluginManagementService; _pluginManagementService = pluginManagementService;
_updateTimer = new Timer(500); _updateTimer = new Timer(500);
_fpsTimer = new Timer(1000);
DisplayName = "PERFORMANCE"; DisplayName = "PERFORMANCE";
_updateTimer.Elapsed += UpdateTimerOnElapsed; _updateTimer.Elapsed += UpdateTimerOnElapsed;
_fpsTimer.Start();
}
public double CurrentFps
{
get => _currentFps;
set => SetAndNotify(ref _currentFps, value);
}
public int RenderWidth
{
get => _renderWidth;
set => SetAndNotify(ref _renderWidth, value);
}
public int RenderHeight
{
get => _renderHeight;
set => SetAndNotify(ref _renderHeight, value);
}
public string Renderer
{
get => _renderer;
set => SetAndNotify(ref _renderer, value);
}
public double Delta
{
get => _delta;
set => SetAndNotify(ref _delta, value);
} }
private void UpdateTimerOnElapsed(object sender, ElapsedEventArgs e) private void UpdateTimerOnElapsed(object sender, ElapsedEventArgs e)
@ -57,6 +105,10 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs.Performance
_pluginManagementService.PluginDisabled += PluginToggled; _pluginManagementService.PluginDisabled += PluginToggled;
_pluginManagementService.PluginFeatureEnabled += FeatureToggled; _pluginManagementService.PluginFeatureEnabled += FeatureToggled;
_pluginManagementService.PluginFeatureDisabled += FeatureToggled; _pluginManagementService.PluginFeatureDisabled += FeatureToggled;
_coreService.FrameRendering += CoreServiceOnFrameRendering;
_coreService.FrameRendered += CoreServiceOnFrameRendered;
_fpsTimer.Elapsed += FpsTimerOnElapsed;
base.OnActivate(); base.OnActivate();
} }
@ -68,10 +120,43 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs.Performance
_pluginManagementService.PluginDisabled -= PluginToggled; _pluginManagementService.PluginDisabled -= PluginToggled;
_pluginManagementService.PluginFeatureEnabled -= FeatureToggled; _pluginManagementService.PluginFeatureEnabled -= FeatureToggled;
_pluginManagementService.PluginFeatureDisabled -= FeatureToggled; _pluginManagementService.PluginFeatureDisabled -= FeatureToggled;
_coreService.FrameRendering -= CoreServiceOnFrameRendering;
_coreService.FrameRendered -= CoreServiceOnFrameRendered;
_fpsTimer.Elapsed -= FpsTimerOnElapsed;
Items.Clear(); Items.Clear();
base.OnDeactivate(); base.OnDeactivate();
} }
/// <inheritdoc />
protected override void OnClose()
{
_fpsTimer.Dispose();
base.OnClose();
}
#endregion #endregion
private void FpsTimerOnElapsed(object sender, ElapsedEventArgs e)
{
Delta = _lastDelta;
CurrentFps = _frames;
Renderer = Constants.ManagedGraphicsContext != null ? Constants.ManagedGraphicsContext.GetType().Name : "Software";
_frames = 0;
}
private void CoreServiceOnFrameRendering(object? sender, FrameRenderingEventArgs e)
{
_lastDelta = e.DeltaTime;
}
private void CoreServiceOnFrameRendered(object sender, FrameRenderedEventArgs e)
{
_frames++;
SKImageInfo bitmapInfo = e.Texture.ImageInfo;
RenderHeight = bitmapInfo.Height;
RenderWidth = bitmapInfo.Width;
}
} }
} }

View File

@ -36,6 +36,8 @@
<Run Text="{Binding RenderWidth}" /><Run Text="x" /><Run Text="{Binding RenderHeight}" /> <Run Text="{Binding RenderWidth}" /><Run Text="x" /><Run Text="{Binding RenderHeight}" />
<Run Text="- Renderer:"></Run> <Run Text="- Renderer:"></Run>
<Run Text="{Binding Renderer}"></Run> <Run Text="{Binding Renderer}"></Run>
<Run Text="- RGB.NET delta:"></Run>
<Run Text="{Binding Delta}"></Run>
</TextBlock> </TextBlock>
</Grid> </Grid>

View File

@ -25,6 +25,8 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs
private string _frameTargetPath; private string _frameTargetPath;
private string _renderer; private string _renderer;
private int _frames; private int _frames;
private double _delta;
private double _lastDelta;
public RenderDebugViewModel(ICoreService coreService) public RenderDebugViewModel(ICoreService coreService)
{ {
@ -64,6 +66,12 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs
set => SetAndNotify(ref _renderer, value); set => SetAndNotify(ref _renderer, value);
} }
public double Delta
{
get => _delta;
set => SetAndNotify(ref _delta, value);
}
public void SaveFrame() public void SaveFrame()
{ {
VistaSaveFileDialog dialog = new VistaSaveFileDialog {Filter = "Portable network graphic (*.png)|*.png", Title = "Save render frame"}; VistaSaveFileDialog dialog = new VistaSaveFileDialog {Filter = "Portable network graphic (*.png)|*.png", Title = "Save render frame"};
@ -80,6 +88,7 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs
protected override void OnActivate() protected override void OnActivate()
{ {
_coreService.FrameRendering += CoreServiceOnFrameRendering;
_coreService.FrameRendered += CoreServiceOnFrameRendered; _coreService.FrameRendered += CoreServiceOnFrameRendered;
_fpsTimer.Elapsed += FpsTimerOnElapsed; _fpsTimer.Elapsed += FpsTimerOnElapsed;
base.OnActivate(); base.OnActivate();
@ -87,6 +96,7 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs
protected override void OnDeactivate() protected override void OnDeactivate()
{ {
_coreService.FrameRendering -= CoreServiceOnFrameRendering;
_coreService.FrameRendered -= CoreServiceOnFrameRendered; _coreService.FrameRendered -= CoreServiceOnFrameRendered;
_fpsTimer.Elapsed -= FpsTimerOnElapsed; _fpsTimer.Elapsed -= FpsTimerOnElapsed;
base.OnDeactivate(); base.OnDeactivate();
@ -98,6 +108,10 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs
base.OnClose(); base.OnClose();
} }
private void CoreServiceOnFrameRendering(object? sender, FrameRenderingEventArgs e)
{
_lastDelta = e.DeltaTime;
}
private void CoreServiceOnFrameRendered(object sender, FrameRenderedEventArgs e) private void CoreServiceOnFrameRendered(object sender, FrameRenderedEventArgs e)
{ {
@ -145,9 +159,9 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs
private void FpsTimerOnElapsed(object sender, ElapsedEventArgs e) private void FpsTimerOnElapsed(object sender, ElapsedEventArgs e)
{ {
Delta = _lastDelta;
CurrentFps = _frames; CurrentFps = _frames;
// Renderer = Constants.ManagedGraphicsContext != null ? Constants.ManagedGraphicsContext.GetType().Name : "Software"; Renderer = Constants.ManagedGraphicsContext != null ? Constants.ManagedGraphicsContext.GetType().Name : "Software";
Renderer = $"HighAccuracyTimers: {Stopwatch.IsHighResolution}";
_frames = 0; _frames = 0;
} }
} }