Ken Thomases : winemac: Stop the display link after 2 seconds of idleness, not the first time it's idle.

Alexandre Julliard julliard at winehq.org
Fri Dec 8 13:51:29 CST 2017


Module: wine
Branch: master
Commit: 5f80cc43bfe3e741bdcbed744812472d5edd27c9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5f80cc43bfe3e741bdcbed744812472d5edd27c9

Author: Ken Thomases <ken at codeweavers.com>
Date:   Fri Dec  8 02:54:08 2017 -0600

winemac: Stop the display link after 2 seconds of idleness, not the first time it's idle.

Signed-off-by: Ken Thomases <ken at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/winemac.drv/cocoa_window.m | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m
index 03a9e78..991db57 100644
--- a/dlls/winemac.drv/cocoa_window.m
+++ b/dlls/winemac.drv/cocoa_window.m
@@ -166,6 +166,8 @@ static inline NSUInteger adjusted_modifiers_for_option_behavior(NSUInteger modif
 
     NSTimeInterval _actualRefreshPeriod;
     NSTimeInterval _nominalRefreshPeriod;
+
+    NSTimeInterval _lastDisplayTime;
 }
 
     - (id) initWithDisplayID:(CGDirectDisplayID)displayID;
@@ -224,7 +226,7 @@ static CVReturn WineDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTi
             [_windows addObject:window];
         }
         if (firstWindow || !CVDisplayLinkIsRunning(_link))
-            CVDisplayLinkStart(_link);
+            [self start];
     }
 
     - (void) removeWindow:(WineWindow*)window
@@ -256,7 +258,11 @@ static CVReturn WineDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTi
                     anyDisplayed = YES;
                 }
             }
-            if (!anyDisplayed)
+
+            NSTimeInterval now = [[NSProcessInfo processInfo] systemUptime];
+            if (anyDisplayed)
+                _lastDisplayTime = now;
+            else if (_lastDisplayTime + 2.0 < now)
                 CVDisplayLinkStop(_link);
         });
         [windows release];
@@ -279,6 +285,7 @@ static CVReturn WineDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTi
 
     - (void) start
     {
+        _lastDisplayTime = [[NSProcessInfo processInfo] systemUptime];
         CVDisplayLinkStart(_link);
     }
 




More information about the wine-cvs mailing list