mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-12 11:56:30 +00:00
Debugger - Reworked FPS calculation code
Scripting - Save profile on scripting window close
This commit is contained in:
1 parent
a5c13bb543
commit
fbaa8c7af7
4 files changed
+134
-118
No files matched your search
@@ -1,5 +1,7 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Timers;
|
||||
using System.Windows;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
@@ -15,22 +17,24 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs
|
||||
public class RenderDebugViewModel : Screen
|
||||
{
|
||||
private readonly ICoreService _coreService;
|
||||
private readonly Timer _fpsTimer;
|
||||
private double _currentFps;
|
||||
private ImageSource _currentFrame;
|
||||
private WriteableBitmap _currentFrame;
|
||||
private int _renderWidth;
|
||||
private int _renderHeight;
|
||||
private string _frameTargetPath;
|
||||
private string _renderer;
|
||||
private int _frames;
|
||||
private DateTime _frameCountStart;
|
||||
|
||||
public RenderDebugViewModel(ICoreService coreService)
|
||||
{
|
||||
DisplayName = "RENDERING";
|
||||
_coreService = coreService;
|
||||
_fpsTimer = new Timer(1000);
|
||||
_fpsTimer.Start();
|
||||
}
|
||||
|
||||
public ImageSource CurrentFrame
|
||||
public WriteableBitmap CurrentFrame
|
||||
{
|
||||
get => _currentFrame;
|
||||
set => SetAndNotify(ref _currentFrame, value);
|
||||
@@ -77,19 +81,28 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs
|
||||
protected override void OnActivate()
|
||||
{
|
||||
_coreService.FrameRendered += CoreServiceOnFrameRendered;
|
||||
_coreService.FrameRendering += CoreServiceOnFrameRendering;
|
||||
_fpsTimer.Elapsed += FpsTimerOnElapsed;
|
||||
base.OnActivate();
|
||||
}
|
||||
|
||||
protected override void OnDeactivate()
|
||||
{
|
||||
_coreService.FrameRendered -= CoreServiceOnFrameRendered;
|
||||
_coreService.FrameRendering -= CoreServiceOnFrameRendering;
|
||||
_fpsTimer.Elapsed -= FpsTimerOnElapsed;
|
||||
base.OnDeactivate();
|
||||
}
|
||||
|
||||
protected override void OnClose()
|
||||
{
|
||||
_fpsTimer.Dispose();
|
||||
base.OnClose();
|
||||
}
|
||||
|
||||
|
||||
private void CoreServiceOnFrameRendered(object sender, FrameRenderedEventArgs e)
|
||||
{
|
||||
_frames++;
|
||||
|
||||
using SKImage skImage = e.Texture.Surface.Snapshot();
|
||||
SKImageInfo bitmapInfo = e.Texture.ImageInfo;
|
||||
|
||||
@@ -106,42 +119,36 @@ namespace Artemis.UI.Screens.Settings.Debug.Tabs
|
||||
_frameTargetPath = null;
|
||||
}
|
||||
|
||||
RenderHeight = bitmapInfo.Height;
|
||||
RenderWidth = bitmapInfo.Width;
|
||||
|
||||
Execute.OnUIThreadSync(() =>
|
||||
{
|
||||
RenderHeight = bitmapInfo.Height;
|
||||
RenderWidth = bitmapInfo.Width;
|
||||
|
||||
// ReSharper disable twice CompareOfFloatsByEqualityOperator
|
||||
if (CurrentFrame is not WriteableBitmap writable || writable.Width != bitmapInfo.Width || writable.Height != bitmapInfo.Height)
|
||||
if (CurrentFrame == null || CurrentFrame.Width != bitmapInfo.Width || CurrentFrame.Height != bitmapInfo.Height)
|
||||
{
|
||||
CurrentFrame = e.Texture.Surface.Snapshot().ToWriteableBitmap();
|
||||
return;
|
||||
}
|
||||
|
||||
writable.Lock();
|
||||
using (SKPixmap pixmap = new(bitmapInfo, writable.BackBuffer, writable.BackBufferStride))
|
||||
CurrentFrame.Lock();
|
||||
using (SKPixmap pixmap = new(bitmapInfo, CurrentFrame.BackBuffer, CurrentFrame.BackBufferStride))
|
||||
{
|
||||
// ReSharper disable once AccessToDisposedClosure - Looks fine
|
||||
skImage.ReadPixels(pixmap, 0, 0);
|
||||
}
|
||||
|
||||
writable.AddDirtyRect(new Int32Rect(0, 0, writable.PixelWidth, writable.PixelHeight));
|
||||
writable.Unlock();
|
||||
CurrentFrame.AddDirtyRect(new Int32Rect(0, 0, CurrentFrame.PixelWidth, CurrentFrame.PixelHeight));
|
||||
CurrentFrame.Unlock();
|
||||
});
|
||||
}
|
||||
|
||||
private void CoreServiceOnFrameRendering(object sender, FrameRenderingEventArgs e)
|
||||
private void FpsTimerOnElapsed(object sender, ElapsedEventArgs e)
|
||||
{
|
||||
if (DateTime.Now - _frameCountStart >= TimeSpan.FromSeconds(1))
|
||||
{
|
||||
CurrentFps = _frames;
|
||||
Renderer = Constants.ManagedGraphicsContext != null ? Constants.ManagedGraphicsContext.GetType().Name : "Software";
|
||||
|
||||
_frames = 0;
|
||||
_frameCountStart = DateTime.Now;
|
||||
}
|
||||
|
||||
_frames++;
|
||||
CurrentFps = _frames;
|
||||
// Renderer = Constants.ManagedGraphicsContext != null ? Constants.ManagedGraphicsContext.GetType().Name : "Software";
|
||||
Renderer = $"HighAccuracyTimers: {Stopwatch.IsHighResolution}";
|
||||
_frames = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user