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

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

Issue 1327563003: Don't cache subsequence whose layer is not fully contained by repaint rect (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 5 years, 3 months 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/DeprecatedPaintLayerPainter.h" 6 #include "core/paint/DeprecatedPaintLayerPainter.h"
7 7
8 #include "core/frame/Settings.h" 8 #include "core/frame/Settings.h"
9 #include "core/layout/ClipPathOperation.h" 9 #include "core/layout/ClipPathOperation.h"
10 #include "core/layout/LayoutBlock.h" 10 #include "core/layout/LayoutBlock.h"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 DeprecatedPaintLayerPaintingInfo paintingInfo(&m_paintLayer, LayoutRect(encl osingIntRect(damageRect)), globalPaintFlags, LayoutSize(), paintingRoot); 48 DeprecatedPaintLayerPaintingInfo paintingInfo(&m_paintLayer, LayoutRect(encl osingIntRect(damageRect)), globalPaintFlags, LayoutSize(), paintingRoot);
49 if (shouldPaintLayerInSoftwareMode(globalPaintFlags, paintFlags)) 49 if (shouldPaintLayerInSoftwareMode(globalPaintFlags, paintFlags))
50 paintLayer(context, paintingInfo, paintFlags); 50 paintLayer(context, paintingInfo, paintFlags);
51 } 51 }
52 52
53 static ShouldRespectOverflowClip shouldRespectOverflowClip(PaintLayerFlags paint Flags, const LayoutObject* layoutObject) 53 static ShouldRespectOverflowClip shouldRespectOverflowClip(PaintLayerFlags paint Flags, const LayoutObject* layoutObject)
54 { 54 {
55 return (paintFlags & PaintLayerPaintingOverflowContents || (paintFlags & Pai ntLayerPaintingChildClippingMaskPhase && layoutObject->hasClipPath())) ? IgnoreO verflowClip : RespectOverflowClip; 55 return (paintFlags & PaintLayerPaintingOverflowContents || (paintFlags & Pai ntLayerPaintingChildClippingMaskPhase && layoutObject->hasClipPath())) ? IgnoreO verflowClip : RespectOverflowClip;
56 } 56 }
57 57
58 void DeprecatedPaintLayerPainter::paintLayer(GraphicsContext* context, const Dep recatedPaintLayerPaintingInfo& paintingInfo, PaintLayerFlags paintFlags) 58 DeprecatedPaintLayerPainter::PaintResult DeprecatedPaintLayerPainter::paintLayer (GraphicsContext* context, const DeprecatedPaintLayerPaintingInfo& paintingInfo, PaintLayerFlags paintFlags)
59 {
60 PaintResult result = paintLayerInternal(context, paintingInfo, paintFlags);
61 m_paintLayer.clearNeedsRepaint();
62 return result;
63 }
64
65 DeprecatedPaintLayerPainter::PaintResult DeprecatedPaintLayerPainter::paintLayer Internal(GraphicsContext* context, const DeprecatedPaintLayerPaintingInfo& paint ingInfo, PaintLayerFlags paintFlags)
59 { 66 {
60 // https://code.google.com/p/chromium/issues/detail?id=343772 67 // https://code.google.com/p/chromium/issues/detail?id=343772
61 DisableCompositingQueryAsserts disabler; 68 DisableCompositingQueryAsserts disabler;
62 69
63 if (m_paintLayer.compositingState() != NotComposited) { 70 if (m_paintLayer.compositingState() != NotComposited) {
64 if (paintingInfo.globalPaintFlags() & GlobalPaintFlattenCompositingLayer s) { 71 if (paintingInfo.globalPaintFlags() & GlobalPaintFlattenCompositingLayer s) {
65 // FIXME: ok, but what about GlobalPaintFlattenCompositingLayers? Th at's for printing and drag-image. 72 // FIXME: ok, but what about GlobalPaintFlattenCompositingLayers? Th at's for printing and drag-image.
66 // FIXME: why isn't the code here global, as opposed to being set on each paintLayer() call? 73 // FIXME: why isn't the code here global, as opposed to being set on each paintLayer() call?
67 paintFlags |= PaintLayerUncachedClipRects; 74 paintFlags |= PaintLayerUncachedClipRects;
68 } 75 }
69 } 76 }
70 77
71 // Non self-painting leaf layers don't need to be painted as their layoutObj ect() should properly paint itself. 78 // Non self-painting leaf layers don't need to be painted as their layoutObj ect() should properly paint itself.
72 if (!m_paintLayer.isSelfPaintingLayer() && !m_paintLayer.hasSelfPaintingLaye rDescendant()) { 79 if (!m_paintLayer.isSelfPaintingLayer() && !m_paintLayer.hasSelfPaintingLaye rDescendant()) {
73 ASSERT(!m_paintLayer.needsRepaint()); 80 ASSERT(!m_paintLayer.needsRepaint());
74 return; 81 return FullyPainted;
75 } 82 }
76 83
77 bool needsRepaint = m_paintLayer.needsRepaint();
78 m_paintLayer.clearNeedsRepaint();
79
80 if (shouldSuppressPaintingLayer(&m_paintLayer)) 84 if (shouldSuppressPaintingLayer(&m_paintLayer))
81 return; 85 return FullyPainted;
82 86
83 // If this layer is totally invisible then there is nothing to paint. 87 // If this layer is totally invisible then there is nothing to paint.
84 if (!m_paintLayer.layoutObject()->opacity() && !m_paintLayer.layoutObject()- >hasBackdropFilter()) 88 if (!m_paintLayer.layoutObject()->opacity() && !m_paintLayer.layoutObject()- >hasBackdropFilter())
85 return; 89 return FullyPainted;
86
87 if (!needsRepaint && SubsequenceRecorder::useCachedSubsequenceIfPossible(*co ntext, m_paintLayer))
88 return;
89 SubsequenceRecorder subsequenceRecorder(*context, m_paintLayer);
90 90
91 if (m_paintLayer.paintsWithTransparency(paintingInfo.globalPaintFlags())) 91 if (m_paintLayer.paintsWithTransparency(paintingInfo.globalPaintFlags()))
92 paintFlags |= PaintLayerHaveTransparency; 92 paintFlags |= PaintLayerHaveTransparency;
93 93
94 LayerFixedPositionRecorder fixedPositionRecorder(*context, *m_paintLayer.lay outObject()); 94 LayerFixedPositionRecorder fixedPositionRecorder(*context, *m_paintLayer.lay outObject());
95 95
96 // PaintLayerAppliedTransform is used in LayoutReplica, to avoid applying th e transform twice. 96 // PaintLayerAppliedTransform is used in LayoutReplica, to avoid applying th e transform twice.
97 if (m_paintLayer.paintsWithTransform(paintingInfo.globalPaintFlags()) && !(p aintFlags & PaintLayerAppliedTransform)) { 97 if (m_paintLayer.paintsWithTransform(paintingInfo.globalPaintFlags()) && !(p aintFlags & PaintLayerAppliedTransform))
98 paintLayerWithTransform(context, paintingInfo, paintFlags); 98 return paintLayerWithTransform(context, paintingInfo, paintFlags);
99 return;
100 }
101 99
102 paintLayerContentsAndReflection(context, paintingInfo, paintFlags); 100 return paintLayerContentsAndReflection(context, paintingInfo, paintFlags);
103 } 101 }
104 102
105 void DeprecatedPaintLayerPainter::paintLayerContentsAndReflection(GraphicsContex t* context, const DeprecatedPaintLayerPaintingInfo& paintingInfo, PaintLayerFlag s paintFlags, FragmentPolicy fragmentPolicy) 103 DeprecatedPaintLayerPainter::PaintResult DeprecatedPaintLayerPainter::paintLayer ContentsAndReflection(GraphicsContext* context, const DeprecatedPaintLayerPainti ngInfo& paintingInfo, PaintLayerFlags paintFlags, FragmentPolicy fragmentPolicy)
106 { 104 {
107 ASSERT(m_paintLayer.isSelfPaintingLayer() || m_paintLayer.hasSelfPaintingLay erDescendant()); 105 ASSERT(m_paintLayer.isSelfPaintingLayer() || m_paintLayer.hasSelfPaintingLay erDescendant());
108 106
109 PaintLayerFlags localPaintFlags = paintFlags & ~(PaintLayerAppliedTransform) ; 107 PaintLayerFlags localPaintFlags = paintFlags & ~(PaintLayerAppliedTransform) ;
110 108
109 PaintResult result = FullyPainted;
110
111 // Paint the reflection first if we have one. 111 // Paint the reflection first if we have one.
112 if (m_paintLayer.reflectionInfo()) { 112 if (m_paintLayer.reflectionInfo()) {
113 ScopeRecorder scopeRecorder(*context); 113 ScopeRecorder scopeRecorder(*context);
114 m_paintLayer.reflectionInfo()->paint(context, paintingInfo, localPaintFl ags | PaintLayerPaintingReflection); 114 m_paintLayer.reflectionInfo()->paint(context, paintingInfo, localPaintFl ags | PaintLayerPaintingReflection);
115 result = MaybeNotFullyPainted;
chrishtr 2015/09/10 16:48:26 Why always MaybeNotFullyPainted?
Xianzhu 2015/09/10 17:04:31 - We don't cache reflection drawings; - If we did,
115 } 116 }
116 117
117 localPaintFlags |= PaintLayerPaintingCompositingAllPhases; 118 localPaintFlags |= PaintLayerPaintingCompositingAllPhases;
118 paintLayerContents(context, paintingInfo, localPaintFlags, fragmentPolicy); 119 if (paintLayerContents(context, paintingInfo, localPaintFlags, fragmentPolic y) == MaybeNotFullyPainted)
120 result = MaybeNotFullyPainted;
121
122 return result;
119 } 123 }
120 124
121 class ClipPathHelper { 125 class ClipPathHelper {
122 public: 126 public:
123 ClipPathHelper(GraphicsContext* context, const DeprecatedPaintLayer& paintLa yer, DeprecatedPaintLayerPaintingInfo& paintingInfo, LayoutRect& rootRelativeBou nds, bool& rootRelativeBoundsComputed, 127 ClipPathHelper(GraphicsContext* context, const DeprecatedPaintLayer& paintLa yer, DeprecatedPaintLayerPaintingInfo& paintingInfo, LayoutRect& rootRelativeBou nds, bool& rootRelativeBoundsComputed,
124 const LayoutPoint& offsetFromRoot, PaintLayerFlags paintFlags) 128 const LayoutPoint& offsetFromRoot, PaintLayerFlags paintFlags)
125 : m_resourceClipper(0), m_paintLayer(paintLayer), m_context(context) 129 : m_resourceClipper(0), m_paintLayer(paintLayer), m_context(context)
126 { 130 {
127 const ComputedStyle& style = paintLayer.layoutObject()->styleRef(); 131 const ComputedStyle& style = paintLayer.layoutObject()->styleRef();
128 132
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 SVGClipPainter(*m_resourceClipper).finishEffect(*m_paintLayer.layout Object(), m_context, m_clipperState); 177 SVGClipPainter(*m_resourceClipper).finishEffect(*m_paintLayer.layout Object(), m_context, m_clipperState);
174 } 178 }
175 private: 179 private:
176 LayoutSVGResourceClipper* m_resourceClipper; 180 LayoutSVGResourceClipper* m_resourceClipper;
177 Optional<ClipPathRecorder> m_clipPathRecorder; 181 Optional<ClipPathRecorder> m_clipPathRecorder;
178 SVGClipPainter::ClipperState m_clipperState; 182 SVGClipPainter::ClipperState m_clipperState;
179 const DeprecatedPaintLayer& m_paintLayer; 183 const DeprecatedPaintLayer& m_paintLayer;
180 GraphicsContext* m_context; 184 GraphicsContext* m_context;
181 }; 185 };
182 186
183 void DeprecatedPaintLayerPainter::paintLayerContents(GraphicsContext* context, c onst DeprecatedPaintLayerPaintingInfo& paintingInfoArg, PaintLayerFlags paintFla gs, FragmentPolicy fragmentPolicy) 187 DeprecatedPaintLayerPainter::PaintResult DeprecatedPaintLayerPainter::paintLayer Contents(GraphicsContext* context, const DeprecatedPaintLayerPaintingInfo& paint ingInfoArg, PaintLayerFlags paintFlags, FragmentPolicy fragmentPolicy)
184 { 188 {
185 ASSERT(m_paintLayer.isSelfPaintingLayer() || m_paintLayer.hasSelfPaintingLay erDescendant()); 189 ASSERT(m_paintLayer.isSelfPaintingLayer() || m_paintLayer.hasSelfPaintingLay erDescendant());
186 ASSERT(!(paintFlags & PaintLayerAppliedTransform)); 190 ASSERT(!(paintFlags & PaintLayerAppliedTransform));
187 191
188 bool isSelfPaintingLayer = m_paintLayer.isSelfPaintingLayer(); 192 bool isSelfPaintingLayer = m_paintLayer.isSelfPaintingLayer();
189 bool isPaintingOverlayScrollbars = paintFlags & PaintLayerPaintingOverlayScr ollbars; 193 bool isPaintingOverlayScrollbars = paintFlags & PaintLayerPaintingOverlayScr ollbars;
190 bool isPaintingScrollingContent = paintFlags & PaintLayerPaintingCompositing ScrollingPhase; 194 bool isPaintingScrollingContent = paintFlags & PaintLayerPaintingCompositing ScrollingPhase;
191 bool isPaintingCompositedForeground = paintFlags & PaintLayerPaintingComposi tingForegroundPhase; 195 bool isPaintingCompositedForeground = paintFlags & PaintLayerPaintingComposi tingForegroundPhase;
192 bool isPaintingCompositedBackground = paintFlags & PaintLayerPaintingComposi tingBackgroundPhase; 196 bool isPaintingCompositedBackground = paintFlags & PaintLayerPaintingComposi tingBackgroundPhase;
193 bool isPaintingOverflowContents = paintFlags & PaintLayerPaintingOverflowCon tents; 197 bool isPaintingOverflowContents = paintFlags & PaintLayerPaintingOverflowCon tents;
194 // Outline always needs to be painted even if we have no visible content. Al so, 198 // Outline always needs to be painted even if we have no visible content. Al so,
195 // the outline is painted in the background phase during composited scrollin g. 199 // the outline is painted in the background phase during composited scrollin g.
196 // If it were painted in the foreground phase, it would move with the scroll ed 200 // If it were painted in the foreground phase, it would move with the scroll ed
197 // content. When not composited scrolling, the outline is painted in the 201 // content. When not composited scrolling, the outline is painted in the
198 // foreground phase. Since scrolled contents are moved by paint invalidation in this 202 // foreground phase. Since scrolled contents are moved by paint invalidation in this
199 // case, the outline won't get 'dragged along'. 203 // case, the outline won't get 'dragged along'.
200 bool shouldPaintOutline = isSelfPaintingLayer && !isPaintingOverlayScrollbar s 204 bool shouldPaintOutline = isSelfPaintingLayer && !isPaintingOverlayScrollbar s
201 && ((isPaintingScrollingContent && isPaintingCompositedBackground) 205 && ((isPaintingScrollingContent && isPaintingCompositedBackground)
202 || (!isPaintingScrollingContent && isPaintingCompositedForeground)); 206 || (!isPaintingScrollingContent && isPaintingCompositedForeground));
203 bool shouldPaintContent = m_paintLayer.hasVisibleContent() && isSelfPainting Layer && !isPaintingOverlayScrollbars; 207 bool shouldPaintContent = m_paintLayer.hasVisibleContent() && isSelfPainting Layer && !isPaintingOverlayScrollbars;
204 208
209 bool needsRepaint = m_paintLayer.needsRepaint();
210 m_paintLayer.clearNeedsRepaint();
211
212 PaintResult result = FullyPainted;
213
205 if (paintFlags & PaintLayerPaintingRootBackgroundOnly && !m_paintLayer.layou tObject()->isLayoutView() && !m_paintLayer.layoutObject()->isDocumentElement()) 214 if (paintFlags & PaintLayerPaintingRootBackgroundOnly && !m_paintLayer.layou tObject()->isLayoutView() && !m_paintLayer.layoutObject()->isDocumentElement())
206 return; 215 return result;
216
217 Optional<SubsequenceRecorder> subsequenceRecorder;
218 if (isPaintingOverlayScrollbars) {
219 // We should have cleared the repaint flag in the first pass.
220 ASSERT(!needsRepaint);
221 } else {
222 if (!needsRepaint && SubsequenceRecorder::useCachedSubsequenceIfPossible (*context, m_paintLayer))
223 return result;
224 subsequenceRecorder.emplace(*context, m_paintLayer);
225 }
207 226
208 DeprecatedPaintLayerPaintingInfo paintingInfo = paintingInfoArg; 227 DeprecatedPaintLayerPaintingInfo paintingInfo = paintingInfoArg;
209 228
210 // Ensure our lists are up-to-date. 229 // Ensure our lists are up-to-date.
211 m_paintLayer.stackingNode()->updateLayerListsIfNeeded(); 230 m_paintLayer.stackingNode()->updateLayerListsIfNeeded();
212 231
213 LayoutPoint offsetFromRoot; 232 LayoutPoint offsetFromRoot;
214 m_paintLayer.convertToLayerCoords(paintingInfo.rootLayer, offsetFromRoot); 233 m_paintLayer.convertToLayerCoords(paintingInfo.rootLayer, offsetFromRoot);
215 234
216 if (m_paintLayer.compositingState() == PaintsIntoOwnBacking) 235 if (m_paintLayer.compositingState() == PaintsIntoOwnBacking)
217 offsetFromRoot.move(m_paintLayer.subpixelAccumulation()); 236 offsetFromRoot.move(m_paintLayer.subpixelAccumulation());
218 else 237 else
219 offsetFromRoot.move(paintingInfo.subPixelAccumulation); 238 offsetFromRoot.move(paintingInfo.subPixelAccumulation);
220 239
240 LayoutRect bounds = m_paintLayer.physicalBoundingBox(offsetFromRoot);
241 if (!paintingInfo.paintDirtyRect.contains(bounds))
242 result = MaybeNotFullyPainted;
243
221 LayoutRect rootRelativeBounds; 244 LayoutRect rootRelativeBounds;
222 bool rootRelativeBoundsComputed = false; 245 bool rootRelativeBoundsComputed = false;
223 246
224 if (paintingInfo.ancestorHasClipPathClipping && m_paintLayer.layoutObject()- >style()->position() != StaticPosition) 247 if (paintingInfo.ancestorHasClipPathClipping && m_paintLayer.layoutObject()- >style()->position() != StaticPosition)
225 UseCounter::count(m_paintLayer.layoutObject()->document(), UseCounter::C lipPathOfPositionedElement); 248 UseCounter::count(m_paintLayer.layoutObject()->document(), UseCounter::C lipPathOfPositionedElement);
226 249
227 // These helpers output clip and compositing operations using a RAII pattern . Stack-allocated-varibles are destructed in the reverse order of construction, 250 // These helpers output clip and compositing operations using a RAII pattern . Stack-allocated-varibles are destructed in the reverse order of construction,
228 // so they are nested properly. 251 // so they are nested properly.
229 ClipPathHelper clipPathHelper(context, m_paintLayer, paintingInfo, rootRelat iveBounds, rootRelativeBoundsComputed, offsetFromRoot, paintFlags); 252 ClipPathHelper clipPathHelper(context, m_paintLayer, paintingInfo, rootRelat iveBounds, rootRelativeBoundsComputed, offsetFromRoot, paintFlags);
230 253
(...skipping 15 matching lines...) Expand all
246 269
247 DeprecatedPaintLayerFragments layerFragments; 270 DeprecatedPaintLayerFragments layerFragments;
248 if (shouldPaintContent || shouldPaintOutline || isPaintingOverlayScrollbars) { 271 if (shouldPaintContent || shouldPaintOutline || isPaintingOverlayScrollbars) {
249 // Collect the fragments. This will compute the clip rectangles and pain t offsets for each layer fragment. 272 // Collect the fragments. This will compute the clip rectangles and pain t offsets for each layer fragment.
250 ClipRectsCacheSlot cacheSlot = (paintFlags & PaintLayerUncachedClipRects ) ? UncachedClipRects : PaintingClipRects; 273 ClipRectsCacheSlot cacheSlot = (paintFlags & PaintLayerUncachedClipRects ) ? UncachedClipRects : PaintingClipRects;
251 ShouldRespectOverflowClip respectOverflowClip = shouldRespectOverflowCli p(paintFlags, m_paintLayer.layoutObject()); 274 ShouldRespectOverflowClip respectOverflowClip = shouldRespectOverflowCli p(paintFlags, m_paintLayer.layoutObject());
252 if (fragmentPolicy == ForceSingleFragment) 275 if (fragmentPolicy == ForceSingleFragment)
253 m_paintLayer.appendSingleFragmentIgnoringPagination(layerFragments, localPaintingInfo.rootLayer, localPaintingInfo.paintDirtyRect, cacheSlot, Ignore OverlayScrollbarSize, respectOverflowClip, &offsetFromRoot, localPaintingInfo.su bPixelAccumulation); 276 m_paintLayer.appendSingleFragmentIgnoringPagination(layerFragments, localPaintingInfo.rootLayer, localPaintingInfo.paintDirtyRect, cacheSlot, Ignore OverlayScrollbarSize, respectOverflowClip, &offsetFromRoot, localPaintingInfo.su bPixelAccumulation);
254 else 277 else
255 m_paintLayer.collectFragments(layerFragments, localPaintingInfo.root Layer, localPaintingInfo.paintDirtyRect, cacheSlot, IgnoreOverlayScrollbarSize, respectOverflowClip, &offsetFromRoot, localPaintingInfo.subPixelAccumulation); 278 m_paintLayer.collectFragments(layerFragments, localPaintingInfo.root Layer, localPaintingInfo.paintDirtyRect, cacheSlot, IgnoreOverlayScrollbarSize, respectOverflowClip, &offsetFromRoot, localPaintingInfo.subPixelAccumulation);
256 if (shouldPaintContent) 279 if (shouldPaintContent) {
280 // TODO(wangxianzhu): This is for old slow scrolling. Implement simi lar optimization for slimming paint v2.
257 shouldPaintContent = atLeastOneFragmentIntersectsDamageRect(layerFra gments, localPaintingInfo, paintFlags, offsetFromRoot); 281 shouldPaintContent = atLeastOneFragmentIntersectsDamageRect(layerFra gments, localPaintingInfo, paintFlags, offsetFromRoot);
282 if (!shouldPaintContent)
283 result = MaybeNotFullyPainted;
284 }
258 } 285 }
259 286
260 bool selectionOnly = localPaintingInfo.globalPaintFlags() & GlobalPaintSelec tionOnly; 287 bool selectionOnly = localPaintingInfo.globalPaintFlags() & GlobalPaintSelec tionOnly;
261 // If this layer's layoutObject is a child of the paintingRoot, we paint unc onditionally, which 288 // If this layer's layoutObject is a child of the paintingRoot, we paint unc onditionally, which
262 // is done by passing a nil paintingRoot down to our layoutObject (as if no paintingRoot was ever set). 289 // is done by passing a nil paintingRoot down to our layoutObject (as if no paintingRoot was ever set).
263 // Else, our layout tree may or may not contain the painting root, so we pas s that root along 290 // Else, our layout tree may or may not contain the painting root, so we pas s that root along
264 // so it will be tested against as we descend through the layoutObjects. 291 // so it will be tested against as we descend through the layoutObjects.
265 LayoutObject* paintingRootForLayoutObject = 0; 292 LayoutObject* paintingRootForLayoutObject = 0;
266 if (localPaintingInfo.paintingRoot && !m_paintLayer.layoutObject()->isDescen dantOf(localPaintingInfo.paintingRoot)) 293 if (localPaintingInfo.paintingRoot && !m_paintLayer.layoutObject()->isDescen dantOf(localPaintingInfo.paintingRoot))
267 paintingRootForLayoutObject = localPaintingInfo.paintingRoot; 294 paintingRootForLayoutObject = localPaintingInfo.paintingRoot;
268 295
269 { // Begin block for the lifetime of any filter. 296 { // Begin block for the lifetime of any filter.
270 FilterPainter filterPainter(m_paintLayer, context, offsetFromRoot, layer Fragments.isEmpty() ? ClipRect() : layerFragments[0].backgroundRect, localPainti ngInfo, paintFlags, 297 FilterPainter filterPainter(m_paintLayer, context, offsetFromRoot, layer Fragments.isEmpty() ? ClipRect() : layerFragments[0].backgroundRect, localPainti ngInfo, paintFlags,
271 rootRelativeBounds, rootRelativeBoundsComputed); 298 rootRelativeBounds, rootRelativeBoundsComputed);
272 299
273 bool shouldPaintBackground = isPaintingCompositedBackground && shouldPai ntContent && !selectionOnly; 300 bool shouldPaintBackground = isPaintingCompositedBackground && shouldPai ntContent && !selectionOnly;
274 bool shouldPaintNegZOrderList = (isPaintingScrollingContent && isPaintin gOverflowContents) || (!isPaintingScrollingContent && isPaintingCompositedBackgr ound); 301 bool shouldPaintNegZOrderList = (isPaintingScrollingContent && isPaintin gOverflowContents) || (!isPaintingScrollingContent && isPaintingCompositedBackgr ound);
275 bool shouldPaintOwnContents = isPaintingCompositedForeground && shouldPa intContent; 302 bool shouldPaintOwnContents = isPaintingCompositedForeground && shouldPa intContent;
276 bool shouldPaintNormalFlowAndPosZOrderLists = isPaintingCompositedForegr ound; 303 bool shouldPaintNormalFlowAndPosZOrderLists = isPaintingCompositedForegr ound;
277 bool shouldPaintOverlayScrollbars = isPaintingOverlayScrollbars; 304 bool shouldPaintOverlayScrollbars = isPaintingOverlayScrollbars;
278 305
279 if (shouldPaintBackground) { 306 if (shouldPaintBackground) {
280 paintBackgroundForFragments(layerFragments, context, paintingInfo.pa intDirtyRect, 307 paintBackgroundForFragments(layerFragments, context, paintingInfo.pa intDirtyRect,
281 localPaintingInfo, paintingRootForLayoutObject, paintFlags); 308 localPaintingInfo, paintingRootForLayoutObject, paintFlags);
282 } 309 }
283 310
284 if (shouldPaintNegZOrderList) 311 if (shouldPaintNegZOrderList) {
285 paintChildren(NegativeZOrderChildren, context, paintingInfo, paintFl ags); 312 if (paintChildren(NegativeZOrderChildren, context, paintingInfo, pai ntFlags) == MaybeNotFullyPainted)
313 result = MaybeNotFullyPainted;
314 }
286 315
287 if (shouldPaintOwnContents) { 316 if (shouldPaintOwnContents) {
288 paintForegroundForFragments(layerFragments, context, paintingInfo.pa intDirtyRect, 317 paintForegroundForFragments(layerFragments, context, paintingInfo.pa intDirtyRect,
289 localPaintingInfo, paintingRootForLayoutObject, selectionOnly, p aintFlags); 318 localPaintingInfo, paintingRootForLayoutObject, selectionOnly, p aintFlags);
290 } 319 }
291 320
292 if (shouldPaintOutline) 321 if (shouldPaintOutline)
293 paintOutlineForFragments(layerFragments, context, localPaintingInfo, paintingRootForLayoutObject, paintFlags); 322 paintOutlineForFragments(layerFragments, context, localPaintingInfo, paintingRootForLayoutObject, paintFlags);
294 323
295 if (shouldPaintNormalFlowAndPosZOrderLists) 324 if (shouldPaintNormalFlowAndPosZOrderLists) {
296 paintChildren(NormalFlowChildren | PositiveZOrderChildren, context, paintingInfo, paintFlags); 325 if (paintChildren(NormalFlowChildren | PositiveZOrderChildren, conte xt, paintingInfo, paintFlags) == MaybeNotFullyPainted)
326 result = MaybeNotFullyPainted;
327 }
297 328
298 if (shouldPaintOverlayScrollbars) 329 if (shouldPaintOverlayScrollbars)
299 paintOverflowControlsForFragments(layerFragments, context, localPain tingInfo, paintFlags); 330 paintOverflowControlsForFragments(layerFragments, context, localPain tingInfo, paintFlags);
300 } // FilterPainter block 331 } // FilterPainter block
301 332
302 bool shouldPaintMask = (paintFlags & PaintLayerPaintingCompositingMaskPhase) && shouldPaintContent && m_paintLayer.layoutObject()->hasMask() && !selectionOn ly; 333 bool shouldPaintMask = (paintFlags & PaintLayerPaintingCompositingMaskPhase) && shouldPaintContent && m_paintLayer.layoutObject()->hasMask() && !selectionOn ly;
303 bool shouldPaintClippingMask = (paintFlags & PaintLayerPaintingChildClipping MaskPhase) && shouldPaintContent && !selectionOnly; 334 bool shouldPaintClippingMask = (paintFlags & PaintLayerPaintingChildClipping MaskPhase) && shouldPaintContent && !selectionOnly;
304 335
305 if (shouldPaintMask) 336 if (shouldPaintMask)
306 paintMaskForFragments(layerFragments, context, localPaintingInfo, painti ngRootForLayoutObject, paintFlags); 337 paintMaskForFragments(layerFragments, context, localPaintingInfo, painti ngRootForLayoutObject, paintFlags);
307 if (shouldPaintClippingMask) { 338 if (shouldPaintClippingMask) {
308 // Paint the border radius mask for the fragments. 339 // Paint the border radius mask for the fragments.
309 paintChildClippingMaskForFragments(layerFragments, context, localPaintin gInfo, paintingRootForLayoutObject, paintFlags); 340 paintChildClippingMaskForFragments(layerFragments, context, localPaintin gInfo, paintingRootForLayoutObject, paintFlags);
310 } 341 }
342
343 // Set subsequence not cacheable if the bounding box of this layer and desce ndants is not fully contained
344 // by paintRect, because later paintRect changes may expose new contents whi ch will need repainting.
345 if (result == MaybeNotFullyPainted && subsequenceRecorder)
346 subsequenceRecorder->setUncacheable();
347
348 return result;
311 } 349 }
312 350
313 bool DeprecatedPaintLayerPainter::needsToClip(const DeprecatedPaintLayerPainting Info& localPaintingInfo, const ClipRect& clipRect) 351 bool DeprecatedPaintLayerPainter::needsToClip(const DeprecatedPaintLayerPainting Info& localPaintingInfo, const ClipRect& clipRect)
314 { 352 {
315 return clipRect.rect() != localPaintingInfo.paintDirtyRect || clipRect.hasRa dius(); 353 return clipRect.rect() != localPaintingInfo.paintDirtyRect || clipRect.hasRa dius();
316 } 354 }
317 355
318 bool DeprecatedPaintLayerPainter::atLeastOneFragmentIntersectsDamageRect(Depreca tedPaintLayerFragments& fragments, const DeprecatedPaintLayerPaintingInfo& local PaintingInfo, PaintLayerFlags localPaintFlags, const LayoutPoint& offsetFromRoot ) 356 bool DeprecatedPaintLayerPainter::atLeastOneFragmentIntersectsDamageRect(Depreca tedPaintLayerFragments& fragments, const DeprecatedPaintLayerPaintingInfo& local PaintingInfo, PaintLayerFlags localPaintFlags, const LayoutPoint& offsetFromRoot )
319 { 357 {
320 if (m_paintLayer.enclosingPaginationLayer()) 358 if (m_paintLayer.enclosingPaginationLayer())
321 return true; // The fragments created have already been found to interse ct with the damage rect. 359 return true; // The fragments created have already been found to interse ct with the damage rect.
322 360
323 if (&m_paintLayer == localPaintingInfo.rootLayer && (localPaintFlags & Paint LayerPaintingOverflowContents)) 361 if (&m_paintLayer == localPaintingInfo.rootLayer && (localPaintFlags & Paint LayerPaintingOverflowContents))
324 return true; 362 return true;
325 363
326 for (DeprecatedPaintLayerFragment& fragment: fragments) { 364 for (DeprecatedPaintLayerFragment& fragment: fragments) {
327 LayoutPoint newOffsetFromRoot = offsetFromRoot + fragment.paginationOffs et; 365 LayoutPoint newOffsetFromRoot = offsetFromRoot + fragment.paginationOffs et;
328 // Note that this really only works reliably on the first fragment. If t he layer has visible 366 // Note that this really only works reliably on the first fragment. If t he layer has visible
329 // overflow and a subsequent fragment doesn't intersect with the border box of the layer 367 // overflow and a subsequent fragment doesn't intersect with the border box of the layer
330 // (i.e. only contains an overflow portion of the layer), intersection w ill fail. The reason 368 // (i.e. only contains an overflow portion of the layer), intersection w ill fail. The reason
331 // for this is that fragment.layerBounds is set to the border box, not t he bounding box, of 369 // for this is that fragment.layerBounds is set to the border box, not t he bounding box, of
332 // the layer. 370 // the layer.
333 if (m_paintLayer.intersectsDamageRect(fragment.layerBounds, fragment.bac kgroundRect.rect(), newOffsetFromRoot)) 371 if (m_paintLayer.intersectsDamageRect(fragment.layerBounds, fragment.bac kgroundRect.rect(), newOffsetFromRoot))
334 return true; 372 return true;
335 } 373 }
336 return false; 374 return false;
337 } 375 }
338 376
339 void DeprecatedPaintLayerPainter::paintLayerWithTransform(GraphicsContext* conte xt, const DeprecatedPaintLayerPaintingInfo& paintingInfo, PaintLayerFlags paintF lags) 377 DeprecatedPaintLayerPainter::PaintResult DeprecatedPaintLayerPainter::paintLayer WithTransform(GraphicsContext* context, const DeprecatedPaintLayerPaintingInfo& paintingInfo, PaintLayerFlags paintFlags)
340 { 378 {
341 TransformationMatrix layerTransform = m_paintLayer.renderableTransform(paint ingInfo.globalPaintFlags()); 379 TransformationMatrix layerTransform = m_paintLayer.renderableTransform(paint ingInfo.globalPaintFlags());
342 // If the transform can't be inverted, then don't paint anything. 380 // If the transform can't be inverted, then don't paint anything.
343 if (!layerTransform.isInvertible()) 381 if (!layerTransform.isInvertible())
344 return; 382 return FullyPainted;
345 383
346 // FIXME: We should make sure that we don't walk past paintingInfo.rootLayer here. 384 // FIXME: We should make sure that we don't walk past paintingInfo.rootLayer here.
347 // m_paintLayer may be the "root", and then we should avoid looking at its p arent. 385 // m_paintLayer may be the "root", and then we should avoid looking at its p arent.
348 DeprecatedPaintLayer* parentLayer = m_paintLayer.parent(); 386 DeprecatedPaintLayer* parentLayer = m_paintLayer.parent();
349 387
350 ClipRect ancestorBackgroundClipRect; 388 ClipRect ancestorBackgroundClipRect;
351 if (parentLayer) { 389 if (parentLayer) {
352 // Calculate the clip rectangle that the ancestors establish. 390 // Calculate the clip rectangle that the ancestors establish.
353 ClipRectsContext clipRectsContext(paintingInfo.rootLayer, (paintFlags & PaintLayerUncachedClipRects) ? UncachedClipRects : PaintingClipRects, IgnoreOver layScrollbarSize); 391 ClipRectsContext clipRectsContext(paintingInfo.rootLayer, (paintFlags & PaintLayerUncachedClipRects) ? UncachedClipRects : PaintingClipRects, IgnoreOver layScrollbarSize);
354 if (shouldRespectOverflowClip(paintFlags, m_paintLayer.layoutObject()) = = IgnoreOverflowClip) 392 if (shouldRespectOverflowClip(paintFlags, m_paintLayer.layoutObject()) = = IgnoreOverflowClip)
(...skipping 18 matching lines...) Expand all
373 // We don't need to collect any fragments in the regular way here. We ha ve already 411 // We don't need to collect any fragments in the regular way here. We ha ve already
374 // calculated a clip rectangle for the ancestry if it was needed, and cl ipping this 412 // calculated a clip rectangle for the ancestry if it was needed, and cl ipping this
375 // layer is something that can be done further down the path, when the t ransform has 413 // layer is something that can be done further down the path, when the t ransform has
376 // been applied. 414 // been applied.
377 DeprecatedPaintLayerFragment fragment; 415 DeprecatedPaintLayerFragment fragment;
378 fragment.backgroundRect = paintingInfo.paintDirtyRect; 416 fragment.backgroundRect = paintingInfo.paintDirtyRect;
379 fragments.append(fragment); 417 fragments.append(fragment);
380 } 418 }
381 419
382 bool needsScope = fragments.size() > 1; 420 bool needsScope = fragments.size() > 1;
421 PaintResult result = FullyPainted;
383 for (const auto& fragment : fragments) { 422 for (const auto& fragment : fragments) {
384 Optional<ScopeRecorder> scopeRecorder; 423 Optional<ScopeRecorder> scopeRecorder;
385 if (needsScope) 424 if (needsScope)
386 scopeRecorder.emplace(*context); 425 scopeRecorder.emplace(*context);
387 Optional<LayerClipRecorder> clipRecorder; 426 Optional<LayerClipRecorder> clipRecorder;
388 if (parentLayer) { 427 if (parentLayer) {
389 ClipRect clipRectForFragment(ancestorBackgroundClipRect); 428 ClipRect clipRectForFragment(ancestorBackgroundClipRect);
390 clipRectForFragment.moveBy(fragment.paginationOffset); 429 clipRectForFragment.moveBy(fragment.paginationOffset);
391 clipRectForFragment.intersect(fragment.backgroundRect); 430 clipRectForFragment.intersect(fragment.backgroundRect);
392 if (clipRectForFragment.isEmpty()) 431 if (clipRectForFragment.isEmpty())
393 continue; 432 continue;
394 if (needsToClip(paintingInfo, clipRectForFragment)) { 433 if (needsToClip(paintingInfo, clipRectForFragment)) {
395 if (m_paintLayer.layoutObject()->style()->position() != StaticPo sition && clipRectForFragment.isClippedByClipCss()) 434 if (m_paintLayer.layoutObject()->style()->position() != StaticPo sition && clipRectForFragment.isClippedByClipCss())
396 UseCounter::count(m_paintLayer.layoutObject()->document(), U seCounter::ClipCssOfPositionedElement); 435 UseCounter::count(m_paintLayer.layoutObject()->document(), U seCounter::ClipCssOfPositionedElement);
397 clipRecorder.emplace(*context, *parentLayer->layoutObject(), Dis playItem::ClipLayerParent, clipRectForFragment, &paintingInfo, fragment.paginati onOffset, paintFlags); 436 clipRecorder.emplace(*context, *parentLayer->layoutObject(), Dis playItem::ClipLayerParent, clipRectForFragment, &paintingInfo, fragment.paginati onOffset, paintFlags);
398 } 437 }
399 } 438 }
400 439 if (paintFragmentByApplyingTransform(context, paintingInfo, paintFlags, fragment.paginationOffset) == MaybeNotFullyPainted)
401 paintFragmentByApplyingTransform(context, paintingInfo, paintFlags, frag ment.paginationOffset); 440 result = MaybeNotFullyPainted;
402 } 441 }
442 return result;
403 } 443 }
404 444
405 void DeprecatedPaintLayerPainter::paintFragmentByApplyingTransform(GraphicsConte xt* context, const DeprecatedPaintLayerPaintingInfo& paintingInfo, PaintLayerFla gs paintFlags, const LayoutPoint& fragmentTranslation) 445 DeprecatedPaintLayerPainter::PaintResult DeprecatedPaintLayerPainter::paintFragm entByApplyingTransform(GraphicsContext* context, const DeprecatedPaintLayerPaint ingInfo& paintingInfo, PaintLayerFlags paintFlags, const LayoutPoint& fragmentTr anslation)
406 { 446 {
407 // This involves subtracting out the position of the layer in our current co ordinate space, but preserving 447 // This involves subtracting out the position of the layer in our current co ordinate space, but preserving
408 // the accumulated error for sub-pixel layout. 448 // the accumulated error for sub-pixel layout.
409 LayoutPoint delta; 449 LayoutPoint delta;
410 m_paintLayer.convertToLayerCoords(paintingInfo.rootLayer, delta); 450 m_paintLayer.convertToLayerCoords(paintingInfo.rootLayer, delta);
411 delta.moveBy(fragmentTranslation); 451 delta.moveBy(fragmentTranslation);
412 TransformationMatrix transform(m_paintLayer.renderableTransform(paintingInfo .globalPaintFlags())); 452 TransformationMatrix transform(m_paintLayer.renderableTransform(paintingInfo .globalPaintFlags()));
413 IntPoint roundedDelta = roundedIntPoint(delta); 453 IntPoint roundedDelta = roundedIntPoint(delta);
414 transform.translateRight(roundedDelta.x(), roundedDelta.y()); 454 transform.translateRight(roundedDelta.x(), roundedDelta.y());
415 LayoutSize adjustedSubPixelAccumulation = paintingInfo.subPixelAccumulation + (delta - roundedDelta); 455 LayoutSize adjustedSubPixelAccumulation = paintingInfo.subPixelAccumulation + (delta - roundedDelta);
416 456
417 Transform3DRecorder transform3DRecorder(*context, *m_paintLayer.layoutObject (), DisplayItem::Transform3DElementTransform, transform); 457 Transform3DRecorder transform3DRecorder(*context, *m_paintLayer.layoutObject (), DisplayItem::Transform3DElementTransform, transform);
418 458
419 // Now do a paint with the root layer shifted to be us. 459 // Now do a paint with the root layer shifted to be us.
420 DeprecatedPaintLayerPaintingInfo transformedPaintingInfo(&m_paintLayer, Layo utRect(enclosingIntRect(transform.inverse().mapRect(paintingInfo.paintDirtyRect) )), paintingInfo.globalPaintFlags(), 460 DeprecatedPaintLayerPaintingInfo transformedPaintingInfo(&m_paintLayer, Layo utRect(enclosingIntRect(transform.inverse().mapRect(paintingInfo.paintDirtyRect) )), paintingInfo.globalPaintFlags(),
421 adjustedSubPixelAccumulation, paintingInfo.paintingRoot); 461 adjustedSubPixelAccumulation, paintingInfo.paintingRoot);
422 transformedPaintingInfo.ancestorHasClipPathClipping = paintingInfo.ancestorH asClipPathClipping; 462 transformedPaintingInfo.ancestorHasClipPathClipping = paintingInfo.ancestorH asClipPathClipping;
423 paintLayerContentsAndReflection(context, transformedPaintingInfo, paintFlags , ForceSingleFragment); 463 return paintLayerContentsAndReflection(context, transformedPaintingInfo, pai ntFlags, ForceSingleFragment);
424 } 464 }
425 465
426 void DeprecatedPaintLayerPainter::paintChildren(unsigned childrenToVisit, Graphi csContext* context, const DeprecatedPaintLayerPaintingInfo& paintingInfo, PaintL ayerFlags paintFlags) 466 DeprecatedPaintLayerPainter::PaintResult DeprecatedPaintLayerPainter::paintChild ren(unsigned childrenToVisit, GraphicsContext* context, const DeprecatedPaintLay erPaintingInfo& paintingInfo, PaintLayerFlags paintFlags)
427 { 467 {
468 PaintResult result = FullyPainted;
428 if (!m_paintLayer.hasSelfPaintingLayerDescendant()) 469 if (!m_paintLayer.hasSelfPaintingLayerDescendant())
429 return; 470 return result;
430 471
431 #if ENABLE(ASSERT) 472 #if ENABLE(ASSERT)
432 LayerListMutationDetector mutationChecker(m_paintLayer.stackingNode()); 473 LayerListMutationDetector mutationChecker(m_paintLayer.stackingNode());
433 #endif 474 #endif
434 475
435 IntSize scrollOffsetAccumulation = paintingInfo.scrollOffsetAccumulation; 476 IntSize scrollOffsetAccumulation = paintingInfo.scrollOffsetAccumulation;
436 if (m_paintLayer.layoutObject()->hasOverflowClip()) 477 if (m_paintLayer.layoutObject()->hasOverflowClip())
437 scrollOffsetAccumulation += m_paintLayer.layoutBox()->scrolledContentOff set(); 478 scrollOffsetAccumulation += m_paintLayer.layoutBox()->scrolledContentOff set();
438 479
439 DeprecatedPaintLayerStackingNodeIterator iterator(*m_paintLayer.stackingNode (), childrenToVisit); 480 DeprecatedPaintLayerStackingNodeIterator iterator(*m_paintLayer.stackingNode (), childrenToVisit);
440 while (DeprecatedPaintLayerStackingNode* child = iterator.next()) { 481 while (DeprecatedPaintLayerStackingNode* child = iterator.next()) {
441 DeprecatedPaintLayerPainter childPainter(*child->layer()); 482 DeprecatedPaintLayerPainter childPainter(*child->layer());
442 // If this Layer should paint into its own backing or a grouped backing, that will be done via CompositedDeprecatedPaintLayerMapping::paintContents() 483 // If this Layer should paint into its own backing or a grouped backing, that will be done via CompositedDeprecatedPaintLayerMapping::paintContents()
443 // and CompositedDeprecatedPaintLayerMapping::doPaintTask(). 484 // and CompositedDeprecatedPaintLayerMapping::doPaintTask().
444 if (!childPainter.shouldPaintLayerInSoftwareMode(paintingInfo.globalPain tFlags(), paintFlags)) 485 if (!childPainter.shouldPaintLayerInSoftwareMode(paintingInfo.globalPain tFlags(), paintFlags))
445 continue; 486 continue;
446 487
447 DeprecatedPaintLayerPaintingInfo childPaintingInfo = paintingInfo; 488 DeprecatedPaintLayerPaintingInfo childPaintingInfo = paintingInfo;
448 childPaintingInfo.scrollOffsetAccumulation = scrollOffsetAccumulation; 489 childPaintingInfo.scrollOffsetAccumulation = scrollOffsetAccumulation;
449 // Rare case: accumulate scroll offset of non-stacking-context ancestors up to m_paintLayer. 490 // Rare case: accumulate scroll offset of non-stacking-context ancestors up to m_paintLayer.
450 for (DeprecatedPaintLayer* parentLayer = child->layer()->parent(); paren tLayer != &m_paintLayer; parentLayer = parentLayer->parent()) { 491 for (DeprecatedPaintLayer* parentLayer = child->layer()->parent(); paren tLayer != &m_paintLayer; parentLayer = parentLayer->parent()) {
451 if (parentLayer->layoutObject()->hasOverflowClip()) 492 if (parentLayer->layoutObject()->hasOverflowClip())
452 childPaintingInfo.scrollOffsetAccumulation += parentLayer->layou tBox()->scrolledContentOffset(); 493 childPaintingInfo.scrollOffsetAccumulation += parentLayer->layou tBox()->scrolledContentOffset();
453 } 494 }
454 495
455 childPainter.paintLayer(context, childPaintingInfo, paintFlags); 496 if (childPainter.paintLayer(context, childPaintingInfo, paintFlags) == M aybeNotFullyPainted)
497 result = MaybeNotFullyPainted;
456 } 498 }
499 return result;
457 } 500 }
458 501
459 // FIXME: inline this. 502 // FIXME: inline this.
460 static bool paintForFixedRootBackground(const DeprecatedPaintLayer* layer, Paint LayerFlags paintFlags) 503 static bool paintForFixedRootBackground(const DeprecatedPaintLayer* layer, Paint LayerFlags paintFlags)
461 { 504 {
462 return layer->layoutObject()->isDocumentElement() && (paintFlags & PaintLaye rPaintingRootBackgroundOnly); 505 return layer->layoutObject()->isDocumentElement() && (paintFlags & PaintLaye rPaintingRootBackgroundOnly);
463 } 506 }
464 507
465 bool DeprecatedPaintLayerPainter::shouldPaintLayerInSoftwareMode(const GlobalPai ntFlags globalPaintFlags, PaintLayerFlags paintFlags) 508 bool DeprecatedPaintLayerPainter::shouldPaintLayerInSoftwareMode(const GlobalPai ntFlags globalPaintFlags, PaintLayerFlags paintFlags)
466 { 509 {
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 if (!m_paintLayer.containsDirtyOverlayScrollbars()) 664 if (!m_paintLayer.containsDirtyOverlayScrollbars())
622 return; 665 return;
623 666
624 DeprecatedPaintLayerPaintingInfo paintingInfo(&m_paintLayer, LayoutRect(encl osingIntRect(damageRect)), paintFlags, LayoutSize(), paintingRoot); 667 DeprecatedPaintLayerPaintingInfo paintingInfo(&m_paintLayer, LayoutRect(encl osingIntRect(damageRect)), paintFlags, LayoutSize(), paintingRoot);
625 paintLayer(context, paintingInfo, PaintLayerPaintingOverlayScrollbars); 668 paintLayer(context, paintingInfo, PaintLayerPaintingOverlayScrollbars);
626 669
627 m_paintLayer.setContainsDirtyOverlayScrollbars(false); 670 m_paintLayer.setContainsDirtyOverlayScrollbars(false);
628 } 671 }
629 672
630 } // namespace blink 673 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/paint/DeprecatedPaintLayerPainter.h ('k') | Source/core/paint/DeprecatedPaintLayerPainterTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698