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

Reply via email to