Diff
Modified: trunk/Source/WebCore/ChangeLog (246141 => 246142)
--- trunk/Source/WebCore/ChangeLog 2019-06-06 03:24:19 UTC (rev 246141)
+++ trunk/Source/WebCore/ChangeLog 2019-06-06 03:39:08 UTC (rev 246142)
@@ -1,3 +1,30 @@
+2019-06-05 Said Abou-Hallawa <[email protected]>
+
+ [Cocoa] REGRESSION(r244182): Inspector thinks CA commits can be nested
+ https://bugs.webkit.org/show_bug.cgi?id=198497
+
+ Reviewed by Simon Fraser.
+
+ 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 nested commits.
+
+ * inspector/InspectorController.cpp:
+ (WebCore::InspectorController::willComposite):
+ * inspector/InspectorController.h:
+ Export willComposite(). We want to call willComposite()/ didComposite()
+ from CA preCommit and postCommit handlers in flushLayers().
+
+ * inspector/agents/InspectorTimelineAgent.cpp:
+ (WebCore::InspectorTimelineAgent::didComposite):
+ Unrelated change: didComposite() should not assert that we're 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-05 Myles C. Maxfield <[email protected]>
[WHLSL] Educate the property resolver about IndexExpressions
Modified: trunk/Source/WebCore/inspector/InspectorController.cpp (246141 => 246142)
--- trunk/Source/WebCore/inspector/InspectorController.cpp 2019-06-06 03:24:19 UTC (rev 246141)
+++ trunk/Source/WebCore/inspector/InspectorController.cpp 2019-06-06 03:39:08 UTC (rev 246142)
@@ -507,6 +507,11 @@
return commonVM();
}
+void InspectorController::willComposite(Frame& frame)
+{
+ InspectorInstrumentation::willComposite(frame);
+}
+
void InspectorController::didComposite(Frame& frame)
{
InspectorInstrumentation::didComposite(frame);
Modified: trunk/Source/WebCore/inspector/InspectorController.h (246141 => 246142)
--- trunk/Source/WebCore/inspector/InspectorController.h 2019-06-06 03:24:19 UTC (rev 246141)
+++ trunk/Source/WebCore/inspector/InspectorController.h 2019-06-06 03:39:08 UTC (rev 246142)
@@ -97,6 +97,7 @@
WEBCORE_EXPORT void setIndicating(bool);
+ WEBCORE_EXPORT void willComposite(Frame&);
WEBCORE_EXPORT void didComposite(Frame&);
bool isUnderTest() const { return m_isUnderTest; }
Modified: trunk/Source/WebCore/inspector/agents/InspectorTimelineAgent.cpp (246141 => 246142)
--- trunk/Source/WebCore/inspector/agents/InspectorTimelineAgent.cpp 2019-06-06 03:24:19 UTC (rev 246141)
+++ trunk/Source/WebCore/inspector/agents/InspectorTimelineAgent.cpp 2019-06-06 03:39:08 UTC (rev 246142)
@@ -364,7 +364,6 @@
void InspectorTimelineAgent::didComposite()
{
- ASSERT(m_startedComposite);
didCompleteCurrentRecord(TimelineRecordType::Composite);
m_startedComposite = false;
}
Modified: trunk/Source/WebCore/page/FrameView.cpp (246141 => 246142)
--- trunk/Source/WebCore/page/FrameView.cpp 2019-06-06 03:24:19 UTC (rev 246141)
+++ trunk/Source/WebCore/page/FrameView.cpp 2019-06-06 03:39:08 UTC (rev 246142)
@@ -1148,10 +1148,6 @@
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())) {
Modified: trunk/Source/WebKit/ChangeLog (246141 => 246142)
--- trunk/Source/WebKit/ChangeLog 2019-06-06 03:24:19 UTC (rev 246141)
+++ trunk/Source/WebKit/ChangeLog 2019-06-06 03:39:08 UTC (rev 246142)
@@ -1,3 +1,26 @@
+2019-06-05 Said Abou-Hallawa <[email protected]>
+
+ [Cocoa] REGRESSION(r244182): Inspector thinks CA commits can be nested
+ https://bugs.webkit.org/show_bug.cgi?id=198497
+
+ Reviewed by Simon Fraser.
+
+ 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.h:
+ * WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm:
+ (WebKit::RemoteLayerTreeDrawingArea::addCommitHandlers):
+ (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
+ * WebProcess/WebPage/WebPage.h:
+ (WebKit::WebPage::firstFlushAfterCommit const):
+ (WebKit::WebPage::setFirstFlushAfterCommit):
+ * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
+ * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
+ (WebKit::TiledCoreAnimationDrawingArea::addCommitHandlers):
+ (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
+
2019-06-05 Alex Christensen <[email protected]>
Introduce new SPI for context menus on iOS
Modified: trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h (246141 => 246142)
--- trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h 2019-06-06 03:24:19 UTC (rev 246141)
+++ trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.h 2019-06-06 03:39:08 UTC (rev 246142)
@@ -114,7 +114,7 @@
void updateScrolledExposedRect();
void updateRootLayers();
- void flushInitialDeferredPaint();
+ void addCommitHandlers();
void flushLayers();
WebCore::TiledBacking* mainFrameTiledBacking() const;
Modified: trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm (246141 => 246142)
--- trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm 2019-06-06 03:24:19 UTC (rev 246141)
+++ trunk/Source/WebKit/WebProcess/WebPage/RemoteLayerTree/RemoteLayerTreeDrawingArea.mm 2019-06-06 03:39:08 UTC (rev 246142)
@@ -325,7 +325,30 @@
}
return true;
}
+
+void RemoteLayerTreeDrawingArea::addCommitHandlers()
+{
+ if (m_webPage.firstFlushAfterCommit())
+ return;
+ [CATransaction addCommitHandler:[retainedPage = makeRefPtr(&m_webPage)] {
+ if (Page* corePage = retainedPage->corePage()) {
+ if (Frame* coreFrame = retainedPage->mainFrame())
+ corePage->inspectorController().willComposite(*coreFrame);
+ }
+ } forPhase:kCATransactionPhasePreCommit];
+
+ [CATransaction addCommitHandler:[retainedPage = makeRefPtr(&m_webPage)] {
+ if (Page* corePage = retainedPage->corePage()) {
+ if (Frame* coreFrame = retainedPage->mainFrame())
+ corePage->inspectorController().didComposite(*coreFrame);
+ }
+ retainedPage->setFirstFlushAfterCommit(false);
+ } forPhase:kCATransactionPhasePostCommit];
+
+ m_webPage.setFirstFlushAfterCommit(true);
+}
+
void RemoteLayerTreeDrawingArea::flushLayers()
{
if (m_isFlushingSuspended) {
@@ -356,13 +379,7 @@
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())
- corePage->inspectorController().didComposite(*coreFrame);
- }
- } forPhase:kCATransactionPhasePostCommit];
+ addCommitHandlers();
if (m_nextFlushIsForImmediatePaint)
m_webPage.mainFrameView()->invalidateImagesWithAsyncDecodes();
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (246141 => 246142)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2019-06-06 03:24:19 UTC (rev 246141)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2019-06-06 03:39:08 UTC (rev 246142)
@@ -1206,6 +1206,9 @@
bool userIsInteracting() const { return m_userIsInteracting; }
void setUserIsInteracting(bool userIsInteracting) { m_userIsInteracting = userIsInteracting; }
+ bool firstFlushAfterCommit() const { return m_firstFlushAfterCommit; }
+ void setFirstFlushAfterCommit(bool f) { m_firstFlushAfterCommit = f; }
+
private:
WebPage(WebCore::PageIdentifier, WebPageCreationParameters&&);
@@ -1933,6 +1936,7 @@
OptionSet<LayerTreeFreezeReason> m_layerTreeFreezeReasons;
bool m_isSuspended { false };
bool m_needsFontAttributes { false };
+ bool m_firstFlushAfterCommit { false };
#if PLATFORM(COCOA)
WeakPtr<RemoteObjectRegistry> m_remoteObjectRegistry;
#endif
Modified: trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h (246141 => 246142)
--- trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h 2019-06-06 03:24:19 UTC (rev 246141)
+++ trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h 2019-06-06 03:39:08 UTC (rev 246142)
@@ -88,6 +88,7 @@
bool addMilestonesToDispatch(OptionSet<WebCore::LayoutMilestone> paintMilestones) override;
+ void addCommitHandlers();
enum class FlushType { Normal, TransientZoom };
void flushLayers(FlushType = FlushType::Normal);
Modified: trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm (246141 => 246142)
--- trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm 2019-06-06 03:24:19 UTC (rev 246141)
+++ trunk/Source/WebKit/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm 2019-06-06 03:39:08 UTC (rev 246142)
@@ -431,6 +431,31 @@
scheduleCompositingLayerFlush();
}
+void TiledCoreAnimationDrawingArea::addCommitHandlers()
+{
+ if (m_webPage.firstFlushAfterCommit())
+ return;
+
+ [CATransaction addCommitHandler:[retainedPage = makeRefPtr(&m_webPage)] {
+ if (Page* corePage = retainedPage->corePage()) {
+ if (Frame* coreFrame = retainedPage->mainFrame())
+ corePage->inspectorController().willComposite(*coreFrame);
+ }
+ } forPhase:kCATransactionPhasePreCommit];
+
+ [CATransaction addCommitHandler:[retainedPage = makeRefPtr(&m_webPage)] {
+ if (Page* corePage = retainedPage->corePage()) {
+ if (Frame* coreFrame = retainedPage->mainFrame())
+ corePage->inspectorController().didComposite(*coreFrame);
+ }
+ if (auto drawingArea = static_cast<TiledCoreAnimationDrawingArea*>(retainedPage->drawingArea()))
+ drawingArea->sendPendingNewlyReachedPaintingMilestones();
+ retainedPage->setFirstFlushAfterCommit(false);
+ } forPhase:kCATransactionPhasePostCommit];
+
+ m_webPage.setFirstFlushAfterCommit(true);
+}
+
void TiledCoreAnimationDrawingArea::flushLayers(FlushType flushType)
{
if (layerTreeStateIsFrozen())
@@ -455,16 +480,8 @@
if (m_viewOverlayRootLayer)
m_viewOverlayRootLayer->flushCompositingState(visibleRect);
- RefPtr<WebPage> retainedPage = &m_webPage;
- [CATransaction addCommitHandler:[retainedPage] {
- if (Page* corePage = retainedPage->corePage()) {
- if (Frame* coreFrame = retainedPage->mainFrame())
- corePage->inspectorController().didComposite(*coreFrame);
- }
- if (auto drawingArea = static_cast<TiledCoreAnimationDrawingArea*>(retainedPage->drawingArea()))
- drawingArea->sendPendingNewlyReachedPaintingMilestones();
- } forPhase:kCATransactionPhasePostCommit];
-
+ addCommitHandlers();
+
bool didFlushAllFrames = m_webPage.mainFrameView()->flushCompositingStateIncludingSubframes();
#if ENABLE(ASYNC_SCROLLING)