Clean up PageThrottler interface
https://bugs.webkit.org/show_bug.cgi?id=128677
Reviewed by Benjamin Poulain.
Currently, responsibility for throttling DOM timers & suspending animations is split
between the Page & the PageThrottler. Clarify by making Page responsible for suspending
animations (PageThrottler is now purely related to aspects of timer throttling), and
move all timer throttling policy to the PageThrottler, with a single function on Page to
enable (Page::setTimerThrottlingEnabled).
Also, transmit the full ViewState to the PageThrottler (not just the IsVisuallyIdle flag),
and distinguish between media & page-load activity.
* WebCore.exp.in:
- removed setDOMTimerAlignmentInterval.
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::parseAttribute):
- createActivityToken -> mediaActivityToken
* loader/FrameLoader.cpp:
(WebCore::FrameLoader::started):
- createActivityToken -> pageLoadActivityToken
* page/Page.cpp:
(WebCore::Page::Page):
- added m_timerThrottlingEnabled, made PageThrottler a member
(WebCore::Page::setIsVisuallyIdleInternal):
- update animiation suspension.
(WebCore::Page::setTimerThrottlingEnabled):
- setTimerAlignmentInterval -> setTimerThrottlingEnabled
(WebCore::Page::setViewState):
- pass viewState to PageThrottler.
(WebCore::Page::setIsVisibleInternal):
- don't update timer throttling.
* page/Page.h:
(WebCore::Page::pageThrottler):
- made PageThrottler a member.
(WebCore::Page::timerAlignmentInterval):
- inlined.
* page/PageThrottler.cpp:
(WebCore::PageThrottler::PageThrottler):
- initialize ViewState.
(WebCore::PageThrottler::~PageThrottler):
- clean up by calling setTimerThrottlingEnabled directly.
(WebCore::PageThrottler::hiddenPageDOMTimerThrottlingStateChanged):
- moved from Page.
(WebCore::PageThrottler::mediaActivityToken):
(WebCore::PageThrottler::pageLoadActivityToken):
- from Page::createActivityToken
(WebCore::PageThrottler::throttlePage):
(WebCore::PageThrottler::unthrottlePage):
- don't throttle animations here.
(WebCore::PageThrottler::setViewState):
(WebCore::PageThrottler::setIsVisible):
- added, throttle Dom timers.
* page/PageThrottler.h:
* page/Settings.cpp:
(WebCore::Settings::setHiddenPageDOMTimerThrottlingEnabled):
- removed setDOMTimerAlignmentInterval, hiddenPageDOMTimerThrottlingStateChanged moved to PageThrottler.
* page/Settings.h:
- removed setDOMTimerAlignmentInterval.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@163983 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/loader/FrameLoader.cpp b/Source/WebCore/loader/FrameLoader.cpp
index 6e913ef..3a05b5a 100644
--- a/Source/WebCore/loader/FrameLoader.cpp
+++ b/Source/WebCore/loader/FrameLoader.cpp
@@ -85,6 +85,7 @@
#include "Page.h"
#include "PageActivityAssertionToken.h"
#include "PageCache.h"
+#include "PageThrottler.h"
#include "PageTransitionEvent.h"
#include "PlatformStrategies.h"
#include "PluginData.h"
@@ -1142,7 +1143,7 @@
void FrameLoader::started()
{
if (m_frame.page())
- m_activityAssertion = m_frame.page()->createActivityToken();
+ m_activityAssertion = m_frame.page()->pageThrottler().pageLoadActivityToken();
for (Frame* frame = &m_frame; frame; frame = frame->tree().parent())
frame->loader().m_isComplete = false;
}