Document::updateMainArticleElementAfterLayout() should be a no-op when no client...
authorwenson_hsieh@apple.com <wenson_hsieh@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 26 Jan 2019 03:38:57 +0000 (03:38 +0000)
committerwenson_hsieh@apple.com <wenson_hsieh@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 26 Jan 2019 03:38:57 +0000 (03:38 +0000)
https://bugs.webkit.org/show_bug.cgi?id=193843

Reviewed by Zalan Bujtas.

* dom/Document.cpp:
(WebCore::Document::updateMainArticleElementAfterLayout):

This function currently does a bit of wasted work after every layout, on clients that don't listen to the
"significant rendered text" layout milestone and therefore don't need to guess the main article element. Simply
don't bother keeping the main article element up to date in this scenario by bailing from
FrameView::updateHasReachedSignificantRenderedTextThreshold if the client doesn't care about the significant
rendered text milestone.

* page/FrameView.cpp:
(WebCore::FrameView::updateHasReachedSignificantRenderedTextThreshold):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240539 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/dom/Document.cpp
Source/WebCore/page/FrameView.cpp

index eb4273a..fcf31f2 100644 (file)
@@ -1,3 +1,22 @@
+2019-01-25  Wenson Hsieh  <wenson_hsieh@apple.com>
+
+        Document::updateMainArticleElementAfterLayout() should be a no-op when no client depends on knowing the main article element
+        https://bugs.webkit.org/show_bug.cgi?id=193843
+
+        Reviewed by Zalan Bujtas.
+
+        * dom/Document.cpp:
+        (WebCore::Document::updateMainArticleElementAfterLayout):
+
+        This function currently does a bit of wasted work after every layout, on clients that don't listen to the
+        "significant rendered text" layout milestone and therefore don't need to guess the main article element. Simply
+        don't bother keeping the main article element up to date in this scenario by bailing from
+        FrameView::updateHasReachedSignificantRenderedTextThreshold if the client doesn't care about the significant
+        rendered text milestone.
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::updateHasReachedSignificantRenderedTextThreshold):
+
 2019-01-25  Jer Noble  <jer.noble@apple.com>
 
         <video> elements not in the DOM should be allowed to AirPlay
index 5db71f5..ad33faf 100644 (file)
@@ -8373,6 +8373,8 @@ void Document::unregisterArticleElement(Element& article)
 
 void Document::updateMainArticleElementAfterLayout()
 {
+    ASSERT(page() && page()->requestedLayoutMilestones().contains(DidRenderSignificantAmountOfText));
+
     // If there are too many article elements on the page, don't consider any one of them to be "main content".
     const unsigned maxNumberOfArticlesBeforeIgnoringMainContentArticle = 10;
 
index c93b04e..4a8ef53 100644 (file)
@@ -4418,6 +4418,10 @@ void FrameView::updateHasReachedSignificantRenderedTextThreshold()
     if (m_hasReachedSignificantRenderedTextThreshold)
         return;
 
+    auto* page = frame().page();
+    if (!page || !page->requestedLayoutMilestones().contains(DidRenderSignificantAmountOfText))
+        return;
+
     auto* document = frame().document();
     if (!document)
         return;