Title: [196971] trunk/Source/WebCore
Revision
196971
Author
[email protected]
Date
2016-02-22 23:37:26 -0800 (Mon, 22 Feb 2016)

Log Message

Some timer alignment cleanup.
https://bugs.webkit.org/show_bug.cgi?id=154559

Reviewed by Chris Dumez.

Document shouldn't override Page's timer alignment policy with a lower alignment,
and m_domTimerAlignmentInterval isn't really a Settings, it's just the current state
for the page.

* dom/Document.cpp:
(WebCore::Document::timerAlignmentInterval):
    - take the max of the possible intervals.
* page/Page.cpp:
(WebCore::Page::Page):
(WebCore::Page::setTimerThrottlingEnabled):
(WebCore::Page::setDOMTimerAlignmentInterval):
    - moved here from Settings.
* page/Page.h:
(WebCore::Page::domTimerAlignmentInterval):
    - moved here from Settings.
* page/Settings.cpp:
(WebCore::Settings::setDOMTimerAlignmentInterval): Deleted.
    - moved to Page.
* page/Settings.h:
(WebCore::Settings::domTimerAlignmentInterval): Deleted.
    - moved to Page.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (196970 => 196971)


--- trunk/Source/WebCore/ChangeLog	2016-02-23 07:18:41 UTC (rev 196970)
+++ trunk/Source/WebCore/ChangeLog	2016-02-23 07:37:26 UTC (rev 196971)
@@ -1,3 +1,32 @@
+2016-02-22  Gavin Barraclough  <[email protected]>
+
+        Some timer alignment cleanup.
+        https://bugs.webkit.org/show_bug.cgi?id=154559
+
+        Reviewed by Chris Dumez.
+
+        Document shouldn't override Page's timer alignment policy with a lower alignment,
+        and m_domTimerAlignmentInterval isn't really a Settings, it's just the current state
+        for the page.
+
+        * dom/Document.cpp:
+        (WebCore::Document::timerAlignmentInterval):
+            - take the max of the possible intervals.
+        * page/Page.cpp:
+        (WebCore::Page::Page):
+        (WebCore::Page::setTimerThrottlingEnabled):
+        (WebCore::Page::setDOMTimerAlignmentInterval):
+            - moved here from Settings.
+        * page/Page.h:
+        (WebCore::Page::domTimerAlignmentInterval):
+            - moved here from Settings.
+        * page/Settings.cpp:
+        (WebCore::Settings::setDOMTimerAlignmentInterval): Deleted.
+            - moved to Page.
+        * page/Settings.h:
+        (WebCore::Settings::domTimerAlignmentInterval): Deleted.
+            - moved to Page.
+
 2016-02-22  Myles C. Maxfield  <[email protected]>
 
         Font features specified in @font-face blocks don't apply to local() families

Modified: trunk/Source/WebCore/dom/Document.cpp (196970 => 196971)


