Changeset 215963 in webkit


Ignore:
Timestamp:
Apr 28, 2017 5:48:08 PM (7 years ago)
Author:
Simon Fraser
Message:

Modernize RenderTreeAsText code
https://bugs.webkit.org/show_bug.cgi?id=171458

Reviewed by Zalan Bujtas.

Use modern loops. More references to render objects and layers.

  • rendering/RenderTreeAsText.cpp:

(WebCore::write):
(WebCore::writeRenderNamedFlowThreads):
(WebCore::writeLayers):
(WebCore::writeSelection):
(WebCore::externalRepresentation):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r215962 r215963  
     12017-04-28  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Modernize RenderTreeAsText code
     4        https://bugs.webkit.org/show_bug.cgi?id=171458
     5
     6        Reviewed by Zalan Bujtas.
     7
     8        Use modern loops. More references to render objects and layers.
     9
     10        * rendering/RenderTreeAsText.cpp:
     11        (WebCore::write):
     12        (WebCore::writeRenderNamedFlowThreads):
     13        (WebCore::writeLayers):
     14        (WebCore::writeSelection):
     15        (WebCore::externalRepresentation):
     16
    1172017-04-28  Wenson Hsieh  <wenson_hsieh@apple.com>
    218
  • trunk/Source/WebCore/rendering/RenderTreeAsText.cpp

    r213455 r215963  
    8282using namespace HTMLNames;
    8383
    84 static void writeLayers(TextStream&, const RenderLayer* rootLayer, RenderLayer*, const LayoutRect& paintDirtyRect, int indent = 0, RenderAsTextBehavior = RenderAsTextBehaviorNormal);
     84static void writeLayers(TextStream&, const RenderLayer& rootLayer, RenderLayer&, const LayoutRect& paintDirtyRect, int indent = 0, RenderAsTextBehavior = RenderAsTextBehaviorNormal);
    8585
    8686static void printBorderStyle(TextStream& ts, const EBorderStyle borderStyle)
     
    599599                    view.layout();
    600600                if (RenderLayer* layer = root->layer())
    601                     writeLayers(ts, layer, layer, layer->rect(), indent + 1, behavior);
     601                    writeLayers(ts, *layer, *layer, layer->rect(), indent + 1, behavior);
    602602            }
    603603        }
     
    720720}
    721721
    722 static void writeRenderNamedFlowThreads(TextStream& ts, RenderView& renderView, const RenderLayer* rootLayer,
    723     const LayoutRect& paintRect, int indent, RenderAsTextBehavior behavior)
     722static void writeRenderNamedFlowThreads(TextStream& ts, RenderView& renderView, const RenderLayer& rootLayer, const LayoutRect& paintRect, int indent, RenderAsTextBehavior behavior)
    724723{
    725724    if (!renderView.hasRenderNamedFlowThreads())
    726725        return;
    727 
    728     const RenderNamedFlowThreadList* list = renderView.flowThreadController().renderNamedFlowThreadList();
    729726
    730727    writeIndent(ts, indent);
    731728    ts << "Named flows\n";
    732729
    733     for (RenderNamedFlowThreadList::const_iterator iter = list->begin(); iter != list->end(); ++iter) {
    734         const RenderNamedFlowThread* renderFlowThread = *iter;
    735 
     730    for (const auto* renderFlowThread : *renderView.flowThreadController().renderNamedFlowThreadList()) {
    736731        writeIndent(ts, indent + 1);
    737732        ts << "Named flow '" << renderFlowThread->flowThreadName() << "'\n";
    738733
    739734        RenderLayer* layer = renderFlowThread->layer();
    740         writeLayers(ts, rootLayer, layer, paintRect, indent + 2, behavior);
     735        writeLayers(ts, rootLayer, *layer, paintRect, indent + 2, behavior);
    741736
    742737        // Display the valid and invalid render regions attached to this flow thread.
     
    762757}
    763758
    764 static void writeLayers(TextStream& ts, const RenderLayer* rootLayer, RenderLayer* l,
    765                         const LayoutRect& paintRect, int indent, RenderAsTextBehavior behavior)
    766 {
    767     // FIXME: Apply overflow to the root layer to not break every test.  Complete hack.  Sigh.
     759static void writeLayers(TextStream& ts, const RenderLayer& rootLayer, RenderLayer& layer, const LayoutRect& paintRect, int indent, RenderAsTextBehavior behavior)
     760{
     761    // FIXME: Apply overflow to the root layer to not break every test. Complete hack. Sigh.
    768762    LayoutRect paintDirtyRect(paintRect);
    769     if (rootLayer == l) {
    770         paintDirtyRect.setWidth(std::max<LayoutUnit>(paintDirtyRect.width(), rootLayer->renderBox()->layoutOverflowRect().maxX()));
    771         paintDirtyRect.setHeight(std::max<LayoutUnit>(paintDirtyRect.height(), rootLayer->renderBox()->layoutOverflowRect().maxY()));
    772         l->setSize(l->size().expandedTo(snappedIntSize(maxLayoutOverflow(l->renderBox()), LayoutPoint(0, 0))));
     763    if (&rootLayer == &layer) {
     764        paintDirtyRect.setWidth(std::max<LayoutUnit>(paintDirtyRect.width(), rootLayer.renderBox()->layoutOverflowRect().maxX()));
     765        paintDirtyRect.setHeight(std::max<LayoutUnit>(paintDirtyRect.height(), rootLayer.renderBox()->layoutOverflowRect().maxY()));
     766        layer.setSize(layer.size().expandedTo(snappedIntSize(maxLayoutOverflow(layer.renderBox()), LayoutPoint(0, 0))));
    773767    }
    774768   
     
    777771    ClipRect damageRect;
    778772    ClipRect clipRectToApply;
    779     l->calculateRects(RenderLayer::ClipRectsContext(rootLayer, TemporaryClipRects), paintDirtyRect, layerBounds, damageRect, clipRectToApply, l->offsetFromAncestor(rootLayer));
     773    layer.calculateRects(RenderLayer::ClipRectsContext(&rootLayer, TemporaryClipRects), paintDirtyRect, layerBounds, damageRect, clipRectToApply, layer.offsetFromAncestor(&rootLayer));
    780774
    781775    // Ensure our lists are up-to-date.
    782     l->updateLayerListsIfNeeded();
    783 
    784     bool shouldPaint = (behavior & RenderAsTextShowAllLayers) ? true : l->intersectsDamageRect(layerBounds, damageRect.rect(), rootLayer, l->offsetFromAncestor(rootLayer));
    785     Vector<RenderLayer*>* negList = l->negZOrderList();
    786     bool paintsBackgroundSeparately = negList && negList->size() > 0;
     776    layer.updateLayerListsIfNeeded();
     777
     778    bool shouldPaint = (behavior & RenderAsTextShowAllLayers) ? true : layer.intersectsDamageRect(layerBounds, damageRect.rect(), &rootLayer, layer.offsetFromAncestor(&rootLayer));
     779    Vector<RenderLayer*>* negativeZOrderList = layer.negZOrderList();
     780    bool paintsBackgroundSeparately = negativeZOrderList && negativeZOrderList->size() > 0;
    787781    if (shouldPaint && paintsBackgroundSeparately)
    788         write(ts, *l, layerBounds, damageRect.rect(), clipRectToApply.rect(), LayerPaintPhaseBackground, indent, behavior);
    789 
    790     if (negList) {
     782        write(ts, layer, layerBounds, damageRect.rect(), clipRectToApply.rect(), LayerPaintPhaseBackground, indent, behavior);
     783
     784    if (negativeZOrderList) {
    791785        int currIndent = indent;
    792786        if (behavior & RenderAsTextShowLayerNesting) {
    793787            writeIndent(ts, indent);
    794             ts << " negative z-order list(" << negList->size() << ")\n";
     788            ts << " negative z-order list(" << negativeZOrderList->size() << ")\n";
    795789            ++currIndent;
    796790        }
    797         for (unsigned i = 0; i != negList->size(); ++i)
    798             writeLayers(ts, rootLayer, negList->at(i), paintDirtyRect, currIndent, behavior);
     791       
     792        for (auto* currLayer : *negativeZOrderList)
     793            writeLayers(ts, rootLayer, *currLayer, paintDirtyRect, currIndent, behavior);
    799794    }
    800795
    801796    if (shouldPaint)
    802         write(ts, *l, layerBounds, damageRect.rect(), clipRectToApply.rect(), paintsBackgroundSeparately ? LayerPaintPhaseForeground : LayerPaintPhaseAll, indent, behavior);
    803 
    804     if (Vector<RenderLayer*>* normalFlowList = l->normalFlowList()) {
     797        write(ts, layer, layerBounds, damageRect.rect(), clipRectToApply.rect(), paintsBackgroundSeparately ? LayerPaintPhaseForeground : LayerPaintPhaseAll, indent, behavior);
     798
     799    if (Vector<RenderLayer*>* normalFlowList = layer.normalFlowList()) {
    805800        int currIndent = indent;
    806801        if (behavior & RenderAsTextShowLayerNesting) {
     
    809804            ++currIndent;
    810805        }
    811         for (unsigned i = 0; i != normalFlowList->size(); ++i)
    812             writeLayers(ts, rootLayer, normalFlowList->at(i), paintDirtyRect, currIndent, behavior);
    813     }
    814 
    815     if (Vector<RenderLayer*>* posList = l->posZOrderList()) {
     806       
     807        for (auto* currLayer : *normalFlowList)
     808            writeLayers(ts, rootLayer, *currLayer, paintDirtyRect, currIndent, behavior);
     809    }
     810
     811    if (Vector<RenderLayer*>* positiveZOrderList = layer.posZOrderList()) {
    816812        size_t layerCount = 0;
    817         for (unsigned i = 0; i != posList->size(); ++i)
    818             if (!posList->at(i)->isFlowThreadCollectingGraphicsLayersUnderRegions())
     813        for (auto* currLayer : *positiveZOrderList) {
     814            if (!currLayer->isFlowThreadCollectingGraphicsLayersUnderRegions())
    819815                ++layerCount;
     816        }
     817       
    820818        if (layerCount) {
    821819            int currIndent = indent;
    822820            // We only print the header if there's at list a non-RenderNamedFlowThread part of the list.
    823             if (!posList->size() || !posList->at(0)->isFlowThreadCollectingGraphicsLayersUnderRegions()) {
     821            if (!positiveZOrderList->size() || !positiveZOrderList->at(0)->isFlowThreadCollectingGraphicsLayersUnderRegions()) {
    824822                if (behavior & RenderAsTextShowLayerNesting) {
    825823                    writeIndent(ts, indent);
    826                     ts << " positive z-order list(" << posList->size() << ")\n";
     824                    ts << " positive z-order list(" << positiveZOrderList->size() << ")\n";
    827825                    ++currIndent;
    828826                }
    829                 for (unsigned i = 0; i != posList->size(); ++i) {
     827               
     828                for (auto* currLayer : *positiveZOrderList) {
    830829                    // Do not print named flows twice.
    831                     if (!posList->at(i)->isFlowThreadCollectingGraphicsLayersUnderRegions())
    832                         writeLayers(ts, rootLayer, posList->at(i), paintDirtyRect, currIndent, behavior);
     830                    if (!currLayer->isFlowThreadCollectingGraphicsLayersUnderRegions())
     831                        writeLayers(ts, rootLayer, *currLayer, paintDirtyRect, currIndent, behavior);
    833832                }
    834833            }
     
    838837    // Altough the RenderFlowThread requires a layer, it is not collected by its parent,
    839838    // so we have to treat it as a special case.
    840     if (is<RenderView>(l->renderer()))
    841         writeRenderNamedFlowThreads(ts, downcast<RenderView>(l->renderer()), rootLayer, paintDirtyRect, indent, behavior);
     839    if (is<RenderView>(layer.renderer()))
     840        writeRenderNamedFlowThreads(ts, downcast<RenderView>(layer.renderer()), rootLayer, paintDirtyRect, indent, behavior);
    842841}
    843842
     
    876875}
    877876
    878 static void writeSelection(TextStream& ts, const RenderObject* renderer)
    879 {
    880     if (!renderer->isRenderView())
    881         return;
    882 
    883     Frame* frame = renderer->document().frame();
     877static void writeSelection(TextStream& ts, const RenderBox& renderer)
     878{
     879    if (!renderer.isRenderView())
     880        return;
     881
     882    Frame* frame = renderer.document().frame();
    884883    if (!frame)
    885884        return;
     
    896895}
    897896
    898 static String externalRepresentation(RenderBox* renderer, RenderAsTextBehavior behavior)
     897static String externalRepresentation(RenderBox& renderer, RenderAsTextBehavior behavior)
    899898{
    900899    TextStream ts(TextStream::LineMode::MultipleLine, TextStream::Formatting::SVGStyleRect | TextStream::Formatting::LayoutUnitsAsIntegers);
    901     if (!renderer->hasLayer())
     900    if (!renderer.hasLayer())
    902901        return ts.release();
    903902
    904903    LOG(Layout, "externalRepresentation: dumping layer tree");
    905904
    906     RenderLayer* layer = renderer->layer();
    907     writeLayers(ts, layer, layer, layer->rect(), 0, behavior);
     905    RenderLayer& layer = *renderer.layer();
     906    writeLayers(ts, layer, layer, layer.rect(), 0, behavior);
    908907    writeSelection(ts, renderer);
    909908    return ts.release();
     
    922921        frame->document()->updateLayout();
    923922
    924     return externalRepresentation(renderer, behavior);
     923    return externalRepresentation(*renderer, behavior);
    925924}
    926925
     
    935934        element->document().updateLayout();
    936935   
    937     return externalRepresentation(downcast<RenderBox>(renderer), behavior | RenderAsTextShowAllLayers);
     936    return externalRepresentation(downcast<RenderBox>(*renderer), behavior | RenderAsTextShowAllLayers);
    938937}
    939938
Note: See TracChangeset for help on using the changeset viewer.