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