Diff
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/ChangeLog (220848 => 220849)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/ChangeLog 2017-08-17 08:01:05 UTC (rev 220848)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/ChangeLog 2017-08-17 08:03:44 UTC (rev 220849)
@@ -1,3 +1,38 @@
+2017-08-16 Simon Fraser <[email protected]>
+
+ Make RenderLayer and RenderLayerBacking TextStream-loggable, and clean up compositing logging
+ https://bugs.webkit.org/show_bug.cgi?id=175634
+
+ Reviewed by Zalan Bujtas.
+
+ Add operator<<(TextStream&) for RenderLayer and RenderLayer backing, and use them for compositing logging.
+
+ Convert CompositingUpdateType to an enum class.
+
+ * page/FrameView.cpp:
+ (WebCore::FrameView::updateCompositingLayersAfterLayout):
+ (WebCore::FrameView::updateCompositingLayersAfterScrolling):
+ * page/ios/FrameIOS.mm:
+ (WebCore::Frame::viewportOffsetChanged):
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::updateLayerPositionsAfterLayout):
+ (WebCore::RenderLayer::updateCompositingLayersAfterScroll):
+ (WebCore::RenderLayer::calculateClipRects const):
+ * rendering/RenderLayer.h:
+ * rendering/RenderLayerBacking.cpp:
+ (WebCore::RenderLayerBacking::updateAfterLayout):
+ (WebCore::RenderLayerBacking::updateGeometry):
+ (WebCore::operator<<):
+ * rendering/RenderLayerBacking.h:
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::didRecalcStyleWithNoPendingLayout):
+ (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
+ (WebCore::RenderLayerCompositor::updateCompositingLayersTimerFired):
+ (WebCore::RenderLayerCompositor::updateCompositingLayers):
+ (WebCore::RenderLayerCompositor::layerTreeAsText):
+ (WebCore::operator<<):
+ * rendering/RenderLayerCompositor.h:
+
2017-08-16 Fujii Hironori <[email protected]>
[HarfBuzz] Decomposed Vietnamese characters are rendered incorrectly
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/page/FrameView.cpp (220848 => 220849)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/page/FrameView.cpp 2017-08-17 08:01:05 UTC (rev 220848)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/page/FrameView.cpp 2017-08-17 08:03:44 UTC (rev 220849)
@@ -889,7 +889,7 @@
// This call will make sure the cached hasAcceleratedCompositing is updated from the pref
renderView->compositor().cacheAcceleratedCompositingFlags();
- renderView->compositor().updateCompositingLayers(CompositingUpdateAfterLayout);
+ renderView->compositor().updateCompositingLayers(CompositingUpdateType::AfterLayout);
}
void FrameView::clearBackingStores()
@@ -2690,7 +2690,7 @@
if (m_nestedLayoutCount <= 1 && hasViewportConstrainedObjects()) {
if (RenderView* renderView = this->renderView())
- renderView->compositor().updateCompositingLayers(CompositingUpdateOnScroll);
+ renderView->compositor().updateCompositingLayers(CompositingUpdateType::OnScroll);
}
}
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/page/ios/FrameIOS.mm (220848 => 220849)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/page/ios/FrameIOS.mm 2017-08-17 08:01:05 UTC (rev 220848)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/page/ios/FrameIOS.mm 2017-08-17 08:03:44 UTC (rev 220849)
@@ -718,7 +718,7 @@
if (changeType == CompletedScrollOffset) {
if (RenderView* root = contentRenderer())
- root->compositor().updateCompositingLayers(CompositingUpdateOnScroll);
+ root->compositor().updateCompositingLayers(CompositingUpdateType::OnScroll);
}
}
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/RenderLayer.cpp (220848 => 220849)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/RenderLayer.cpp 2017-08-17 08:01:05 UTC (rev 220848)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/RenderLayer.cpp 2017-08-17 08:03:44 UTC (rev 220849)
@@ -472,6 +472,7 @@
void RenderLayer::updateLayerPositionsAfterLayout(const RenderLayer* rootLayer, UpdateLayerPositionsFlags flags)
{
+ LOG(Compositing, "RenderLayer %p updateLayerPositionsAfterLayout", this);
RenderGeometryMap geometryMap(UseTransforms);
if (this != rootLayer)
geometryMap.pushMappingsToAncestor(parent(), nullptr);
@@ -2594,9 +2595,9 @@
// repositioning, so update compositing layers from there.
if (RenderLayer* compositingAncestor = stackingContainer()->enclosingCompositingLayer()) {
if (usesCompositedScrolling() && !hasOutOfFlowPositionedDescendant())
- compositor().updateCompositingLayers(CompositingUpdateOnCompositedScroll, compositingAncestor);
+ compositor().updateCompositingLayers(CompositingUpdateType::OnCompositedScroll, compositingAncestor);
else
- compositor().updateCompositingLayers(CompositingUpdateOnScroll, compositingAncestor);
+ compositor().updateCompositingLayers(CompositingUpdateType::OnScroll, compositingAncestor);
}
}
}
@@ -6491,7 +6492,7 @@
{
if (compositor().inCompositingMode()) {
if (isDirtyStackingContainer() || m_normalFlowListDirty)
- compositor().updateCompositingLayers(CompositingUpdateOnHitTest, this);
+ compositor().updateCompositingLayers(CompositingUpdateType::OnHitTest, this);
return;
}
@@ -7235,6 +7236,24 @@
return renderer().currentRenderNamedFlowFragment();
}
+TextStream& operator<<(TextStream& ts, const RenderLayer& layer)
+{
+ ts << "RenderLayer " << &layer << " " << layer.size();
+ if (layer.transform())
+ ts << " has transform";
+ if (layer.hasFilter())
+ ts << " has filter";
+ if (layer.hasBackdropFilter())
+ ts << " has backdrop filter";
+ if (layer.hasBlendMode())
+ ts << " has blend mode";
+ if (layer.isolatesBlending())
+ ts << " isolates blending";
+ if (layer.isComposited())
+ ts << " " << *layer.backing();
+ return ts;
+}
+
} // namespace WebCore
#if ENABLE(TREE_DEBUGGING)
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/RenderLayer.h (220848 => 220849)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/RenderLayer.h 2017-08-17 08:01:05 UTC (rev 220848)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/RenderLayer.h 2017-08-17 08:03:44 UTC (rev 220849)
@@ -52,6 +52,10 @@
#include "ScrollableArea.h"
#include <memory>
+namespace WTF {
+class TextStream;
+}
+
namespace WebCore {
class ClipRects;
@@ -1234,6 +1238,8 @@
bool compositedWithOwnBackingStore(const RenderLayer&);
+WTF::TextStream& operator<<(WTF::TextStream&, const RenderLayer&);
+
} // namespace WebCore
#if ENABLE(TREE_DEBUGGING)
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/RenderLayerBacking.cpp (220848 => 220849)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/RenderLayerBacking.cpp 2017-08-17 08:01:05 UTC (rev 220848)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/RenderLayerBacking.cpp 2017-08-17 08:03:44 UTC (rev 220849)
@@ -65,6 +65,7 @@
#include "Settings.h"
#include "StyleResolver.h"
#include "TiledBacking.h"
+#include <wtf/text/TextStream.h>
#if PLATFORM(IOS)
#include "RuntimeApplicationChecks.h"
@@ -634,6 +635,8 @@
void RenderLayerBacking::updateAfterLayout(UpdateAfterLayoutFlags flags)
{
+ LOG(Compositing, "RenderLayerBacking %p updateAfterLayout (layer %p)", this, &m_owningLayer);
+
if (!compositor().compositingLayersNeedRebuild()) {
// Calling updateGeometry() here gives incorrect results, because the
// position of this layer's GraphicsLayer depends on the position of our compositing
@@ -940,6 +943,8 @@
void RenderLayerBacking::updateGeometry()
{
+ LOG_WITH_STREAM(Compositing, stream << "updateGeometry " << m_owningLayer);
+
// If we haven't built z-order lists yet, wait until later.
if (m_owningLayer.isStackingContainer() && m_owningLayer.m_zOrderListsDirty)
return;
@@ -3041,4 +3046,23 @@
return backingMemory;
}
+TextStream& operator<<(TextStream& ts, const RenderLayerBacking& backing)
+{
+ ts << "RenderLayerBacking " << &backing << " bounds " << backing.compositedBounds();
+
+ if (backing.isMainFrameLayerWithTiledBacking())
+ ts << " main tiled backing";
+ if (backing.paintsIntoWindow())
+ ts << " paintsIntoWindow";
+ if (backing.paintsIntoCompositedAncestor())
+ ts << " paintsIntoCompositedAncestor";
+
+ ts << " primary layer ID " << backing.graphicsLayer()->primaryLayerID();
+ if (auto nodeID = backing.scrollingNodeIDForRole(ViewportConstrained))
+ ts << " viewport constrained scrolling node " << nodeID;
+ if (auto nodeID = backing.scrollingNodeIDForRole(Scrolling))
+ ts << " scrolling node " << nodeID;
+ return ts;
+}
+
} // namespace WebCore
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/RenderLayerBacking.h (220848 => 220849)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/RenderLayerBacking.h 2017-08-17 08:01:05 UTC (rev 220848)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/RenderLayerBacking.h 2017-08-17 08:03:44 UTC (rev 220849)
@@ -398,4 +398,6 @@
};
CanvasCompositingStrategy canvasCompositingStrategy(const RenderObject&);
+WTF::TextStream& operator<<(WTF::TextStream&, const RenderLayerBacking&);
+
} // namespace WebCore
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/RenderLayerCompositor.cpp (220848 => 220849)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/RenderLayerCompositor.cpp 2017-08-17 08:01:05 UTC (rev 220848)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/RenderLayerCompositor.cpp 2017-08-17 08:03:44 UTC (rev 220849)
@@ -373,7 +373,7 @@
return false;
cacheAcceleratedCompositingFlags();
- return updateCompositingLayers(CompositingUpdateAfterStyleChange);
+ return updateCompositingLayers(CompositingUpdateType::AfterStyleChange);
}
void RenderLayerCompositor::customPositionForVisibleRectComputation(const GraphicsLayer* graphicsLayer, FloatPoint& position) const
@@ -440,7 +440,7 @@
if (GraphicsLayer* rootLayer = rootGraphicsLayer()) {
#if PLATFORM(IOS)
FloatRect exposedRect = frameView.exposedContentRect();
- LOG_WITH_STREAM(Compositing, stream << "\nRenderLayerCompositor " << this << " flushPendingLayerChanges (root " << isFlushRoot << ") exposedRect " << exposedRect);
+ LOG_WITH_STREAM(Compositing, stream << "\nRenderLayerCompositor " << this << " flushPendingLayerChanges (is root " << isFlushRoot << ") exposedRect " << exposedRect);
// FIXME: Use optimized flushes.
rootLayer->flushCompositingState(exposedRect);
@@ -451,7 +451,7 @@
if (frameView.viewExposedRect())
visibleRect.intersect(frameView.viewExposedRect().value());
- LOG_WITH_STREAM(Compositing, stream << "\nRenderLayerCompositor " << this << " flushPendingLayerChanges(" << isFlushRoot << ") " << visibleRect);
+ LOG_WITH_STREAM(Compositing, stream << "\nRenderLayerCompositor " << this << " flushPendingLayerChanges (is root " << isFlushRoot << ") visible rect " << visibleRect);
rootLayer->flushCompositingState(visibleRect);
LOG_WITH_STREAM(Compositing, stream << "RenderLayerCompositor " << this << " flush complete\n");
#endif
@@ -618,7 +618,7 @@
void RenderLayerCompositor::updateCompositingLayersTimerFired()
{
- updateCompositingLayers(CompositingUpdateAfterLayout);
+ updateCompositingLayers(CompositingUpdateType::AfterLayout);
}
bool RenderLayerCompositor::hasAnyAdditionalCompositedLayers(const RenderLayer& rootLayer) const
@@ -634,7 +634,7 @@
bool RenderLayerCompositor::updateCompositingLayers(CompositingUpdateType updateType, RenderLayer* updateRoot)
{
- LOG(Compositing, "RenderLayerCompositor %p updateCompositingLayers %d %p", this, updateType, updateRoot);
+ LOG_WITH_STREAM(Compositing, stream << "RenderLayerCompositor " << this << " updateCompositingLayers " << updateType << " root " << updateRoot);
m_updateCompositingLayersTimer.stop();
@@ -664,17 +664,17 @@
bool needGeometryUpdate = false;
switch (updateType) {
- case CompositingUpdateAfterStyleChange:
- case CompositingUpdateAfterLayout:
- case CompositingUpdateOnHitTest:
+ case CompositingUpdateType::AfterStyleChange:
+ case CompositingUpdateType::AfterLayout:
+ case CompositingUpdateType::OnHitTest:
checkForHierarchyUpdate = true;
break;
- case CompositingUpdateOnScroll:
+ case CompositingUpdateType::OnScroll:
checkForHierarchyUpdate = true; // Overlap can change with scrolling, so need to check for hierarchy updates.
needGeometryUpdate = true;
break;
- case CompositingUpdateOnCompositedScroll:
+ case CompositingUpdateType::OnCompositedScroll:
needGeometryUpdate = true;
break;
}
@@ -689,16 +689,16 @@
m_compositingLayersNeedRebuild = false;
updateRoot = &rootRenderLayer();
- if (isFullUpdate && updateType == CompositingUpdateAfterLayout)
+ if (isFullUpdate && updateType == CompositingUpdateType::AfterLayout)
m_reevaluateCompositingAfterLayout = false;
LOG(Compositing, " checkForHierarchyUpdate %d, needGeometryUpdate %d", checkForHierarchyUpdate, needHierarchyUpdate);
#if !LOG_DISABLED
- double startTime = 0;
+ MonotonicTime startTime;
if (compositingLogEnabled()) {
++m_rootLayerUpdateCount;
- startTime = monotonicallyIncreasingTime();
+ startTime = MonotonicTime::now();
}
#endif
@@ -754,12 +754,12 @@
#if !LOG_DISABLED
if (compositingLogEnabled() && isFullUpdate && (needHierarchyUpdate || needGeometryUpdate)) {
- double endTime = monotonicallyIncreasingTime();
+ MonotonicTime endTime = MonotonicTime::now();
LOG(Compositing, "Total layers primary secondary obligatory backing (KB) secondary backing(KB) total backing (KB) update time (ms)\n");
LOG(Compositing, "%8d %11d %9d %20.2f %22.2f %22.2f %18.2f\n",
m_obligateCompositedLayerCount + m_secondaryCompositedLayerCount, m_obligateCompositedLayerCount,
- m_secondaryCompositedLayerCount, m_obligatoryBackingStoreBytes / 1024, m_secondaryBackingStoreBytes / 1024, (m_obligatoryBackingStoreBytes + m_secondaryBackingStoreBytes) / 1024, 1000.0 * (endTime - startTime));
+ m_secondaryCompositedLayerCount, m_obligatoryBackingStoreBytes / 1024, m_secondaryBackingStoreBytes / 1024, (m_obligatoryBackingStoreBytes + m_secondaryBackingStoreBytes) / 1024, (endTime - startTime).milliseconds());
}
#endif
ASSERT(updateRoot || !m_compositingLayersNeedRebuild);
@@ -1825,7 +1825,7 @@
String RenderLayerCompositor::layerTreeAsText(LayerTreeFlags flags)
{
- updateCompositingLayers(CompositingUpdateAfterLayout);
+ updateCompositingLayers(CompositingUpdateType::AfterLayout);
if (!m_rootContentLayer)
return String();
@@ -4220,4 +4220,16 @@
return m_renderView.page();
}
+TextStream& operator<<(TextStream& ts, CompositingUpdateType updateType)
+{
+ switch (updateType) {
+ case CompositingUpdateType::AfterStyleChange: ts << "after style change"; break;
+ case CompositingUpdateType::AfterLayout: ts << "after layout"; break;
+ case CompositingUpdateType::OnHitTest: ts << "on hit test"; break;
+ case CompositingUpdateType::OnScroll: ts << "on scroll"; break;
+ case CompositingUpdateType::OnCompositedScroll: ts << "on composited scroll"; break;
+ }
+ return ts;
+}
+
} // namespace WebCore
Modified: releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/RenderLayerCompositor.h (220848 => 220849)
--- releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/RenderLayerCompositor.h 2017-08-17 08:01:05 UTC (rev 220848)
+++ releases/WebKitGTK/webkit-2.18/Source/WebCore/rendering/RenderLayerCompositor.h 2017-08-17 08:03:44 UTC (rev 220849)
@@ -47,12 +47,12 @@
typedef unsigned LayerTreeFlags;
-enum CompositingUpdateType {
- CompositingUpdateAfterStyleChange,
- CompositingUpdateAfterLayout,
- CompositingUpdateOnHitTest,
- CompositingUpdateOnScroll,
- CompositingUpdateOnCompositedScroll
+enum class CompositingUpdateType {
+ AfterStyleChange,
+ AfterLayout,
+ OnHitTest,
+ OnScroll,
+ OnCompositedScroll
};
enum class CompositingReason {
@@ -573,4 +573,6 @@
void paintScrollbar(Scrollbar*, GraphicsContext&, const IntRect& clip);
+WTF::TextStream& operator<<(WTF::TextStream&, CompositingUpdateType);
+
} // namespace WebCore