Skip to content

Commit

Permalink
Merge r220806 - Make RenderLayer and RenderLayerBacking TextStream-lo…
Browse files Browse the repository at this point in the history
…ggable, 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:
  • Loading branch information
smfr authored and carlosgcampos committed Aug 17, 2017
1 parent 8a7555d commit 8e1098a
Show file tree
Hide file tree
Showing 9 changed files with 128 additions and 28 deletions.
35 changes: 35 additions & 0 deletions Source/WebCore/ChangeLog
@@ -1,3 +1,38 @@
2017-08-16 Simon Fraser <simon.fraser@apple.com>

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 <Hironori.Fujii@sony.com>

[HarfBuzz] Decomposed Vietnamese characters are rendered incorrectly
Expand Down
4 changes: 2 additions & 2 deletions Source/WebCore/page/FrameView.cpp
Expand Up @@ -889,7 +889,7 @@ void FrameView::updateCompositingLayersAfterLayout()

// 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()
Expand Down Expand Up @@ -2690,7 +2690,7 @@ void FrameView::updateCompositingLayersAfterScrolling()

if (m_nestedLayoutCount <= 1 && hasViewportConstrainedObjects()) {
if (RenderView* renderView = this->renderView())
renderView->compositor().updateCompositingLayers(CompositingUpdateOnScroll);
renderView->compositor().updateCompositingLayers(CompositingUpdateType::OnScroll);
}
}

Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/page/ios/FrameIOS.mm
Expand Up @@ -718,7 +718,7 @@ static bool anyFrameHasTiledLayers(Frame* rootFrame)

if (changeType == CompletedScrollOffset) {
if (RenderView* root = contentRenderer())
root->compositor().updateCompositingLayers(CompositingUpdateOnScroll);
root->compositor().updateCompositingLayers(CompositingUpdateType::OnScroll);
}
}

Expand Down
25 changes: 22 additions & 3 deletions Source/WebCore/rendering/RenderLayer.cpp
Expand Up @@ -472,6 +472,7 @@ FilterEffectRenderer* RenderLayer::filterRenderer() const

void RenderLayer::updateLayerPositionsAfterLayout(const RenderLayer* rootLayer, UpdateLayerPositionsFlags flags)
{
LOG(Compositing, "RenderLayer %p updateLayerPositionsAfterLayout", this);
RenderGeometryMap geometryMap(UseTransforms);
if (this != rootLayer)
geometryMap.pushMappingsToAncestor(parent(), nullptr);
Expand Down Expand Up @@ -2594,9 +2595,9 @@ void RenderLayer::updateCompositingLayersAfterScroll()
// 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);
}
}
}
Expand Down Expand Up @@ -6491,7 +6492,7 @@ void RenderLayer::updateCompositingAndLayerListsIfNeeded()
{
if (compositor().inCompositingMode()) {
if (isDirtyStackingContainer() || m_normalFlowListDirty)
compositor().updateCompositingLayers(CompositingUpdateOnHitTest, this);
compositor().updateCompositingLayers(CompositingUpdateType::OnHitTest, this);
return;
}

Expand Down Expand Up @@ -7235,6 +7236,24 @@ RenderNamedFlowFragment* RenderLayer::currentRenderNamedFlowFragment() const
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)
Expand Down
6 changes: 6 additions & 0 deletions Source/WebCore/rendering/RenderLayer.h
Expand Up @@ -52,6 +52,10 @@
#include "ScrollableArea.h"
#include <memory>

namespace WTF {
class TextStream;
}

namespace WebCore {

class ClipRects;
Expand Down Expand Up @@ -1234,6 +1238,8 @@ void makeMatrixRenderable(TransformationMatrix&, bool has3DRendering);

bool compositedWithOwnBackingStore(const RenderLayer&);

WTF::TextStream& operator<<(WTF::TextStream&, const RenderLayer&);

} // namespace WebCore

#if ENABLE(TREE_DEBUGGING)
Expand Down
24 changes: 24 additions & 0 deletions Source/WebCore/rendering/RenderLayerBacking.cpp
Expand Up @@ -65,6 +65,7 @@
#include "Settings.h"
#include "StyleResolver.h"
#include "TiledBacking.h"
#include <wtf/text/TextStream.h>

