Reviewed by Kevin Decker.
authortomernic <tomernic@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 15 May 2006 22:18:56 +0000 (22:18 +0000)
committertomernic <tomernic@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 15 May 2006 22:18:56 +0000 (22:18 +0000)
        Follow-up to my previous PLT fix.  I found upon further testing (by dramatically decreasing the
        allowed display rate) that +_webkit_displayThrottledWindows did not always force a display when
        necessary.  The reason is that I was not giving a proper timeout to CFRunLoopRunInMode().  I was
        passing 0, which was causing only "expired" timers to fire.  This method is actually supposed to
        block until all currently scheduled display timers fire.

        I tested this change and found that it did not affect my PLT times when the display rate was
        capped to 60 fps.  It also behaves as expected when the display rate is set much lower (say, 1
        display per second); my previous fix did not work well at such display rates.

        * Misc/WebNSWindowExtras.m:
        (+[NSWindow _webkit_displayThrottledWindows]):
        Run the runloop for an amount of time equal to the minimum allowed interval between displays.
        This ensures that we'll block until all currently scheduled display timers fire (but we won't
        block for future display timers).

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@14391 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/ChangeLog
WebKit/Misc/WebNSWindowExtras.m

index 0ea7293defcf47c24508ad1ad21f1f72314f842c..58bfd57d6b71fda59a99d098ab3d608d2bd0607a 100644 (file)
@@ -1,3 +1,23 @@
+2006-05-15  Tim Omernick  <timo@apple.com>
+
+        Reviewed by Kevin Decker.
+
+        Follow-up to my previous PLT fix.  I found upon further testing (by dramatically decreasing the
+        allowed display rate) that +_webkit_displayThrottledWindows did not always force a display when
+        necessary.  The reason is that I was not giving a proper timeout to CFRunLoopRunInMode().  I was
+        passing 0, which was causing only "expired" timers to fire.  This method is actually supposed to
+        block until all currently scheduled display timers fire.
+
+        I tested this change and found that it did not affect my PLT times when the display rate was
+        capped to 60 fps.  It also behaves as expected when the display rate is set much lower (say, 1
+        display per second); my previous fix did not work well at such display rates.
+
+        * Misc/WebNSWindowExtras.m:
+        (+[NSWindow _webkit_displayThrottledWindows]):
+        Run the runloop for an amount of time equal to the minimum allowed interval between displays.
+        This ensures that we'll block until all currently scheduled display timers fire (but we won't
+        block for future display timers).
+
 2006-05-15  John Sullivan  <sullivan@apple.com>
 
         Reviewed by Tim Omernick.
 2006-05-15  John Sullivan  <sullivan@apple.com>
 
         Reviewed by Tim Omernick.
index 3b8a6393f6f3cc6f0e420758ffe91608962d327c..ad7970c962aae32690aa6c0674998c7b7dbe7521 100644 (file)
@@ -111,7 +111,7 @@ static void disableWindowDisplayThrottleApplierFunction(const void *key, const v
 
     // Force all throttle timers to fire by running the runloop in WebKitDisplayThrottleRunLoopMode until there are
     // no more runloop timers/sources for that mode.
 
     // Force all throttle timers to fire by running the runloop in WebKitDisplayThrottleRunLoopMode until there are
     // no more runloop timers/sources for that mode.
-    while (CFRunLoopRunInMode((CFStringRef)WebKitDisplayThrottleRunLoopMode, 0, true) == kCFRunLoopRunHandledSource) {}
+    while (CFRunLoopRunInMode((CFStringRef)WebKitDisplayThrottleRunLoopMode, 1.0 / DISPLAY_REFRESH_INTERVAL, true) == kCFRunLoopRunHandledSource) {}
 }
 
 + (void)_webkit_disableWindowDisplayThrottle
 }
 
 + (void)_webkit_disableWindowDisplayThrottle