Changeset 220806 in webkit


Ignore:
Timestamp:
Aug 16, 2017 1:30:47 PM (7 years ago)
Author:
Simon Fraser
Message:

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:
Location:
trunk/Source/WebCore
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r220805 r220806  
     12017-08-16  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Make RenderLayer and RenderLayerBacking TextStream-loggable, and clean up compositing logging
     4        https://bugs.webkit.org/show_bug.cgi?id=175634
     5
     6        Reviewed by Zalan Bujtas.
     7
     8        Add operator<<(TextStream&) for RenderLayer and RenderLayer backing, and use them for compositing logging.
     9
     10        Convert CompositingUpdateType to an enum class.
     11
     12        * page/FrameView.cpp:
     13        (WebCore::FrameView::updateCompositingLayersAfterLayout):
     14        (WebCore::FrameView::updateCompositingLayersAfterScrolling):
     15        * page/ios/FrameIOS.mm:
     16        (WebCore::Frame::viewportOffsetChanged):
     17        * rendering/RenderLayer.cpp:
     18        (WebCore::RenderLayer::updateLayerPositionsAfterLayout):
     19        (WebCore::RenderLayer::updateCompositingLayersAfterScroll):
     20        (WebCore::RenderLayer::calculateClipRects const):
     21        * rendering/RenderLayer.h:
     22        * rendering/RenderLayerBacking.cpp:
     23        (WebCore::RenderLayerBacking::updateAfterLayout):
     24        (WebCore::RenderLayerBacking::updateGeometry):
     25        (WebCore::operator<<):
     26        * rendering/RenderLayerBacking.h:
     27        * rendering/RenderLayerCompositor.cpp:
     28        (WebCore::RenderLayerCompositor::didRecalcStyleWithNoPendingLayout):
     29        (WebCore::RenderLayerCompositor::flushPendingLayerChanges):
     30        (WebCore::RenderLayerCompositor::updateCompositingLayersTimerFired):
     31        (WebCore::RenderLayerCompositor::updateCompositingLayers):
     32        (WebCore::RenderLayerCompositor::layerTreeAsText):
     33        (WebCore::operator<<):
     34        * rendering/RenderLayerCompositor.h:
     35
    1362017-08-16  Eric Carlson  <eric.carlson@apple.com>
    237
  • trunk/Source/WebCore/page/FrameView.cpp

    r220781 r220806  
    890890    // This call will make sure the cached hasAcceleratedCompositing is updated from the pref
    891891    renderView->compositor().cacheAcceleratedCompositingFlags();
    892     renderView->compositor().updateCompositingLayers(CompositingUpdateAfterLayout);
     892    renderView->compositor().updateCompositingLayers(CompositingUpdateType::AfterLayout);
    893893}
    894894
     
    26902690    if (m_nestedLayoutCount <= 1 && hasViewportConstrainedObjects()) {
    26912691        if (RenderView* renderView = this->renderView())
    2692             renderView->compositor().updateCompositingLayers(CompositingUpdateOnScroll);
     2692            renderView->compositor().updateCompositingLayers(CompositingUpdateType::OnScroll);
    26932693    }
    26942694}
  • trunk/Source/WebCore/page/ios/FrameIOS.mm

    r219597 r220806  
    719719    if (changeType == CompletedScrollOffset) {
    720720        if (RenderView* root = contentRenderer())
    721             root->compositor().updateCompositingLayers(CompositingUpdateOnScroll);
     721            root->compositor().updateCompositingLayers(CompositingUpdateType::OnScroll);
    722722    }
    723723}
  • trunk/Source/WebCore/rendering/RenderLayer.cpp

    r220503 r220806  
    473473void RenderLayer::updateLayerPositionsAfterLayout(const RenderLayer* rootLayer, UpdateLayerPositionsFlags flags)
    474474{
     475    LOG(Compositing, "RenderLayer %p updateLayerPositionsAfterLayout", this);
    475476    RenderGeometryMap geometryMap(UseTransforms);
    476477    if (this != rootLayer)
     
    25952596        if (RenderLayer* compositingAncestor = stackingContainer()->enclosingCompositingLayer()) {
    25962597            if (usesCompositedScrolling() && !hasOutOfFlowPositionedDescendant())
    2597                 compositor().updateCompositingLayers(CompositingUpdateOnCompositedScroll, compositingAncestor);
     2598                compositor().updateCompositingLayers(CompositingUpdateType::OnCompositedScroll, compositingAncestor);
    25982599            else
    2599                 compositor().updateCompositingLayers(CompositingUpdateOnScroll, compositingAncestor);
     2600                compositor().updateCompositingLayers(CompositingUpdateType::OnScroll, compositingAncestor);
    26002601        }
    26012602    }
     
    64926493    if (compositor().inCompositingMode()) {
    64936494        if (isDirtyStackingContainer() || m_normalFlowListDirty)
    6494             compositor().updateCompositingLayers(CompositingUpdateOnHitTest, this);
     6495            compositor().updateCompositingLayers(CompositingUpdateType::OnHitTest, this);
    64956496        return;
    64966497    }
     
    72367237}
    72377238
     7239TextStream& operator<<(TextStream& ts, const RenderLayer& layer)
     7240{
     7241    ts << "RenderLayer " << &layer << " " << layer.size();
     7242    if (layer.transform())
     7243        ts << " has transform";
     7244    if (layer.hasFilter())
     7245        ts << " has filter";
     7246    if (layer.hasBackdropFilter())
     7247        ts << " has backdrop filter";
     7248    if (layer.hasBlendMode())
     7249        ts << " has blend mode";
     7250    if (layer.isolatesBlending())
     7251        ts << " isolates blending";
     7252    if (layer.isComposited())
     7253        ts << " " << *layer.backing();
     7254    return ts;
     7255}
     7256
    72387257} // namespace WebCore
    72397258
  • trunk/Source/WebCore/rendering/RenderLayer.h

    r220479 r220806  
    5353#include <memory>
    5454
     55namespace WTF {
     56class TextStream;
     57}
     58
    5559namespace WebCore {
    5660
     
    12351239bool compositedWithOwnBackingStore(const RenderLayer&);
    12361240
     1241WTF::TextStream& operator<<(WTF::TextStream&, const RenderLayer&);
     1242
    12371243} // namespace WebCore
    12381244
  • trunk/Source/WebCore/rendering/RenderLayerBacking.cpp

    r219876 r220806  
    6666#include "StyleResolver.h"
    6767#include "TiledBacking.h"
     68#include <wtf/text/TextStream.h>
    6869
    6970#if PLATFORM(IOS)
     
    635636void RenderLayerBacking::updateAfterLayout(UpdateAfterLayoutFlags flags)
    636637{
     638    LOG(Compositing, "RenderLayerBacking %p updateAfterLayout (layer %p)", this, &m_owningLayer);
     639
    637640    if (!compositor().compositingLayersNeedRebuild()) {
    638641        // Calling updateGeometry() here gives incorrect results, because the
     
    941944void RenderLayerBacking::updateGeometry()
    942945{
     946    LOG_WITH_STREAM(Compositing, stream << "updateGeometry " << m_owningLayer);
     947
    943948    // If we haven't built z-order lists yet, wait until later.
    944949    if (m_owningLayer.isStackingContainer() && m_owningLayer.m_zOrderListsDirty)
     
    30423047}
    30433048
     3049TextStream& operator<<(TextStream& ts, const RenderLayerBacking& backing)
     3050{
     3051    ts << "RenderLayerBacking " << &backing << " bounds " << backing.compositedBounds();
     3052
     3053    if (backing.isMainFrameLayerWithTiledBacking())
     3054        ts << " main tiled backing";
     3055    if (backing.paintsIntoWindow())
     3056        ts << " paintsIntoWindow";
     3057    if (backing.paintsIntoCompositedAncestor())
     3058        ts << " paintsIntoCompositedAncestor";
     3059
     3060    ts << " primary layer ID " << backing.graphicsLayer()->primaryLayerID();
     3061    if (auto nodeID = backing.scrollingNodeIDForRole(ViewportConstrained))
     3062        ts << " viewport constrained scrolling node " << nodeID;
     3063    if (auto nodeID = backing.scrollingNodeIDForRole(Scrolling))
     3064        ts << " scrolling node " << nodeID;
     3065    return ts;
     3066}
     3067
    30443068} // namespace WebCore
  • trunk/Source/WebCore/rendering/RenderLayerBacking.h

    r219876 r220806  
    399399CanvasCompositingStrategy canvasCompositingStrategy(const RenderObject&);
    400400
     401WTF::TextStream& operator<<(WTF::TextStream&, const RenderLayerBacking&);
     402
    401403} // namespace WebCore
  • trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp

    r220503 r220806  
    374374   
    375375    cacheAcceleratedCompositingFlags();
    376     return updateCompositingLayers(CompositingUpdateAfterStyleChange);
     376    return updateCompositingLayers(CompositingUpdateType::AfterStyleChange);
    377377}
    378378
     
    441441#if PLATFORM(IOS)
    442442        FloatRect exposedRect = frameView.exposedContentRect();
    443         LOG_WITH_STREAM(Compositing, stream << "\nRenderLayerCompositor " << this << " flushPendingLayerChanges (root " << isFlushRoot << ") exposedRect " << exposedRect);
     443        LOG_WITH_STREAM(Compositing, stream << "\nRenderLayerCompositor " << this << " flushPendingLayerChanges (is root " << isFlushRoot << ") exposedRect " << exposedRect);
    444444
    445445        // FIXME: Use optimized flushes.
     
    452452            visibleRect.intersect(frameView.viewExposedRect().value());
    453453
    454         LOG_WITH_STREAM(Compositing,  stream << "\nRenderLayerCompositor " << this << " flushPendingLayerChanges(" << isFlushRoot << ") " << visibleRect);
     454        LOG_WITH_STREAM(Compositing,  stream << "\nRenderLayerCompositor " << this << " flushPendingLayerChanges (is root " << isFlushRoot << ") visible rect " << visibleRect);
    455455        rootLayer->flushCompositingState(visibleRect);
    456456        LOG_WITH_STREAM(Compositing,  stream << "RenderLayerCompositor " << this << " flush complete\n");
     
    619619void RenderLayerCompositor::updateCompositingLayersTimerFired()
    620620{
    621     updateCompositingLayers(CompositingUpdateAfterLayout);
     621    updateCompositingLayers(CompositingUpdateType::AfterLayout);
    622622}
    623623
     
    635635bool RenderLayerCompositor::updateCompositingLayers(CompositingUpdateType updateType, RenderLayer* updateRoot)
    636636{
    637     LOG(Compositing, "RenderLayerCompositor %p updateCompositingLayers %d %p", this, updateType, updateRoot);
     637    LOG_WITH_STREAM(Compositing, stream << "RenderLayerCompositor " << this << " updateCompositingLayers " << updateType << " root " << updateRoot);
    638638
    639639    m_updateCompositingLayersTimer.stop();
     
    665665
    666666    switch (updateType) {
    667     case CompositingUpdateAfterStyleChange:
    668     case CompositingUpdateAfterLayout:
    669     case CompositingUpdateOnHitTest:
     667    case CompositingUpdateType::AfterStyleChange:
     668    case CompositingUpdateType::AfterLayout:
     669    case CompositingUpdateType::OnHitTest:
    670670        checkForHierarchyUpdate = true;
    671671        break;
    672     case CompositingUpdateOnScroll:
     672    case CompositingUpdateType::OnScroll:
    673673        checkForHierarchyUpdate = true; // Overlap can change with scrolling, so need to check for hierarchy updates.
    674674
    675675        needGeometryUpdate = true;
    676676        break;
    677     case CompositingUpdateOnCompositedScroll:
     677    case CompositingUpdateType::OnCompositedScroll:
    678678        needGeometryUpdate = true;
    679679        break;
     
    690690    updateRoot = &rootRenderLayer();
    691691
    692     if (isFullUpdate && updateType == CompositingUpdateAfterLayout)
     692    if (isFullUpdate && updateType == CompositingUpdateType::AfterLayout)
    693693        m_reevaluateCompositingAfterLayout = false;
    694694
     
    696696
    697697#if !LOG_DISABLED
    698     double startTime = 0;
     698    MonotonicTime startTime;
    699699    if (compositingLogEnabled()) {
    700700        ++m_rootLayerUpdateCount;
    701         startTime = monotonicallyIncreasingTime();
     701        startTime = MonotonicTime::now();
    702702    }
    703703#endif
     
    755755#if !LOG_DISABLED
    756756    if (compositingLogEnabled() && isFullUpdate && (needHierarchyUpdate || needGeometryUpdate)) {
    757         double endTime = monotonicallyIncreasingTime();
     757        MonotonicTime endTime = MonotonicTime::now();
    758758        LOG(Compositing, "Total layers   primary   secondary   obligatory backing (KB)   secondary backing(KB)   total backing (KB)  update time (ms)\n");
    759759
    760760        LOG(Compositing, "%8d %11d %9d %20.2f %22.2f %22.2f %18.2f\n",
    761761            m_obligateCompositedLayerCount + m_secondaryCompositedLayerCount, m_obligateCompositedLayerCount,
    762             m_secondaryCompositedLayerCount, m_obligatoryBackingStoreBytes / 1024, m_secondaryBackingStoreBytes / 1024, (m_obligatoryBackingStoreBytes + m_secondaryBackingStoreBytes) / 1024, 1000.0 * (endTime - startTime));
     762            m_secondaryCompositedLayerCount, m_obligatoryBackingStoreBytes / 1024, m_secondaryBackingStoreBytes / 1024, (m_obligatoryBackingStoreBytes + m_secondaryBackingStoreBytes) / 1024, (endTime - startTime).milliseconds());
    763763    }
    764764#endif
     
    18261826String RenderLayerCompositor::layerTreeAsText(LayerTreeFlags flags)
    18271827{
    1828     updateCompositingLayers(CompositingUpdateAfterLayout);
     1828    updateCompositingLayers(CompositingUpdateType::AfterLayout);
    18291829
    18301830    if (!m_rootContentLayer)
     
    42214221}
    42224222
     4223TextStream& operator<<(TextStream& ts, CompositingUpdateType updateType)
     4224{
     4225    switch (updateType) {
     4226    case CompositingUpdateType::AfterStyleChange: ts << "after style change"; break;
     4227    case CompositingUpdateType::AfterLayout: ts << "after layout"; break;
     4228    case CompositingUpdateType::OnHitTest: ts << "on hit test"; break;
     4229    case CompositingUpdateType::OnScroll: ts << "on scroll"; break;
     4230    case CompositingUpdateType::OnCompositedScroll: ts << "on composited scroll"; break;
     4231    }
     4232    return ts;
     4233}
     4234
    42234235} // namespace WebCore
  • trunk/Source/WebCore/rendering/RenderLayerCompositor.h

    r219876 r220806  
    4848typedef unsigned LayerTreeFlags;
    4949
    50 enum CompositingUpdateType {
    51     CompositingUpdateAfterStyleChange,
    52     CompositingUpdateAfterLayout,
    53     CompositingUpdateOnHitTest,
    54     CompositingUpdateOnScroll,
    55     CompositingUpdateOnCompositedScroll
     50enum class CompositingUpdateType {
     51    AfterStyleChange,
     52    AfterLayout,
     53    OnHitTest,
     54    OnScroll,
     55    OnCompositedScroll
    5656};
    5757
     
    574574void paintScrollbar(Scrollbar*, GraphicsContext&, const IntRect& clip);
    575575
     576WTF::TextStream& operator<<(WTF::TextStream&, CompositingUpdateType);
     577
    576578} // namespace WebCore
Note: See TracChangeset for help on using the changeset viewer.