#if PLATFORM(IOS)
#include "RuntimeApplicationChecks.h"
Expand Down Expand Up @@ -634,6 +635,8 @@ void RenderLayerBacking::updateAfterWidgetResize()

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
Expand Down Expand Up @@ -940,6 +943,8 @@ LayoutRect RenderLayerBacking::computeParentGraphicsLayerRect(RenderLayer* compo

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;
Expand Down Expand Up @@ -3041,4 +3046,23 @@ double RenderLayerBacking::backingStoreMemoryEstimate() const
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
2 changes: 2 additions & 0 deletions Source/WebCore/rendering/RenderLayerBacking.h
Expand Up @@ -398,4 +398,6 @@ enum CanvasCompositingStrategy {
};
CanvasCompositingStrategy canvasCompositingStrategy(const RenderObject&);

WTF::TextStream& operator<<(WTF::TextStream&, const RenderLayerBacking&);

} // namespace WebCore
44 changes: 28 additions & 16 deletions Source/WebCore/rendering/RenderLayerCompositor.cpp
Expand Up @@ -373,7 +373,7 @@ bool RenderLayerCompositor::didRecalcStyleWithNoPendingLayout()
return false;

cacheAcceleratedCompositingFlags();
return updateCompositingLayers(CompositingUpdateAfterStyleChange);
return updateCompositingLayers(CompositingUpdateType::AfterStyleChange);
}

void RenderLayerCompositor::customPositionForVisibleRectComputation(const GraphicsLayer* graphicsLayer, FloatPoint& position) const
Expand Down Expand Up @@ -440,7 +440,7 @@ void RenderLayerCompositor::flushPendingLayerChanges(bool isFlushRoot)
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);
Expand All @@ -451,7 +451,7 @@ void RenderLayerCompositor::flushPendingLayerChanges(bool isFlushRoot)
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
Expand Down Expand Up @@ -618,7 +618,7 @@ void RenderLayerCompositor::scheduleCompositingLayerUpdate()

void RenderLayerCompositor::updateCompositingLayersTimerFired()
{
updateCompositingLayers(CompositingUpdateAfterLayout);
updateCompositingLayers(CompositingUpdateType::AfterLayout);
}

bool RenderLayerCompositor::hasAnyAdditionalCompositedLayers(const RenderLayer& rootLayer) const
Expand All @@ -634,7 +634,7 @@ void RenderLayerCompositor::cancelCompositingLayerUpdate()

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();

Expand Down Expand Up @@ -664,17 +664,17 @@ bool RenderLayerCompositor::updateCompositingLayers(CompositingUpdateType update
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;
}
Expand All @@ -689,16 +689,16 @@ bool RenderLayerCompositor::updateCompositingLayers(CompositingUpdateType update
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

Expand Down Expand Up @@ -754,12 +754,12 @@ bool RenderLayerCompositor::updateCompositingLayers(CompositingUpdateType update

#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);
Expand Down Expand Up @@ -1825,7 +1825,7 @@ void RenderLayerCompositor::fixedRootBackgroundLayerChanged()

String RenderLayerCompositor::layerTreeAsText(LayerTreeFlags flags)
{
updateCompositingLayers(CompositingUpdateAfterLayout);
updateCompositingLayers(CompositingUpdateType::AfterLayout);

if (!m_rootContentLayer)
return String();
Expand Down Expand Up @@ -4220,4 +4220,16 @@ Page& RenderLayerCompositor::page() const
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
14 changes: 8 additions & 6 deletions Source/WebCore/rendering/RenderLayerCompositor.h
Expand Up @@ -47,12 +47,12 @@ class TiledBacking;

typedef unsigned LayerTreeFlags;

enum CompositingUpdateType {
CompositingUpdateAfterStyleChange,
CompositingUpdateAfterLayout,
CompositingUpdateOnHitTest,
CompositingUpdateOnScroll,
CompositingUpdateOnCompositedScroll
enum class CompositingUpdateType {
AfterStyleChange,
AfterLayout,
OnHitTest,
OnScroll,
OnCompositedScroll
};

enum class CompositingReason {
Expand Down Expand Up @@ -573,4 +573,6 @@ class RenderLayerCompositor final : public GraphicsLayerClient, public GraphicsL

void paintScrollbar(Scrollbar*, GraphicsContext&, const IntRect& clip);

WTF::TextStream& operator<<(WTF::TextStream&, CompositingUpdateType);

} // namespace WebCore

0 comments on commit 8e1098a

Please sign in to comment.