--- trunk/Source/WebCore/dom/Document.cpp	2016-02-23 07:18:41 UTC (rev 196970)
+++ trunk/Source/WebCore/dom/Document.cpp	2016-02-23 07:37:26 UTC (rev 196971)
@@ -2908,7 +2908,7 @@
 
 double Document::minimumTimerInterval() const
 {
-    Page* page = this->page();
+    auto* page = this->page();
     if (!page)
         return ScriptExecutionContext::minimumTimerInterval();
     return page->settings().minimumDOMTimerInterval();
@@ -2925,14 +2925,16 @@
 
 double Document::timerAlignmentInterval(bool hasReachedMaxNestingLevel) const
 {
+    double alignmentInterval = ScriptExecutionContext::timerAlignmentInterval(hasReachedMaxNestingLevel);
+
     // Apply Document-level DOMTimer throttling only if timers have reached their maximum nesting level as the Page may still be visible.
     if (m_isTimerThrottlingEnabled && hasReachedMaxNestingLevel)
-        return DOMTimer::hiddenPageAlignmentInterval();
+        alignmentInterval = std::max(alignmentInterval, DOMTimer::hiddenPageAlignmentInterval());
 
-    Page* page = this->page();
-    if (!page)
-        return ScriptExecutionContext::timerAlignmentInterval(hasReachedMaxNestingLevel);
-    return page->settings().domTimerAlignmentInterval();
+    if (Page* page = this->page())
+        alignmentInterval = std::max(alignmentInterval, page->domTimerAlignmentInterval());
+
+    return alignmentInterval;
 }
 
 EventTarget* Document::errorEventTarget()

Modified: trunk/Source/WebCore/page/Page.cpp (196970 => 196971)


--- trunk/Source/WebCore/page/Page.cpp	2016-02-23 07:18:41 UTC (rev 196970)
+++ trunk/Source/WebCore/page/Page.cpp	2016-02-23 07:37:26 UTC (rev 196971)
@@ -206,6 +206,7 @@
     , m_viewMode(ViewModeWindowed)
 #endif // ENABLE(VIEW_MODE_CSS_MEDIA)
     , m_timerThrottlingEnabled(false)
+    , m_timerAlignmentInterval(DOMTimer::defaultAlignmentInterval())
     , m_isEditable(false)
     , m_isPrerender(false)
     , m_viewState(PageInitialViewState)
@@ -1172,7 +1173,12 @@
         return;
 
     m_timerThrottlingEnabled = enabled;
-    m_settings->setDOMTimerAlignmentInterval(enabled ? DOMTimer::hiddenPageAlignmentInterval() : DOMTimer::defaultAlignmentInterval());
+    setDOMTimerAlignmentInterval(enabled ? DOMTimer::hiddenPageAlignmentInterval() : DOMTimer::defaultAlignmentInterval());
+}
+
+void Page::setDOMTimerAlignmentInterval(double alignmentInterval)
+{
+    m_timerAlignmentInterval = alignmentInterval;
     
     for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext()) {
         if (frame->document())

Modified: trunk/Source/WebCore/page/Page.h (196970 => 196971)


--- trunk/Source/WebCore/page/Page.h	2016-02-23 07:18:41 UTC (rev 196970)
+++ trunk/Source/WebCore/page/Page.h	2016-02-23 07:37:26 UTC (rev 196971)
@@ -219,6 +219,8 @@
     ProgressTracker& progress() const { return *m_progress; }
     BackForwardController& backForward() const { return *m_backForwardController; }
 
+    double domTimerAlignmentInterval() const { return m_timerAlignmentInterval; }
+
 #if ENABLE(VIEW_MODE_CSS_MEDIA)
     enum ViewMode {
         ViewModeInvalid,
@@ -524,6 +526,8 @@
 
     void hiddenPageDOMTimerThrottlingStateChanged();
     void setTimerThrottlingEnabled(bool);
+    void setDOMTimerAlignmentInterval(double);
+    void timerAlignmentIntervalTimerFired();
     bool canTabSuspend();
     void updateTabSuspensionState();
     void tabSuspensionTimerFired();
@@ -613,6 +617,7 @@
 #endif // ENABLE(VIEW_MODE_CSS_MEDIA)
 
     bool m_timerThrottlingEnabled;
+    double m_timerAlignmentInterval;
 
     bool m_isEditable;
     bool m_isPrerender;

Modified: trunk/Source/WebCore/page/Settings.cpp (196970 => 196971)


--- trunk/Source/WebCore/page/Settings.cpp	2016-02-23 07:18:41 UTC (rev 196970)
+++ trunk/Source/WebCore/page/Settings.cpp	2016-02-23 07:37:26 UTC (rev 196971)
@@ -180,7 +180,6 @@
     , m_storageBlockingPolicy(SecurityOrigin::AllowAllStorage)
     , m_layoutInterval(layoutScheduleThreshold)
     , m_minimumDOMTimerInterval(DOMTimer::defaultMinimumInterval())
-    , m_domTimerAlignmentInterval(DOMTimer::defaultAlignmentInterval())
 #if ENABLE(TEXT_AUTOSIZING)
     , m_textAutosizingFontScaleFactor(1)
 #if HACK_FORCE_TEXT_AUTOSIZING_ON_DESKTOP
@@ -485,11 +484,6 @@
     }
 }
 
-void Settings::setDOMTimerAlignmentInterval(double alignmentInterval)
-{
-    m_domTimerAlignmentInterval = alignmentInterval;
-}
-
 void Settings::setLayoutInterval(std::chrono::milliseconds layoutInterval)
 {
     // FIXME: It seems weird that this function may disregard the specified layout interval.

Modified: trunk/Source/WebCore/page/Settings.h (196970 => 196971)


--- trunk/Source/WebCore/page/Settings.h	2016-02-23 07:18:41 UTC (rev 196970)
+++ trunk/Source/WebCore/page/Settings.h	2016-02-23 07:37:26 UTC (rev 196971)
@@ -158,9 +158,6 @@
     WEBCORE_EXPORT void setMinimumDOMTimerInterval(double); // Initialized to DOMTimer::defaultMinimumInterval().
     double minimumDOMTimerInterval() const { return m_minimumDOMTimerInterval; }
 
-    void setDOMTimerAlignmentInterval(double);
-    double domTimerAlignmentInterval() const { return m_domTimerAlignmentInterval; }
-
     WEBCORE_EXPORT void setLayoutInterval(std::chrono::milliseconds);
     std::chrono::milliseconds layoutInterval() const { return m_layoutInterval; }
 
@@ -303,7 +300,6 @@
     SecurityOrigin::StorageBlockingPolicy m_storageBlockingPolicy;
     std::chrono::milliseconds m_layoutInterval;
     double m_minimumDOMTimerInterval;
-    double m_domTimerAlignmentInterval;
 
 #if ENABLE(TEXT_AUTOSIZING)
     float m_textAutosizingFontScaleFactor;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to