Index: third_party/WebKit/Source/core/page/Page.cpp |
diff --git a/third_party/WebKit/Source/core/page/Page.cpp b/third_party/WebKit/Source/core/page/Page.cpp |
index 3ec85f1254f91bb4ac9abccee16d1df793bf00e3..dac637d20e4d5dcfc021aebc504f1456fbc2820e 100644 |
--- a/third_party/WebKit/Source/core/page/Page.cpp |
+++ b/third_party/WebKit/Source/core/page/Page.cpp |
@@ -117,6 +117,7 @@ |
, m_tabKeyCyclesThroughElements(true) |
, m_defersLoading(false) |
, m_deviceScaleFactor(1) |
+ , m_timerAlignmentInterval(DOMTimer::visiblePageAlignmentInterval()) |
, m_visibilityState(PageVisibilityStateVisible) |
, m_isCursorVisible(true) |
#if ENABLE(ASSERT) |
@@ -355,15 +356,41 @@ |
} |
} |
+void Page::setTimerAlignmentInterval(double interval) |
+{ |
+ if (interval == m_timerAlignmentInterval) |
+ return; |
+ |
+ m_timerAlignmentInterval = interval; |
+ for (Frame* frame = mainFrame(); frame; frame = frame->tree().traverseNextWithWrap(false)) { |
+ if (!frame->isLocalFrame()) |
+ continue; |
+ |
+ if (Document* document = toLocalFrame(frame)->document()) { |
+ if (DOMTimerCoordinator* timers = document->timers()) { |
+ timers->didChangeTimerAlignmentInterval(); |
+ } |
+ } |
+ } |
+} |
+ |
+double Page::timerAlignmentInterval() const |
+{ |
+ return m_timerAlignmentInterval; |
+} |
+ |
void Page::setVisibilityState(PageVisibilityState visibilityState, bool isInitialState) |
{ |
if (m_visibilityState == visibilityState) |
return; |
m_visibilityState = visibilityState; |
+ // TODO(alexclarke): Move throttling of timers to chromium. |
if (visibilityState == PageVisibilityStateVisible) { |
+ setTimerAlignmentInterval(DOMTimer::visiblePageAlignmentInterval()); |
memoryPurgeController().pageBecameActive(); |
} else { |
+ setTimerAlignmentInterval(DOMTimer::hiddenPageAlignmentInterval()); |
if (!isInitialState) |
memoryPurgeController().pageBecameInactive(); |
} |