Prevent Display Sleep on Windows while running a game (#1850)

Co-authored-by: EliEron <example@example.com>
This commit is contained in:
EliEron 2021-01-25 00:02:00 +01:00 committed by GitHub
parent ddf1105bcb
commit ad491b5570
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 40 additions and 1 deletions

View file

@ -0,0 +1,35 @@
using System;
using System.Runtime.InteropServices;
namespace Ryujinx.Common.System
{
public class DisplaySleep
{
[Flags]
enum EXECUTION_STATE : uint
{
ES_CONTINUOUS = 0x80000000,
ES_DISPLAY_REQUIRED = 0x00000002,
ES_SYSTEM_REQUIRED = 0x00000001
}
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
static public void Prevent()
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS | EXECUTION_STATE.ES_SYSTEM_REQUIRED | EXECUTION_STATE.ES_DISPLAY_REQUIRED);
}
}
static public void Restore()
{
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
SetThreadExecutionState(EXECUTION_STATE.ES_CONTINUOUS);
}
}
}
}

View file

@ -554,6 +554,8 @@ namespace Ryujinx.Ui
_windowsMultimediaTimerResolution = new WindowsMultimediaTimerResolution(1); _windowsMultimediaTimerResolution = new WindowsMultimediaTimerResolution(1);
} }
DisplaySleep.Prevent();
GlRendererWidget = new GlRenderer(_emulationContext, ConfigurationState.Instance.Logger.GraphicsDebugLevel); GlRendererWidget = new GlRenderer(_emulationContext, ConfigurationState.Instance.Logger.GraphicsDebugLevel);
Application.Invoke(delegate Application.Invoke(delegate
@ -604,6 +606,7 @@ namespace Ryujinx.Ui
_windowsMultimediaTimerResolution?.Dispose(); _windowsMultimediaTimerResolution?.Dispose();
_windowsMultimediaTimerResolution = null; _windowsMultimediaTimerResolution = null;
DisplaySleep.Restore();
_viewBox.Remove(GlRendererWidget); _viewBox.Remove(GlRendererWidget);
_viewBox.Add(_gameTableWindow); _viewBox.Add(_gameTableWindow);

View file

@ -1299,6 +1299,7 @@
<object class="GtkLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="tooltip-text" translatable="yes">Change System Time</property>
<property name="halign">end</property> <property name="halign">end</property>
<property name="label" translatable="yes">System Time:</property> <property name="label" translatable="yes">System Time:</property>
</object> </object>
@ -1509,7 +1510,7 @@
<object class="GtkLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can-focus">False</property> <property name="can-focus">False</property>
<property name="tooltip-text" translatable="yes">Change System Region</property> <property name="tooltip-text" translatable="yes">Change Audio Backend</property>
<property name="halign">end</property> <property name="halign">end</property>
<property name="margin-right">5</property> <property name="margin-right">5</property>
<property name="label" translatable="yes">Audio Backend: </property> <property name="label" translatable="yes">Audio Backend: </property>