Title: [197581] trunk/Source/WebCore
- Revision
- 197581
- Author
- [email protected]
- Date
- 2016-03-04 12:58:50 -0800 (Fri, 04 Mar 2016)
Log Message
Unify determination of page timer alignment
https://bugs.webkit.org/show_bug.cgi?id=155031
Reviewed by Chris Dumez.
Currently this is scattered throughout Page - sites that call setDOMTimerAlignmentInterval have
to determine the correct alignment interval. Instead, replace setDOMTimerAlignmentInterval with
updateDOMTimerAlignmentInterval, and unify the policy decision here.
* page/Page.cpp:
(WebCore::Page::setTimerThrottlingState):
- setDOMTimerAlignmentInterval -> updateDOMTimerAlignmentInterval
Also, to simplify always record the timestamp when the state changes.
(WebCore::Page::setTimerAlignmentIntervalIncreaseLimit):
- setDOMTimerAlignmentInterval -> updateDOMTimerAlignmentInterval
(WebCore::Page::updateDOMTimerAlignmentInterval):
- Was setDOMTimerAlignmentInterval, now determines the new alignment value.
(WebCore::Page::timerAlignmentIntervalIncreaseTimerFired):
- setDOMTimerAlignmentInterval -> updateDOMTimerAlignmentInterval
(WebCore::Page::setDOMTimerAlignmentInterval): Deleted.
- Removed, became updateDOMTimerAlignmentInterval.
* page/Page.h:
- setDOMTimerAlignmentInterval -> updateDOMTimerAlignmentInterval
m_timerThrottlingEnabledTime -> m_timerThrottlingStateLastChangedTime
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (197580 => 197581)
--- trunk/Source/WebCore/ChangeLog 2016-03-04 20:19:45 UTC (rev 197580)
+++ trunk/Source/WebCore/ChangeLog 2016-03-04 20:58:50 UTC (rev 197581)
@@ -1,3 +1,30 @@
+2016-03-04 Gavin Barraclough <[email protected]>
+
+ Unify determination of page timer alignment
+ https://bugs.webkit.org/show_bug.cgi?id=155031
+
+ Reviewed by Chris Dumez.
+
+ Currently this is scattered throughout Page - sites that call setDOMTimerAlignmentInterval have
+ to determine the correct alignment interval. Instead, replace setDOMTimerAlignmentInterval with
+ updateDOMTimerAlignmentInterval, and unify the policy decision here.
+
+ * page/Page.cpp:
+ (WebCore::Page::setTimerThrottlingState):
+ - setDOMTimerAlignmentInterval -> updateDOMTimerAlignmentInterval
+ Also, to simplify always record the timestamp when the state changes.
+ (WebCore::Page::setTimerAlignmentIntervalIncreaseLimit):
+ - setDOMTimerAlignmentInterval -> updateDOMTimerAlignmentInterval
+ (WebCore::Page::updateDOMTimerAlignmentInterval):
+ - Was setDOMTimerAlignmentInterval, now determines the new alignment value.
+ (WebCore::Page::timerAlignmentIntervalIncreaseTimerFired):
+ - setDOMTimerAlignmentInterval -> updateDOMTimerAlignmentInterval
+ (WebCore::Page::setDOMTimerAlignmentInterval): Deleted.
+ - Removed, became updateDOMTimerAlignmentInterval.
+ * page/Page.h:
+ - setDOMTimerAlignmentInterval -> updateDOMTimerAlignmentInterval
+ m_timerThrottlingEnabledTime -> m_timerThrottlingStateLastChangedTime
+
2016-03-04 Simon Fraser <[email protected]>
Fix crash seen in iOS simulator tests
Modified: trunk/Source/WebCore/page/Page.cpp (197580 => 197581)
--- trunk/Source/WebCore/page/Page.cpp 2016-03-04 20:19:45 UTC (rev 197580)
+++ trunk/Source/WebCore/page/Page.cpp 2016-03-04 20:58:50 UTC (rev 197581)
@@ -1204,21 +1204,18 @@
{
if (state == m_timerThrottlingState)
return;
+
m_timerThrottlingState = state;
+ m_timerThrottlingStateLastChangedTime = monotonicallyIncreasingTime();
- if (state != TimerThrottlingState::Disabled) {
- m_timerThrottlingEnabledTime = monotonicallyIncreasingTime();
- setDOMTimerAlignmentInterval(DOMTimer::hiddenPageAlignmentInterval());
- return;
- }
+ updateDOMTimerAlignmentInterval();
- m_timerThrottlingEnabledTime = 0;
- setDOMTimerAlignmentInterval(DOMTimer::defaultAlignmentInterval());
-
// When throttling is disabled, release all throttled timers.
- for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
- if (auto* document = frame->document())
- document->didChangeTimerAlignmentInterval();
+ if (state == TimerThrottlingState::Disabled) {
+ for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
+ if (auto* document = frame->document())
+ document->didChangeTimerAlignmentInterval();
+ }
}
}
@@ -1230,22 +1227,38 @@
// If (m_timerAlignmentIntervalIncreaseLimit < m_timerAlignmentInterval) then we need
// to update m_timerAlignmentInterval, if greater then need to restart the increase timer.
if (m_timerThrottlingState == TimerThrottlingState::EnabledIncreasing)
- setDOMTimerAlignmentInterval(std::min(m_timerAlignmentIntervalIncreaseLimit, m_timerAlignmentInterval));
+ updateDOMTimerAlignmentInterval();
}
-void Page::setDOMTimerAlignmentInterval(double alignmentInterval)
+void Page::updateDOMTimerAlignmentInterval()
{
- m_timerAlignmentInterval = alignmentInterval;
+ bool needsIncreaseTimer = false;
+ switch (m_timerThrottlingState) {
+ case TimerThrottlingState::Disabled:
+ m_timerAlignmentInterval = DOMTimer::defaultAlignmentInterval();
+ break;
+
+ case TimerThrottlingState::Enabled:
+ m_timerAlignmentInterval = DOMTimer::hiddenPageAlignmentInterval();
+ break;
+
+ case TimerThrottlingState::EnabledIncreasing:
+ ASSERT(m_timerThrottlingStateLastChangedTime);
+ double throttledDuration = monotonicallyIncreasingTime() - m_timerThrottlingStateLastChangedTime;
+ double minimumAlignmentInterval = std::max(DOMTimer::hiddenPageAlignmentInterval(), throttledDuration);
+ m_timerAlignmentInterval = std::min(minimumAlignmentInterval, m_timerAlignmentIntervalIncreaseLimit);
+ needsIncreaseTimer = m_timerAlignmentInterval < m_timerAlignmentIntervalIncreaseLimit;
+ }
+
// If throttling is enabled, auto-increasing of throttling is enabled, and the auto-increase
// limit has not yet been reached, and then arm the timer to consider an increase. Time to wait
// between increases is equal to the current throttle time. Since alinment interval increases
// exponentially, time between steps is exponential too.
- if (m_timerThrottlingState == TimerThrottlingState::EnabledIncreasing && m_timerAlignmentInterval < m_timerAlignmentIntervalIncreaseLimit) {
- if (!m_timerAlignmentIntervalIncreaseTimer.isActive())
- m_timerAlignmentIntervalIncreaseTimer.startOneShot(m_timerAlignmentInterval);
- } else
+ if (!needsIncreaseTimer)
m_timerAlignmentIntervalIncreaseTimer.stop();
+ else if (!m_timerAlignmentIntervalIncreaseTimer.isActive())
+ m_timerAlignmentIntervalIncreaseTimer.startOneShot(m_timerAlignmentInterval);
}
void Page::timerAlignmentIntervalIncreaseTimerFired()
@@ -1253,12 +1266,9 @@
ASSERT(m_settings->hiddenPageDOMTimerThrottlingAutoIncreases());
ASSERT(m_timerThrottlingState == TimerThrottlingState::EnabledIncreasing);
ASSERT(m_timerAlignmentInterval < m_timerAlignmentIntervalIncreaseLimit);
- ASSERT(m_timerThrottlingEnabledTime);
// Alignment interval is increased to equal the time the page has been throttled, to a limit.
- double throttledDuration = monotonicallyIncreasingTime() - m_timerThrottlingEnabledTime;
- double alignmentInterval = std::max(m_timerAlignmentInterval, throttledDuration);
- setDOMTimerAlignmentInterval(std::min(alignmentInterval, m_timerAlignmentIntervalIncreaseLimit));
+ updateDOMTimerAlignmentInterval();
}
void Page::dnsPrefetchingStateChanged()
Modified: trunk/Source/WebCore/page/Page.h (197580 => 197581)
--- trunk/Source/WebCore/page/Page.h 2016-03-04 20:19:45 UTC (rev 197580)
+++ trunk/Source/WebCore/page/Page.h 2016-03-04 20:58:50 UTC (rev 197581)
@@ -533,7 +533,7 @@
void hiddenPageDOMTimerThrottlingStateChanged();
void setTimerThrottlingState(TimerThrottlingState);
void updateTimerThrottlingState();
- void setDOMTimerAlignmentInterval(double);
+ void updateDOMTimerAlignmentInterval();
void timerAlignmentIntervalIncreaseTimerFired();
const std::unique_ptr<Chrome> m_chrome;
@@ -621,7 +621,7 @@
#endif // ENABLE(VIEW_MODE_CSS_MEDIA)
TimerThrottlingState m_timerThrottlingState { TimerThrottlingState::Disabled };
- double m_timerThrottlingEnabledTime { 0 };
+ double m_timerThrottlingStateLastChangedTime { 0 };
double m_timerAlignmentInterval;
Timer m_timerAlignmentIntervalIncreaseTimer;
double m_timerAlignmentIntervalIncreaseLimit { 0 };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes