WebKit Bugzilla
Attachment 371378 Details for
Bug 198497
: [Cocoa] REGRESSION(r244182): Inspector thinks CA commits can be nested
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-198497-20190604225123.patch (text/plain), 9.41 KB, created by
Said Abou-Hallawa
on 2019-06-04 22:51:23 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Said Abou-Hallawa
Created:
2019-06-04 22:51:23 PDT
Size:
9.41 KB
patch
obsolete
>Subversion Revision: 246069 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index ce97d1d8dfb9d3d9c0cdb9e031f2b073905c6594..e9d2ea25d09e54922b0f80b7566458f4cc5a7da9 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,31 @@ >+2019-06-04 Said Abou-Hallawa <sabouhallawa@apple.com> >+ >+ [Cocoa] REGRESSION(r244182): Inspector thinks CA commits can be nested >+ https://bugs.webkit.org/show_bug.cgi?id=198497 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ WebInspecter should coalesce nested composites as one recorded composite. >+ This can be done by ensuring that we only process CA preCommit and postCommit >+ once per commit. >+ >+ * inspector/InspectorController.cpp: >+ (WebCore::InspectorController::willComposite): >+ * inspector/InspectorController.h: >+ Export InspectorController::willComposite() from WebCore. The goal is to >+ call willComposite()/didComposite() from CA preCommit and postCommit >+ handlers in flushLayers(). >+ >+ * inspector/agents/InspectorTimelineAgent.cpp: >+ (WebCore::InspectorTimelineAgent::didComposite): >+ Unrelated change: we should not assert that we are in the middle of a >+ composite. Web Inspector may connect in the middle of a composite. >+ >+ * page/FrameView.cpp: >+ (WebCore::FrameView::flushCompositingStateIncludingSubframes): >+ InspectorController::willComposite() will be called form CA preCommit >+ handler of flushLayers(). >+ > 2019-06-04 Zalan Bujtas <zalan@apple.com> > > [LFC][IFC] Decouple float placement and line shrinking >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 4c1eef4132ddea26ac6725d926387f821446baee..d6ff1488a8403b3dce8782cad14b79b83b244b14 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,22 @@ >+2019-06-04 Said Abou-Hallawa <sabouhallawa@apple.com> >+ >+ [Cocoa] REGRESSION(r244182): Inspector thinks CA commits can be nested >+ https://bugs.webkit.org/show_bug.cgi?id=198497 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Call InspectorController::willComposite() from the CA preCommit handler >+ similar to the call to InspectorController::didComposite() in the CA >+ postCommit handler. Ensure these calls will be once for nested commits. >+ >+ * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm: >+ (WebKit::RemoteLayerTreeDrawingArea::flushLayers): >+ * WebProcess/WebPage/WebPage.h: >+ (WebKit::WebPage::incrementPendingComposites): >+ (WebKit::WebPage::decrementPendingComposites): >+ * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm: >+ (WebKit::TiledCoreAnimationDrawingArea::flushLayers): >+ > 2019-06-04 Chris Dumez <cdumez@apple.com> > > Lazily construct the NetworkHTTPSUpgradeChecker >diff --git a/Source/WebCore/inspector/InspectorController.cpp b/Source/WebCore/inspector/InspectorController.cpp >index 71a07612e7581acfc5c46324b03c6fd39233a567..e0693a850a7d8e06658ab102b16a2fd081a70e6c 100644 >--- a/Source/WebCore/inspector/InspectorController.cpp >+++ b/Source/WebCore/inspector/InspectorController.cpp >@@ -507,6 +507,11 @@ JSC::VM& InspectorController::vm() > return commonVM(); > } > >+void InspectorController::willComposite(Frame& frame) >+{ >+ InspectorInstrumentation::willComposite(frame); >+} >+ > void InspectorController::didComposite(Frame& frame) > { > InspectorInstrumentation::didComposite(frame); >diff --git a/Source/WebCore/inspector/InspectorController.h b/Source/WebCore/inspector/InspectorController.h >index a511ec5bb1c67c0a1bb314573ee7dafb2ad74d74..4bea43263da7037f188659662da8dbf6d831596d 100644 >--- a/Source/WebCore/inspector/InspectorController.h >+++ b/Source/WebCore/inspector/InspectorController.h >@@ -97,6 +97,7 @@ public: > > WEBCORE_EXPORT void setIndicating(bool); > >+ WEBCORE_EXPORT void willComposite(Frame&); > WEBCORE_EXPORT void didComposite(Frame&); > > bool isUnderTest() const { return m_isUnderTest; } >diff --git a/Source/WebCore/inspector/agents/InspectorTimelineAgent.cpp b/Source/WebCore/inspector/agents/InspectorTimelineAgent.cpp >index a1d3d9144a5212cd94e79345109c2de7dffb8436..f63683fa3926b3c75ef1962eabf1691f55e10c29 100644 >--- a/Source/WebCore/inspector/agents/InspectorTimelineAgent.cpp >+++ b/Source/WebCore/inspector/agents/InspectorTimelineAgent.cpp >@@ -364,7 +364,6 @@ void InspectorTimelineAgent::willComposite(Frame& frame) > > void InspectorTimelineAgent::didComposite() > { >- ASSERT(m_startedComposite); > didCompleteCurrentRecord(TimelineRecordType::Composite); > m_startedComposite = false; > } >diff --git a/Source/WebCore/page/FrameView.cpp b/Source/WebCore/page/FrameView.cpp >index 120f12df0741a533d3090f95a621a6e5d4733c0d..a1bb494e2ebe394c3dc35524b0d663f1f1882783 100644 >--- a/Source/WebCore/page/FrameView.cpp >+++ b/Source/WebCore/page/FrameView.cpp >@@ -1148,10 +1148,6 @@ bool FrameView::isEnclosedInCompositingLayer() const > > bool FrameView::flushCompositingStateIncludingSubframes() > { >-#if PLATFORM(COCOA) >- InspectorInstrumentation::willComposite(frame()); >-#endif >- > bool allFramesFlushed = flushCompositingStateForThisFrame(frame()); > > for (Frame* child = frame().tree().firstRenderedChild(); child; child = child->tree().traverseNextRendered(m_frame.ptr())) { >diff --git a/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm b/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm >index b291df0b7dfdf7939e7daae723420265db19c363..d9ae272f18c3c8123ba789d0f884a1a059edaca8 100644 >--- a/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm >+++ b/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm >@@ -356,10 +356,20 @@ void RemoteLayerTreeDrawingArea::flushLayers() > if (m_scrolledViewExposedRect) > visibleRect.intersect(m_scrolledViewExposedRect.value()); > >- RefPtr<WebPage> protectedWebPage = &m_webPage; >- [CATransaction addCommitHandler:[protectedWebPage] { >- if (Page* corePage = protectedWebPage->corePage()) { >- if (Frame* coreFrame = protectedWebPage->mainFrame()) >+ [CATransaction addCommitHandler:[retainedPage = makeRefPtr(&m_webPage)] { >+ if (retainedPage->incrementPendingComposites() != 1) >+ return; >+ if (Page* corePage = retainedPage->corePage()) { >+ if (Frame* coreFrame = retainedPage->mainFrame()) >+ corePage->inspectorController().willComposite(*coreFrame); >+ } >+ } forPhase:kCATransactionPhasePreCommit]; >+ >+ [CATransaction addCommitHandler:[retainedPage = makeRefPtr(&m_webPage)] { >+ if (retainedPage->decrementPendingComposites()) >+ return; >+ if (Page* corePage = retainedPage->corePage()) { >+ if (Frame* coreFrame = retainedPage->mainFrame()) > corePage->inspectorController().didComposite(*coreFrame); > } > } forPhase:kCATransactionPhasePostCommit]; >diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.h b/Source/WebKit/WebProcess/WebPage/WebPage.h >index f2b24c2833437d8970db8c2b42d843ab296eb75f..99f66dba967a8397740d5c1e9843c9509e29d306 100644 >--- a/Source/WebKit/WebProcess/WebPage/WebPage.h >+++ b/Source/WebKit/WebProcess/WebPage/WebPage.h >@@ -1206,6 +1206,9 @@ public: > bool userIsInteracting() const { return m_userIsInteracting; } > void setUserIsInteracting(bool userIsInteracting) { m_userIsInteracting = userIsInteracting; } > >+ unsigned incrementPendingComposites() { return ++m_pendingComposites; } >+ unsigned decrementPendingComposites() { return --m_pendingComposites; } >+ > private: > WebPage(WebCore::PageIdentifier, WebPageCreationParameters&&); > >@@ -1935,6 +1938,7 @@ private: > OptionSet<LayerTreeFreezeReason> m_layerTreeFreezeReasons; > bool m_isSuspended { false }; > bool m_needsFontAttributes { false }; >+ unsigned m_pendingComposites { 0 }; > #if PLATFORM(COCOA) > WeakPtr<RemoteObjectRegistry> m_remoteObjectRegistry; > #endif >diff --git a/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm b/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm >index 8095e67d8f6dff21bac6a1e04706bb1aacfaf07e..2d23d3ce28b651203cbebce77834aa118570c8d5 100644 >--- a/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm >+++ b/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm >@@ -455,8 +455,19 @@ void TiledCoreAnimationDrawingArea::flushLayers(FlushType flushType) > if (m_viewOverlayRootLayer) > m_viewOverlayRootLayer->flushCompositingState(visibleRect); > >- RefPtr<WebPage> retainedPage = &m_webPage; >- [CATransaction addCommitHandler:[retainedPage] { >+ >+ [CATransaction addCommitHandler:[retainedPage = makeRefPtr(&m_webPage)] { >+ if (retainedPage->incrementPendingComposites() != 1) >+ return; >+ if (Page* corePage = retainedPage->corePage()) { >+ if (Frame* coreFrame = retainedPage->mainFrame()) >+ corePage->inspectorController().willComposite(*coreFrame); >+ } >+ } forPhase:kCATransactionPhasePreCommit]; >+ >+ [CATransaction addCommitHandler:[retainedPage = makeRefPtr(&m_webPage)] { >+ if (retainedPage->decrementPendingComposites()) >+ return; > if (Page* corePage = retainedPage->corePage()) { > if (Frame* coreFrame = retainedPage->mainFrame()) > corePage->inspectorController().didComposite(*coreFrame);
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 198497
:
371214
|
371235
|
371378
|
371441