WebKit Bugzilla
Attachment 360020 Details for
Bug 193741
: DidFirstVisuallyNonEmptyLayout milestone should always fire at some point.
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-193741-20190124101706.patch (text/plain), 3.70 KB, created by
zalan
on 2019-01-24 10:17:10 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
zalan
Created:
2019-01-24 10:17:10 PST
Size:
3.70 KB
patch
obsolete
>Subversion Revision: 239927 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 2870e6b8095f05a11adae1efb068f71a2f7dea95..15c0e2986d789bc7a06246a62bcb72940da33620 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,30 @@ >+2019-01-23 Zalan Bujtas <zalan@apple.com> >+ >+ DidFirstVisuallyNonEmptyLayout milestone should always fire at some point. >+ https://bugs.webkit.org/show_bug.cgi?id=193741 >+ <rdar://problem/47135030> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ fireLayoutRelatedMilestonesIfNeeded() is part of the post-layout tasks. In certain cases when >+ 1. the received data is not "contentful" yet >+ 2. and we are expecting some more (loading is not complete yet) >+ 3. but no layout is initiated anymore >+ nothing triggers the milestone firing. >+ >+ This patch ensures that we fire the DidFirstVisuallyNonEmptyLayout when the frame load is complete unless we already did. >+ >+ * page/FrameView.cpp: >+ (WebCore::FrameView::FrameView): >+ (WebCore::FrameView::resetLayoutMilestones): >+ (WebCore::FrameView::loadProgressingStatusChanged): >+ (WebCore::FrameView::qualifiesAsVisuallyNonEmpty): >+ (WebCore::FrameView::updateIsVisuallyNonEmpty): >+ (WebCore::FrameView::firstVisuallyNonEmptyLayoutMilestoneWatchdogFired): >+ (WebCore::FrameView::fireFirstVisuallyNonEmptyLayoutMilestoneIfRequested): >+ (WebCore::FrameView::qualifiesAsVisuallyNonEmpty const): Deleted. >+ * page/FrameView.h: >+ > 2019-01-14 Zan Dobersek <zdobersek@igalia.com> > > DOMCacheStorage: use-after-move in doSequentialMatch() >diff --git a/Source/WebCore/page/FrameView.cpp b/Source/WebCore/page/FrameView.cpp >index d25a7e61a7ae34cb257e14f0e525c73982282de9..c5a603b2c3af21340d03b6e15c9d41f8f0ae86ab 100644 >--- a/Source/WebCore/page/FrameView.cpp >+++ b/Source/WebCore/page/FrameView.cpp >@@ -2841,6 +2841,9 @@ void FrameView::disableLayerFlushThrottlingTemporarilyForInteraction() > > void FrameView::loadProgressingStatusChanged() > { >+ auto hasPendingVisuallyNonEmptyCallback = m_firstVisuallyNonEmptyLayoutCallbackPending && !m_isVisuallyNonEmpty; >+ if (hasPendingVisuallyNonEmptyCallback && frame().loader().isComplete()) >+ handleFirstVisuallyNonEmptyLayoutMilestone(); > updateLayerFlushThrottling(); > adjustTiledBackingCoverage(); > } >@@ -4538,6 +4541,21 @@ void FrameView::updateIsVisuallyNonEmpty() > adjustTiledBackingCoverage(); > } > >+void FrameView::handleFirstVisuallyNonEmptyLayoutMilestone() >+{ >+ ASSERT(!m_isVisuallyNonEmpty); >+ ASSERT(m_firstVisuallyNonEmptyLayoutCallbackPending); >+ m_isVisuallyNonEmpty = true; >+ m_firstVisuallyNonEmptyLayoutCallbackPending = false; >+ addPaintPendingMilestones(DidFirstMeaningfulPaint); >+ >+ if (!frame().isMainFrame()) >+ return; >+ if (!frame().page() || !frame().page()->requestedLayoutMilestones().contains(DidFirstVisuallyNonEmptyLayout)) >+ return; >+ frame().loader().didReachLayoutMilestone(DidFirstVisuallyNonEmptyLayout); >+} >+ > bool FrameView::isViewForDocumentInFrame() const > { > RenderView* renderView = this->renderView(); >diff --git a/Source/WebCore/page/FrameView.h b/Source/WebCore/page/FrameView.h >index 2976b567dbf0a19789b76e609a117e62b511825b..3434a4a149e6d73aceb4028bcba27ae6bdfd9a2e 100644 >--- a/Source/WebCore/page/FrameView.h >+++ b/Source/WebCore/page/FrameView.h >@@ -809,6 +809,8 @@ private: > }; > void overrideViewportSizeForCSSViewportUnits(OverrideViewportSize); > >+ void handleFirstVisuallyNonEmptyLayoutMilestone(); >+ > HashSet<Widget*> m_widgetsInRenderTree; > > static MonotonicTime sCurrentPaintTimeStamp; // used for detecting decoded resource thrash in the cache
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 193741
:
359960
|
359983
|
360014
|
360020
|
360022
|
360034
|
360039