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("Elevated permissions: {perms}", IsElevated);
_logger.Information("Stopwatch high resolution: {perms}", Stopwatch.IsHighResolution);
ApplyLoggingLevel();

View File

@ -11,6 +11,7 @@
d:DataContext="{d:DesignInstance local:PerformanceDebugViewModel}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
@ -19,7 +20,18 @@
If you are having performance issues, below you can find out which plugin might be the culprit.
</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.ItemTemplate>
<DataTemplate>

View File

@ -1,7 +1,13 @@
using System.Linq;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Timers;
using System.Windows;
using System.Windows.Media.Imaging;
using Artemis.Core;
using Artemis.Core.Services;
using SkiaSharp;
using SkiaSharp.Views.WPF;
using Stylet;
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 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;
_updateTimer = new Timer(500);
_fpsTimer = new Timer(1000);
DisplayName = "PERFORMANCE";
_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)
@ -57,6 +105,10 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs.Performance
_pluginManagementService.PluginDisabled += PluginToggled;
_pluginManagementService.PluginFeatureEnabled += FeatureToggled;
_pluginManagementService.PluginFeatureDisabled += FeatureToggled;
_coreService.FrameRendering += CoreServiceOnFrameRendering;
_coreService.FrameRendered += CoreServiceOnFrameRendered;
_fpsTimer.Elapsed += FpsTimerOnElapsed;
base.OnActivate();
}
@ -68,10 +120,43 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs.Performance
_pluginManagementService.PluginDisabled -= PluginToggled;
_pluginManagementService.PluginFeatureEnabled -= FeatureToggled;
_pluginManagementService.PluginFeatureDisabled -= FeatureToggled;
_coreService.FrameRendering -= CoreServiceOnFrameRendering;
_coreService.FrameRendered -= CoreServiceOnFrameRendered;
_fpsTimer.Elapsed -= FpsTimerOnElapsed;
Items.Clear();
base.OnDeactivate();
}
/// <inheritdoc />
protected override void OnClose()
{
_fpsTimer.Dispose();
base.OnClose();
}
#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="- Renderer:"></Run>
<Run Text="{Binding Renderer}"></Run>
<Run Text="- RGB.NET delta:"></Run>
<Run Text="{Binding Delta}"></Run>
</TextBlock>
</Grid>

View File

@ -25,6 +25,8 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs
private string _frameTargetPath;
private string _renderer;
private int _frames;
private double _delta;
private double _lastDelta;
public RenderDebugViewModel(ICoreService coreService)
{
@ -64,6 +66,12 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs
set => SetAndNotify(ref _renderer, value);
}
public double Delta
{
get => _delta;
set => SetAndNotify(ref _delta, value);
}
public void SaveFrame()
{
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()
{
_coreService.FrameRendering += CoreServiceOnFrameRendering;
_coreService.FrameRendered += CoreServiceOnFrameRendered;
_fpsTimer.Elapsed += FpsTimerOnElapsed;
base.OnActivate();
@ -87,6 +96,7 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs
protected override void OnDeactivate()
{
_coreService.FrameRendering -= CoreServiceOnFrameRendering;
_coreService.FrameRendered -= CoreServiceOnFrameRendered;
_fpsTimer.Elapsed -= FpsTimerOnElapsed;
base.OnDeactivate();
@ -98,6 +108,10 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs
base.OnClose();
}
private void CoreServiceOnFrameRendering(object? sender, FrameRenderingEventArgs e)
{
_lastDelta = e.DeltaTime;
}
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)
{
Delta = _lastDelta;
CurrentFps = _frames;
// Renderer = Constants.ManagedGraphicsContext != null ? Constants.ManagedGraphicsContext.GetType().Name : "Software";
Renderer = $"HighAccuracyTimers: {Stopwatch.IsHighResolution}";
Renderer = Constants.ManagedGraphicsContext != null ? Constants.ManagedGraphicsContext.GetType().Name : "Software";
_frames = 0;
}
}