Andrew Eikum : winex11.drv: Throttle calls to XResetScreenSaver.
Alexandre Julliard
julliard at winehq.org
Tue Sep 17 16:22:49 CDT 2019
Module: wine
Branch: master
Commit: cb703739e5c138e3beffab321b84edb129156000
URL: https://source.winehq.org/git/wine.git/?a=commit;h=cb703739e5c138e3beffab321b84edb129156000
Author: Andrew Eikum <aeikum at codeweavers.com>
Date: Tue Sep 17 08:09:36 2019 -0500
winex11.drv: Throttle calls to XResetScreenSaver.
Frequent calls to XResetScreenSaver cause performance problems on some
GPU drivers, see https://bugs.freedesktop.org/show_bug.cgi?id=110659
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/winex11.drv/window.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c
index fb97ec5a0d..c97cc6a9e0 100644
--- a/dlls/winex11.drv/window.c
+++ b/dlls/winex11.drv/window.c
@@ -1793,10 +1793,20 @@ static LRESULT CALLBACK desktop_wndproc_wrapper( HWND hwnd, UINT msg, WPARAM wp,
switch (msg)
{
case WM_WINE_NOTIFY_ACTIVITY:
- XResetScreenSaver( gdi_display );
- XFlush( gdi_display );
+ {
+ static ULONGLONG last = 0;
+ ULONGLONG now = GetTickCount64();
+ /* calling XResetScreenSaver too often can cause performance
+ * problems, so throttle it */
+ if (now > last + 5000)
+ {
+ XResetScreenSaver( gdi_display );
+ XFlush( gdi_display );
+ last = now;
+ }
break;
}
+ }
return desktop_orig_wndproc( hwnd, msg, wp, lp );
}
More information about the wine-cvs
mailing list