Andrew Eikum : winex11.drv: Throttle calls to XResetScreenSaver.

Alexandre Julliard julliard at winehq.org
Mon Apr 20 15:01:47 CDT 2020


Module: wine
Branch: oldstable
Commit: 01ea6a5b63be3924055b59893b388ad85bf23a7c
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=01ea6a5b63be3924055b59893b388ad85bf23a7c

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>
(cherry picked from commit cb703739e5c138e3beffab321b84edb129156000)
Signed-off-by: Michael Stefaniuc <mstefani 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 7a3b340e19..7589b3228e 100644
--- a/dlls/winex11.drv/window.c
+++ b/dlls/winex11.drv/window.c
@@ -1792,10 +1792,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