Changeset 215963 in webkit
- Timestamp:
- Apr 28, 2017 5:48:08 PM (7 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r215962 r215963 1 2017-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 1 17 2017-04-28 Wenson Hsieh <wenson_hsieh@apple.com> 2 18 -
trunk/Source/WebCore/rendering/RenderTreeAsText.cpp
r213455 r215963 82 82 using namespace HTMLNames; 83 83 84 static void writeLayers(TextStream&, const RenderLayer * rootLayer, RenderLayer*, const LayoutRect& paintDirtyRect, int indent = 0, RenderAsTextBehavior = RenderAsTextBehaviorNormal);84 static void writeLayers(TextStream&, const RenderLayer& rootLayer, RenderLayer&, const LayoutRect& paintDirtyRect, int indent = 0, RenderAsTextBehavior = RenderAsTextBehaviorNormal); 85 85 86 86 static void printBorderStyle(TextStream& ts, const EBorderStyle borderStyle) … … 599 599 view.layout(); 600 600 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); 602 602 } 603 603 } … … 720 720 } 721 721 722 static void writeRenderNamedFlowThreads(TextStream& ts, RenderView& renderView, const RenderLayer* rootLayer, 723 const LayoutRect& paintRect, int indent, RenderAsTextBehavior behavior) 722 static void writeRenderNamedFlowThreads(TextStream& ts, RenderView& renderView, const RenderLayer& rootLayer, const LayoutRect& paintRect, int indent, RenderAsTextBehavior behavior) 724 723 { 725 724 if (!renderView.hasRenderNamedFlowThreads()) 726 725 return; 727 728 const RenderNamedFlowThreadList* list = renderView.flowThreadController().renderNamedFlowThreadList();729 726 730 727 writeIndent(ts, indent); 731 728 ts << "Named flows\n"; 732 729 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()) { 736 731 writeIndent(ts, indent + 1); 737 732 ts << "Named flow '" << renderFlowThread->flowThreadName() << "'\n"; 738 733 739 734 RenderLayer* layer = renderFlowThread->layer(); 740 writeLayers(ts, rootLayer, layer, paintRect, indent + 2, behavior);735 writeLayers(ts, rootLayer, *layer, paintRect, indent + 2, behavior); 741 736 742 737 // Display the valid and invalid render regions attached to this flow thread. … … 762 757 } 763 758 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. 759 static 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. 768 762 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)))); 773 767 } 774 768 … … 777 771 ClipRect damageRect; 778 772 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)); 780 774 781 775 // 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*>* neg List = l->negZOrderList();786 bool paintsBackgroundSeparately = neg List && 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; 787 781 if (shouldPaint && paintsBackgroundSeparately) 788 write(ts, *l, layerBounds, damageRect.rect(), clipRectToApply.rect(), LayerPaintPhaseBackground, indent, behavior);789 790 if (neg List) {782 write(ts, layer, layerBounds, damageRect.rect(), clipRectToApply.rect(), LayerPaintPhaseBackground, indent, behavior); 783 784 if (negativeZOrderList) { 791 785 int currIndent = indent; 792 786 if (behavior & RenderAsTextShowLayerNesting) { 793 787 writeIndent(ts, indent); 794 ts << " negative z-order list(" << neg List->size() << ")\n";788 ts << " negative z-order list(" << negativeZOrderList->size() << ")\n"; 795 789 ++currIndent; 796 790 } 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); 799 794 } 800 795 801 796 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()) { 805 800 int currIndent = indent; 806 801 if (behavior & RenderAsTextShowLayerNesting) { … … 809 804 ++currIndent; 810 805 } 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()) { 816 812 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()) 819 815 ++layerCount; 816 } 817 820 818 if (layerCount) { 821 819 int currIndent = indent; 822 820 // We only print the header if there's at list a non-RenderNamedFlowThread part of the list. 823 if (!pos List->size() || !posList->at(0)->isFlowThreadCollectingGraphicsLayersUnderRegions()) {821 if (!positiveZOrderList->size() || !positiveZOrderList->at(0)->isFlowThreadCollectingGraphicsLayersUnderRegions()) { 824 822 if (behavior & RenderAsTextShowLayerNesting) { 825 823 writeIndent(ts, indent); 826 ts << " positive z-order list(" << pos List->size() << ")\n";824 ts << " positive z-order list(" << positiveZOrderList->size() << ")\n"; 827 825 ++currIndent; 828 826 } 829 for (unsigned i = 0; i != posList->size(); ++i) { 827 828 for (auto* currLayer : *positiveZOrderList) { 830 829 // 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); 833 832 } 834 833 } … … 838 837 // Altough the RenderFlowThread requires a layer, it is not collected by its parent, 839 838 // 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); 842 841 } 843 842 … … 876 875 } 877 876 878 static void writeSelection(TextStream& ts, const Render Object*renderer)879 { 880 if (!renderer ->isRenderView())881 return; 882 883 Frame* frame = renderer ->document().frame();877 static void writeSelection(TextStream& ts, const RenderBox& renderer) 878 { 879 if (!renderer.isRenderView()) 880 return; 881 882 Frame* frame = renderer.document().frame(); 884 883 if (!frame) 885 884 return; … … 896 895 } 897 896 898 static String externalRepresentation(RenderBox *renderer, RenderAsTextBehavior behavior)897 static String externalRepresentation(RenderBox& renderer, RenderAsTextBehavior behavior) 899 898 { 900 899 TextStream ts(TextStream::LineMode::MultipleLine, TextStream::Formatting::SVGStyleRect | TextStream::Formatting::LayoutUnitsAsIntegers); 901 if (!renderer ->hasLayer())900 if (!renderer.hasLayer()) 902 901 return ts.release(); 903 902 904 903 LOG(Layout, "externalRepresentation: dumping layer tree"); 905 904 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); 908 907 writeSelection(ts, renderer); 909 908 return ts.release(); … … 922 921 frame->document()->updateLayout(); 923 922 924 return externalRepresentation( renderer, behavior);923 return externalRepresentation(*renderer, behavior); 925 924 } 926 925 … … 935 934 element->document().updateLayout(); 936 935 937 return externalRepresentation(downcast<RenderBox>( renderer), behavior | RenderAsTextShowAllLayers);936 return externalRepresentation(downcast<RenderBox>(*renderer), behavior | RenderAsTextShowAllLayers); 938 937 } 939 938
Note: See TracChangeset
for help on using the changeset viewer.