Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(254)

Side by Side Diff: Source/core/paint/LayerPainter.cpp

Issue 719353004: [Slimming Paint] Track clip renderers (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "config.h" 5 #include "config.h"
6 #include "core/paint/LayerPainter.h" 6 #include "core/paint/LayerPainter.h"
7 7
8 #include "core/frame/Settings.h" 8 #include "core/frame/Settings.h"
9 #include "core/page/Page.h" 9 #include "core/page/Page.h"
10 #include "core/paint/FilterPainter.h" 10 #include "core/paint/FilterPainter.h"
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 94
95 OwnPtr<ClipRecorder> clipRecorder; 95 OwnPtr<ClipRecorder> clipRecorder;
96 if (m_renderLayer.parent()) { 96 if (m_renderLayer.parent()) {
97 ClipRectsContext clipRectsContext(paintingInfo.rootLayer, (paintFlag s & PaintLayerUncachedClipRects) ? UncachedClipRects : PaintingClipRects, Ignore OverlayScrollbarSize); 97 ClipRectsContext clipRectsContext(paintingInfo.rootLayer, (paintFlag s & PaintLayerUncachedClipRects) ? UncachedClipRects : PaintingClipRects, Ignore OverlayScrollbarSize);
98 if (shouldRespectOverflowClip(paintFlags, m_renderLayer.renderer()) == IgnoreOverflowClip) 98 if (shouldRespectOverflowClip(paintFlags, m_renderLayer.renderer()) == IgnoreOverflowClip)
99 clipRectsContext.setIgnoreOverflowClip(); 99 clipRectsContext.setIgnoreOverflowClip();
100 clipRect = m_renderLayer.clipper().backgroundClipRect(clipRectsConte xt); 100 clipRect = m_renderLayer.clipper().backgroundClipRect(clipRectsConte xt);
101 clipRect.intersect(paintingInfo.paintDirtyRect); 101 clipRect.intersect(paintingInfo.paintDirtyRect);
102 102
103 if (needsToClip(paintingInfo, clipRect)) { 103 if (needsToClip(paintingInfo, clipRect)) {
104 clipRecorder = adoptPtr(new ClipRecorder(m_renderLayer.parent(), context, DisplayItem::ClipLayerParent, clipRect)); 104 clipRecorder = adoptPtr(new ClipRecorder(m_renderLayer.clippingC ontainer(), m_renderLayer.parent(), context, DisplayItem::ClipLayerParent, clipR ect));
105 if (clipRect.hasRadius()) 105 if (clipRect.hasRadius())
106 applyRoundedRectClips(*m_renderLayer.parent(), paintingInfo, context, paintFlags, *clipRecorder); 106 applyRoundedRectClips(*m_renderLayer.parent(), paintingInfo, context, paintFlags, *clipRecorder);
107 } 107 }
108 } 108 }
109 109
110 paintLayerByApplyingTransform(context, paintingInfo, paintFlags); 110 paintLayerByApplyingTransform(context, paintingInfo, paintFlags);
111 111
112 return; 112 return;
113 } 113 }
114 114
(...skipping 384 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 } 499 }
500 500
501 void LayerPainter::paintOverflowControlsForFragments(const LayerFragments& layer Fragments, GraphicsContext* context, const LayerPaintingInfo& localPaintingInfo, PaintLayerFlags paintFlags) 501 void LayerPainter::paintOverflowControlsForFragments(const LayerFragments& layer Fragments, GraphicsContext* context, const LayerPaintingInfo& localPaintingInfo, PaintLayerFlags paintFlags)
502 { 502 {
503 for (size_t i = 0; i < layerFragments.size(); ++i) { 503 for (size_t i = 0; i < layerFragments.size(); ++i) {
504 const LayerFragment& fragment = layerFragments.at(i); 504 const LayerFragment& fragment = layerFragments.at(i);
505 505
506 OwnPtr<ClipRecorder> clipRecorder; 506 OwnPtr<ClipRecorder> clipRecorder;
507 507
508 if (needsToClip(localPaintingInfo, fragment.backgroundRect)) { 508 if (needsToClip(localPaintingInfo, fragment.backgroundRect)) {
509 clipRecorder = adoptPtr(new ClipRecorder(&m_renderLayer, context, Di splayItem::ClipLayerOverflowControls, fragment.backgroundRect)); 509 clipRecorder = adoptPtr(new ClipRecorder(m_renderLayer.clippingConta iner(), &m_renderLayer, context, DisplayItem::ClipLayerOverflowControls, fragmen t.backgroundRect));
510 if (fragment.backgroundRect.hasRadius()) 510 if (fragment.backgroundRect.hasRadius())
511 applyRoundedRectClips(m_renderLayer, localPaintingInfo, context, paintFlags, *clipRecorder); 511 applyRoundedRectClips(m_renderLayer, localPaintingInfo, context, paintFlags, *clipRecorder);
512 } 512 }
513 if (RenderLayerScrollableArea* scrollableArea = m_renderLayer.scrollable Area()) 513 if (RenderLayerScrollableArea* scrollableArea = m_renderLayer.scrollable Area())
514 scrollableArea->paintOverflowControls(context, roundedIntPoint(toPoi nt(fragment.layerBounds.location() - m_renderLayer.renderBoxLocation() + subPixe lAccumulationIfNeeded(localPaintingInfo.subPixelAccumulation, m_renderLayer.comp ositingState()))), pixelSnappedIntRect(fragment.backgroundRect.rect()), true); 514 scrollableArea->paintOverflowControls(context, roundedIntPoint(toPoi nt(fragment.layerBounds.location() - m_renderLayer.renderBoxLocation() + subPixe lAccumulationIfNeeded(localPaintingInfo.subPixelAccumulation, m_renderLayer.comp ositingState()))), pixelSnappedIntRect(fragment.backgroundRect.rect()), true);
515 } 515 }
516 } 516 }
517 517
518 static bool checkContainingBlockChainForPagination(RenderLayerModelObject* rende rer, RenderBox* ancestorColumnsRenderer) 518 static bool checkContainingBlockChainForPagination(RenderLayerModelObject* rende rer, RenderBox* ancestorColumnsRenderer)
519 { 519 {
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 clipType = DisplayItem::ClipLayerFragmentMask; 688 clipType = DisplayItem::ClipLayerFragmentMask;
689 clippingRule = DoNotIncludeSelfForBorderRadius; // Mask painting wil l handle clipping to self. 689 clippingRule = DoNotIncludeSelfForBorderRadius; // Mask painting wil l handle clipping to self.
690 break; 690 break;
691 case PaintPhaseClippingMask: 691 case PaintPhaseClippingMask:
692 clipType = DisplayItem::ClipLayerFragmentClippingMask; 692 clipType = DisplayItem::ClipLayerFragmentClippingMask;
693 break; 693 break;
694 default: 694 default:
695 ASSERT_NOT_REACHED(); 695 ASSERT_NOT_REACHED();
696 } 696 }
697 697
698 clipRecorder = adoptPtr(new ClipRecorder(&m_renderLayer, context, clipTy pe, clipRect)); 698 clipRecorder = adoptPtr(new ClipRecorder(m_renderLayer.clippingContainer (), &m_renderLayer, context, clipType, clipRect));
699 if (clipRect.hasRadius()) 699 if (clipRect.hasRadius())
700 applyRoundedRectClips(m_renderLayer, paintingInfo, context, paintFla gs, *clipRecorder, clippingRule); 700 applyRoundedRectClips(m_renderLayer, paintingInfo, context, paintFla gs, *clipRecorder, clippingRule);
701 } 701 }
702 702
703 PaintInfo paintInfo(context, pixelSnappedIntRect(clipRect.rect()), phase, pa intBehavior, paintingRootForRenderer, 0, paintingInfo.rootLayer->renderer()); 703 PaintInfo paintInfo(context, pixelSnappedIntRect(clipRect.rect()), phase, pa intBehavior, paintingRootForRenderer, 0, paintingInfo.rootLayer->renderer());
704 m_renderLayer.renderer()->paint(paintInfo, toPoint(fragment.layerBounds.loca tion() - m_renderLayer.renderBoxLocation() + subPixelAccumulationIfNeeded(painti ngInfo.subPixelAccumulation, m_renderLayer.compositingState()))); 704 m_renderLayer.renderer()->paint(paintInfo, toPoint(fragment.layerBounds.loca tion() - m_renderLayer.renderBoxLocation() + subPixelAccumulationIfNeeded(painti ngInfo.subPixelAccumulation, m_renderLayer.compositingState())));
705 } 705 }
706 706
707 void LayerPainter::paintBackgroundForFragments(const LayerFragments& layerFragme nts, GraphicsContext* context, 707 void LayerPainter::paintBackgroundForFragments(const LayerFragments& layerFragme nts, GraphicsContext* context,
708 const LayoutRect& transparencyPaintDirtyRect, bool haveTransparency, const L ayerPaintingInfo& localPaintingInfo, PaintBehavior paintBehavior, 708 const LayoutRect& transparencyPaintDirtyRect, bool haveTransparency, const L ayerPaintingInfo& localPaintingInfo, PaintBehavior paintBehavior,
(...skipping 21 matching lines...) Expand all
730 break; 730 break;
731 } 731 }
732 } 732 }
733 } 733 }
734 734
735 // Optimize clipping for the single fragment case. 735 // Optimize clipping for the single fragment case.
736 bool shouldClip = localPaintingInfo.clipToDirtyRect && layerFragments.size() == 1 && !layerFragments[0].foregroundRect.isEmpty(); 736 bool shouldClip = localPaintingInfo.clipToDirtyRect && layerFragments.size() == 1 && !layerFragments[0].foregroundRect.isEmpty();
737 ClipState clipState = HasNotClipped; 737 ClipState clipState = HasNotClipped;
738 OwnPtr<ClipRecorder> clipRecorder; 738 OwnPtr<ClipRecorder> clipRecorder;
739 if (shouldClip && needsToClip(localPaintingInfo, layerFragments[0].foregroun dRect)) { 739 if (shouldClip && needsToClip(localPaintingInfo, layerFragments[0].foregroun dRect)) {
740 clipRecorder = adoptPtr(new ClipRecorder(&m_renderLayer, context, Displa yItem::ClipLayerForeground, layerFragments[0].foregroundRect)); 740 clipRecorder = adoptPtr(new ClipRecorder(m_renderLayer.clippingContainer (), &m_renderLayer, context, DisplayItem::ClipLayerForeground, layerFragments[0] .foregroundRect));
741 if (layerFragments[0].foregroundRect.hasRadius()) 741 if (layerFragments[0].foregroundRect.hasRadius())
742 applyRoundedRectClips(m_renderLayer, localPaintingInfo, context, pai ntFlags, *clipRecorder); 742 applyRoundedRectClips(m_renderLayer, localPaintingInfo, context, pai ntFlags, *clipRecorder);
743 clipState = HasClipped; 743 clipState = HasClipped;
744 } 744 }
745 745
746 // We have to loop through every fragment multiple times, since we have to i ssue paint invalidations in each specific phase in order for 746 // We have to loop through every fragment multiple times, since we have to i ssue paint invalidations in each specific phase in order for
747 // interleaving of the fragments to work properly. 747 // interleaving of the fragments to work properly.
748 paintForegroundForFragmentsWithPhase(selectionOnly ? PaintPhaseSelection : P aintPhaseChildBlockBackgrounds, layerFragments, 748 paintForegroundForFragmentsWithPhase(selectionOnly ? PaintPhaseSelection : P aintPhaseChildBlockBackgrounds, layerFragments,
749 context, localPaintingInfo, paintBehavior, paintingRootForRenderer, pain tFlags, clipState); 749 context, localPaintingInfo, paintBehavior, paintingRootForRenderer, pain tFlags, clipState);
750 750
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
821 ClipRectsContext clipRectsContext(m_renderLayer.enclosingPaginationL ayer(), (paintFlags & PaintLayerUncachedClipRects) ? UncachedClipRects : Paintin gClipRects, IgnoreOverlayScrollbarSize); 821 ClipRectsContext clipRectsContext(m_renderLayer.enclosingPaginationL ayer(), (paintFlags & PaintLayerUncachedClipRects) ? UncachedClipRects : Paintin gClipRects, IgnoreOverlayScrollbarSize);
822 if (shouldRespectOverflowClip(paintFlags, m_renderLayer.renderer()) == IgnoreOverflowClip) 822 if (shouldRespectOverflowClip(paintFlags, m_renderLayer.renderer()) == IgnoreOverflowClip)
823 clipRectsContext.setIgnoreOverflowClip(); 823 clipRectsContext.setIgnoreOverflowClip();
824 LayoutRect parentClipRect = m_renderLayer.clipper().backgroundClipRe ct(clipRectsContext).rect(); 824 LayoutRect parentClipRect = m_renderLayer.clipper().backgroundClipRe ct(clipRectsContext).rect();
825 parentClipRect.moveBy(fragment.paginationOffset + offsetOfPagination LayerFromRoot); 825 parentClipRect.moveBy(fragment.paginationOffset + offsetOfPagination LayerFromRoot);
826 clipRect.intersect(parentClipRect); 826 clipRect.intersect(parentClipRect);
827 } 827 }
828 828
829 OwnPtr<ClipRecorder> clipRecorder; 829 OwnPtr<ClipRecorder> clipRecorder;
830 if (needsToClip(paintingInfo, clipRect)) 830 if (needsToClip(paintingInfo, clipRect))
831 clipRecorder = adoptPtr(new ClipRecorder(m_renderLayer.parent(), con text, DisplayItem::ClipLayerFragmentParent, clipRect)); 831 clipRecorder = adoptPtr(new ClipRecorder(m_renderLayer.clippingConta iner(), m_renderLayer.parent(), context, DisplayItem::ClipLayerFragmentParent, c lipRect));
832 832
833 paintLayerByApplyingTransform(context, paintingInfo, paintFlags, fragmen t.paginationOffset); 833 paintLayerByApplyingTransform(context, paintingInfo, paintFlags, fragmen t.paginationOffset);
834 } 834 }
835 } 835 }
836 836
837 } // namespace blink 837 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698