forked from Mirror/Ryujinx
Ava UI: Prevent Status Bar Backend Update (#6506)
* Prevent Status Bar Backend Update * Make it a switch
This commit is contained in:
parent
0652813b0f
commit
9480e5c5ce
4 changed files with 45 additions and 10 deletions
|
@ -112,6 +112,7 @@ namespace Ryujinx.Ava
|
||||||
private readonly object _lockObject = new();
|
private readonly object _lockObject = new();
|
||||||
|
|
||||||
public event EventHandler AppExit;
|
public event EventHandler AppExit;
|
||||||
|
public event EventHandler<StatusInitEventArgs> StatusInitEvent;
|
||||||
public event EventHandler<StatusUpdatedEventArgs> StatusUpdatedEvent;
|
public event EventHandler<StatusUpdatedEventArgs> StatusUpdatedEvent;
|
||||||
|
|
||||||
public VirtualFileSystem VirtualFileSystem { get; }
|
public VirtualFileSystem VirtualFileSystem { get; }
|
||||||
|
@ -947,6 +948,7 @@ namespace Ryujinx.Ava
|
||||||
{
|
{
|
||||||
_renderingStarted = true;
|
_renderingStarted = true;
|
||||||
_viewModel.SwitchToRenderer(false);
|
_viewModel.SwitchToRenderer(false);
|
||||||
|
InitStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
Device.PresentFrame(() => (RendererHost.EmbeddedWindow as EmbeddedWindowOpenGL)?.SwapBuffers());
|
Device.PresentFrame(() => (RendererHost.EmbeddedWindow as EmbeddedWindowOpenGL)?.SwapBuffers());
|
||||||
|
@ -970,6 +972,18 @@ namespace Ryujinx.Ava
|
||||||
(RendererHost.EmbeddedWindow as EmbeddedWindowOpenGL)?.MakeCurrent(true);
|
(RendererHost.EmbeddedWindow as EmbeddedWindowOpenGL)?.MakeCurrent(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void InitStatus()
|
||||||
|
{
|
||||||
|
StatusInitEvent?.Invoke(this, new StatusInitEventArgs(
|
||||||
|
ConfigurationState.Instance.Graphics.GraphicsBackend.Value switch
|
||||||
|
{
|
||||||
|
GraphicsBackend.Vulkan => "Vulkan",
|
||||||
|
GraphicsBackend.OpenGl => "OpenGL",
|
||||||
|
_ => throw new NotImplementedException()
|
||||||
|
},
|
||||||
|
$"GPU: {_renderer.GetHardwareInfo().GpuDriver}"));
|
||||||
|
}
|
||||||
|
|
||||||
public void UpdateStatus()
|
public void UpdateStatus()
|
||||||
{
|
{
|
||||||
// Run a status update only when a frame is to be drawn. This prevents from updating the ui and wasting a render when no frame is queued.
|
// Run a status update only when a frame is to be drawn. This prevents from updating the ui and wasting a render when no frame is queued.
|
||||||
|
@ -983,12 +997,10 @@ namespace Ryujinx.Ava
|
||||||
StatusUpdatedEvent?.Invoke(this, new StatusUpdatedEventArgs(
|
StatusUpdatedEvent?.Invoke(this, new StatusUpdatedEventArgs(
|
||||||
Device.EnableDeviceVsync,
|
Device.EnableDeviceVsync,
|
||||||
LocaleManager.Instance[LocaleKeys.VolumeShort] + $": {(int)(Device.GetVolume() * 100)}%",
|
LocaleManager.Instance[LocaleKeys.VolumeShort] + $": {(int)(Device.GetVolume() * 100)}%",
|
||||||
ConfigurationState.Instance.Graphics.GraphicsBackend.Value == GraphicsBackend.Vulkan ? "Vulkan" : "OpenGL",
|
|
||||||
dockedMode,
|
dockedMode,
|
||||||
ConfigurationState.Instance.Graphics.AspectRatio.Value.ToText(),
|
ConfigurationState.Instance.Graphics.AspectRatio.Value.ToText(),
|
||||||
LocaleManager.Instance[LocaleKeys.Game] + $": {Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)",
|
LocaleManager.Instance[LocaleKeys.Game] + $": {Device.Statistics.GetGameFrameRate():00.00} FPS ({Device.Statistics.GetGameFrameTime():00.00} ms)",
|
||||||
$"FIFO: {Device.Statistics.GetFifoPercent():00.00} %",
|
$"FIFO: {Device.Statistics.GetFifoPercent():00.00} %"));
|
||||||
$"GPU: {_renderer.GetHardwareInfo().GpuDriver}"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task ShowExitPrompt()
|
public async Task ShowExitPrompt()
|
||||||
|
|
16
src/Ryujinx/UI/Models/StatusInitEventArgs.cs
Normal file
16
src/Ryujinx/UI/Models/StatusInitEventArgs.cs
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Ryujinx.Ava.UI.Models
|
||||||
|
{
|
||||||
|
internal class StatusInitEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
public string GpuBackend { get; }
|
||||||
|
public string GpuName { get; }
|
||||||
|
|
||||||
|
public StatusInitEventArgs(string gpuBackend, string gpuName)
|
||||||
|
{
|
||||||
|
GpuBackend = gpuBackend;
|
||||||
|
GpuName = gpuName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -6,23 +6,19 @@ namespace Ryujinx.Ava.UI.Models
|
||||||
{
|
{
|
||||||
public bool VSyncEnabled { get; }
|
public bool VSyncEnabled { get; }
|
||||||
public string VolumeStatus { get; }
|
public string VolumeStatus { get; }
|
||||||
public string GpuBackend { get; }
|
|
||||||
public string AspectRatio { get; }
|
public string AspectRatio { get; }
|
||||||
public string DockedMode { get; }
|
public string DockedMode { get; }
|
||||||
public string FifoStatus { get; }
|
public string FifoStatus { get; }
|
||||||
public string GameStatus { get; }
|
public string GameStatus { get; }
|
||||||
public string GpuName { get; }
|
|
||||||
|
|
||||||
public StatusUpdatedEventArgs(bool vSyncEnabled, string volumeStatus, string gpuBackend, string dockedMode, string aspectRatio, string gameStatus, string fifoStatus, string gpuName)
|
public StatusUpdatedEventArgs(bool vSyncEnabled, string volumeStatus, string dockedMode, string aspectRatio, string gameStatus, string fifoStatus)
|
||||||
{
|
{
|
||||||
VSyncEnabled = vSyncEnabled;
|
VSyncEnabled = vSyncEnabled;
|
||||||
VolumeStatus = volumeStatus;
|
VolumeStatus = volumeStatus;
|
||||||
GpuBackend = gpuBackend;
|
|
||||||
DockedMode = dockedMode;
|
DockedMode = dockedMode;
|
||||||
AspectRatio = aspectRatio;
|
AspectRatio = aspectRatio;
|
||||||
GameStatus = gameStatus;
|
GameStatus = gameStatus;
|
||||||
FifoStatus = fifoStatus;
|
FifoStatus = fifoStatus;
|
||||||
GpuName = gpuName;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1172,6 +1172,7 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
{
|
{
|
||||||
RendererHostControl.WindowCreated += RendererHost_Created;
|
RendererHostControl.WindowCreated += RendererHost_Created;
|
||||||
|
|
||||||
|
AppHost.StatusInitEvent += Init_StatusBar;
|
||||||
AppHost.StatusUpdatedEvent += Update_StatusBar;
|
AppHost.StatusUpdatedEvent += Update_StatusBar;
|
||||||
AppHost.AppExit += AppHost_AppExit;
|
AppHost.AppExit += AppHost_AppExit;
|
||||||
|
|
||||||
|
@ -1198,6 +1199,18 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void Init_StatusBar(object sender, StatusInitEventArgs args)
|
||||||
|
{
|
||||||
|
if (ShowMenuAndStatusBar && !ShowLoadProgress)
|
||||||
|
{
|
||||||
|
Dispatcher.UIThread.InvokeAsync(() =>
|
||||||
|
{
|
||||||
|
GpuNameText = args.GpuName;
|
||||||
|
BackendText = args.GpuBackend;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void Update_StatusBar(object sender, StatusUpdatedEventArgs args)
|
private void Update_StatusBar(object sender, StatusUpdatedEventArgs args)
|
||||||
{
|
{
|
||||||
if (ShowMenuAndStatusBar && !ShowLoadProgress)
|
if (ShowMenuAndStatusBar && !ShowLoadProgress)
|
||||||
|
@ -1220,8 +1233,6 @@ namespace Ryujinx.Ava.UI.ViewModels
|
||||||
GameStatusText = args.GameStatus;
|
GameStatusText = args.GameStatus;
|
||||||
VolumeStatusText = args.VolumeStatus;
|
VolumeStatusText = args.VolumeStatus;
|
||||||
FifoStatusText = args.FifoStatus;
|
FifoStatusText = args.FifoStatus;
|
||||||
GpuNameText = args.GpuName;
|
|
||||||
BackendText = args.GpuBackend;
|
|
||||||
|
|
||||||
ShowStatusSeparator = true;
|
ShowStatusSeparator = true;
|
||||||
});
|
});
|
||||||
|
|
Reference in a new issue