Title: [143228] trunk/Source/WebCore
Revision
143228
Author
[email protected]
Date
2013-02-18 09:04:33 -0800 (Mon, 18 Feb 2013)

Log Message

Unreviewed, rolling out r143210.
http://trac.webkit.org/changeset/143210
https://bugs.webkit.org/show_bug.cgi?id=110128

Still causing some test timeouts (Requested by anttik on
#webkit).

Patch by Sheriff Bot <[email protected]> on 2013-02-18

* platform/SharedTimer.h:
(SharedTimer):
(WebCore):
(WebCore::MainThreadSharedTimer::stop):
* platform/ThreadTimers.cpp:
(WebCore::ThreadTimers::fireTimersInNestedEventLoop):
* platform/mac/SharedTimerMac.mm:
(WebCore):
(WebCore::PowerObserver::restartSharedTimer):
(WebCore::setSharedTimerFireInterval):
(WebCore::stopSharedTimer):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (143227 => 143228)


--- trunk/Source/WebCore/ChangeLog	2013-02-18 16:54:19 UTC (rev 143227)
+++ trunk/Source/WebCore/ChangeLog	2013-02-18 17:04:33 UTC (rev 143228)
@@ -1,3 +1,24 @@
+2013-02-18  Sheriff Bot  <[email protected]>
+
+        Unreviewed, rolling out r143210.
+        http://trac.webkit.org/changeset/143210
+        https://bugs.webkit.org/show_bug.cgi?id=110128
+
+        Still causing some test timeouts (Requested by anttik on
+        #webkit).
+
+        * platform/SharedTimer.h:
+        (SharedTimer):
+        (WebCore):
+        (WebCore::MainThreadSharedTimer::stop):
+        * platform/ThreadTimers.cpp:
+        (WebCore::ThreadTimers::fireTimersInNestedEventLoop):
+        * platform/mac/SharedTimerMac.mm:
+        (WebCore):
+        (WebCore::PowerObserver::restartSharedTimer):
+        (WebCore::setSharedTimerFireInterval):
+        (WebCore::stopSharedTimer):
+
 2013-02-18  Vladislav Kaznacheev  <[email protected]>
 
         Web Inspector: Disable hiding the debugger when it is below the source code

Modified: trunk/Source/WebCore/platform/SharedTimer.h (143227 => 143228)


--- trunk/Source/WebCore/platform/SharedTimer.h	2013-02-18 16:54:19 UTC (rev 143227)
+++ trunk/Source/WebCore/platform/SharedTimer.h	2013-02-18 17:04:33 UTC (rev 143228)
@@ -44,7 +44,6 @@
         // The fire interval is in seconds relative to the current monotonic clock time.
         virtual void setFireInterval(double) = 0;
         virtual void stop() = 0;
-        virtual void willEnterNestedEventLoop() { ASSERT_NOT_REACHED(); }
     };
 
 
@@ -53,9 +52,7 @@
     void setSharedTimerFiredFunction(void (*)());
     void setSharedTimerFireInterval(double);
     void stopSharedTimer();
-#if PLATFORM(MAC)
-    void clearSharedTimer();
-#endif
+
     // Implementation of SharedTimer for the main thread.
     class MainThreadSharedTimer : public SharedTimer {
     public:
@@ -73,13 +70,6 @@
         {
             stopSharedTimer();
         }
-
-        virtual void willEnterNestedEventLoop()
-        {
-#if PLATFORM(MAC)
-            clearSharedTimer();
-#endif
-        }
     };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/ThreadTimers.cpp (143227 => 143228)


--- trunk/Source/WebCore/platform/ThreadTimers.cpp	2013-02-18 16:54:19 UTC (rev 143227)
+++ trunk/Source/WebCore/platform/ThreadTimers.cpp	2013-02-18 17:04:33 UTC (rev 143228)
@@ -142,7 +142,6 @@
 {
     // Reset the reentrancy guard so the timers can fire again.
     m_firingTimers = false;
-    m_sharedTimer->willEnterNestedEventLoop();
     updateSharedTimer();
 }
 

Modified: trunk/Source/WebCore/platform/mac/SharedTimerMac.mm (143227 => 143228)


--- trunk/Source/WebCore/platform/mac/SharedTimerMac.mm	2013-02-18 16:54:19 UTC (rev 143227)
+++ trunk/Source/WebCore/platform/mac/SharedTimerMac.mm	2013-02-18 17:04:33 UTC (rev 143228)
@@ -42,7 +42,7 @@
 
 namespace WebCore {
 
-static const CFTimeInterval distantFuture = 60 * 60 * 24 * 365 * 10; // Decade.
+static CFRunLoopTimerRef sharedTimer;
 static void (*sharedTimerFiredFunction)();
 static void timerFired(CFRunLoopTimerRef, void*);
 
@@ -143,39 +143,15 @@
 {
     ASSERT(CFRunLoopGetCurrent() == CFRunLoopGetMain());
 
+    if (!sharedTimer)
+        return;
+
     stopSharedTimer();
     timerFired(0, 0);
 }
 
-static void ensurePowerObserver()
-{
-    static dispatch_once_t onceToken;
-    dispatch_once(&onceToken, ^{
-        static PowerObserver* powerObserver;
-        powerObserver = PowerObserver::create().leakPtr();
-    });
-}
+static PowerObserver* PowerObserver;
 
-static CFRunLoopTimerRef globalSharedTimer;
-
-static CFRunLoopTimerRef sharedTimer()
-{
-    if (!globalSharedTimer) {
-        globalSharedTimer = CFRunLoopTimerCreate(0, CFAbsoluteTimeGetCurrent() + distantFuture, distantFuture, 0, 0, timerFired, 0);
-        CFRunLoopAddTimer(CFRunLoopGetCurrent(), globalSharedTimer, kCFRunLoopCommonModes);
-        ensurePowerObserver();
-    }
-    return globalSharedTimer;
-};
-
-void clearSharedTimer()
-{
-    // For some reason the timer won't fire in a nested runloop unless it has been freshly created and inserted.
-    CFRunLoopTimerInvalidate(globalSharedTimer);
-    CFRelease(globalSharedTimer);
-    globalSharedTimer = 0;
-}
-
 void setSharedTimerFiredFunction(void (*f)())
 {
     ASSERT(!sharedTimerFiredFunction || sharedTimerFiredFunction == f);
@@ -194,13 +170,27 @@
 void setSharedTimerFireInterval(double interval)
 {
     ASSERT(sharedTimerFiredFunction);
+
+    if (sharedTimer) {
+        CFRunLoopTimerInvalidate(sharedTimer);
+        CFRelease(sharedTimer);
+    }
+
     CFAbsoluteTime fireDate = CFAbsoluteTimeGetCurrent() + interval;
-    CFRunLoopTimerSetNextFireDate(sharedTimer(), fireDate);
+    sharedTimer = CFRunLoopTimerCreate(0, fireDate, 0, 0, 0, timerFired, 0);
+    CFRunLoopAddTimer(CFRunLoopGetCurrent(), sharedTimer, kCFRunLoopCommonModes);
+    
+    if (!PowerObserver)
+        PowerObserver = PowerObserver::create().leakPtr();
 }
 
 void stopSharedTimer()
 {
-    CFRunLoopTimerSetNextFireDate(sharedTimer(), CFAbsoluteTimeGetCurrent() + distantFuture);
+    if (sharedTimer) {
+        CFRunLoopTimerInvalidate(sharedTimer);
+        CFRelease(sharedTimer);
+        sharedTimer = 0;
+    }
 }
 
 } // namespace WebCore
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to