OLD | NEW |
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 "core/paint/PaintLayerPainter.h" | 5 #include "core/paint/PaintLayerPainter.h" |
6 | 6 |
7 #include "core/frame/FrameView.h" | 7 #include "core/frame/FrameView.h" |
8 #include "core/frame/Settings.h" | 8 #include "core/frame/Settings.h" |
9 #include "core/layout/LayoutBlock.h" | 9 #include "core/layout/LayoutBlock.h" |
10 #include "core/layout/LayoutView.h" | 10 #include "core/layout/LayoutView.h" |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 | 228 |
229 static bool shouldRepaintSubsequence(PaintLayer& paintLayer, const PaintLayerPai
ntingInfo& paintingInfo, ShouldRespectOverflowClipType respectOverflowClip, cons
t LayoutSize& subpixelAccumulation) | 229 static bool shouldRepaintSubsequence(PaintLayer& paintLayer, const PaintLayerPai
ntingInfo& paintingInfo, ShouldRespectOverflowClipType respectOverflowClip, cons
t LayoutSize& subpixelAccumulation) |
230 { | 230 { |
231 bool needsRepaint = false; | 231 bool needsRepaint = false; |
232 | 232 |
233 // Repaint subsequence if the layer is marked for needing repaint. | 233 // Repaint subsequence if the layer is marked for needing repaint. |
234 if (paintLayer.needsRepaint()) | 234 if (paintLayer.needsRepaint()) |
235 needsRepaint = true; | 235 needsRepaint = true; |
236 | 236 |
237 // Repaint if layer's clip changes. | 237 // Repaint if layer's clip changes. |
238 ClipRects& clipRects = paintLayer.clipper().paintingClipRects(paintingInfo.r
ootLayer, respectOverflowClip, subpixelAccumulation); | 238 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
239 ClipRects* previousClipRects = paintLayer.previousPaintingClipRects(); | 239 ClipRects& clipRects = paintLayer.clipper().paintingClipRects(paintingIn
fo.rootLayer, respectOverflowClip, subpixelAccumulation); |
240 if (!needsRepaint && &clipRects != previousClipRects && (!previousClipRects
|| clipRects != *previousClipRects)) | 240 ClipRects* previousClipRects = paintLayer.previousPaintingClipRects(); |
241 needsRepaint = true; | 241 if (!needsRepaint && &clipRects != previousClipRects && (!previousClipRe
cts || clipRects != *previousClipRects)) |
242 paintLayer.setPreviousPaintingClipRects(clipRects); | 242 needsRepaint = true; |
| 243 paintLayer.setPreviousPaintingClipRects(clipRects); |
| 244 } |
243 | 245 |
244 // Repaint if previously the layer might be clipped by paintDirtyRect and pa
intDirtyRect changes. | 246 // Repaint if previously the layer might be clipped by paintDirtyRect and pa
intDirtyRect changes. |
245 if (!needsRepaint && paintLayer.previousPaintResult() == PaintLayerPainter::
MayBeClippedByPaintDirtyRect && paintLayer.previousPaintDirtyRect() != paintingI
nfo.paintDirtyRect) | 247 if (!needsRepaint && paintLayer.previousPaintResult() == PaintLayerPainter::
MayBeClippedByPaintDirtyRect && paintLayer.previousPaintDirtyRect() != paintingI
nfo.paintDirtyRect) |
246 needsRepaint = true; | 248 needsRepaint = true; |
247 paintLayer.setPreviousPaintDirtyRect(paintingInfo.paintDirtyRect); | 249 paintLayer.setPreviousPaintDirtyRect(paintingInfo.paintDirtyRect); |
248 | 250 |
249 // Repaint if scroll offset accumulation changes. | 251 // Repaint if scroll offset accumulation changes. |
250 if (!needsRepaint && paintingInfo.scrollOffsetAccumulation != paintLayer.pre
viousScrollOffsetAccumulationForPainting()) | 252 if (!needsRepaint && paintingInfo.scrollOffsetAccumulation != paintLayer.pre
viousScrollOffsetAccumulationForPainting()) |
251 needsRepaint = true; | 253 needsRepaint = true; |
252 paintLayer.setPreviousScrollOffsetAccumulationForPainting(paintingInfo.scrol
lOffsetAccumulation); | 254 paintLayer.setPreviousScrollOffsetAccumulationForPainting(paintingInfo.scrol
lOffsetAccumulation); |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 if (shouldPaintContent || shouldPaintSelfOutline || isPaintingOverlayScrollb
ars) { | 340 if (shouldPaintContent || shouldPaintSelfOutline || isPaintingOverlayScrollb
ars) { |
339 // Collect the fragments. This will compute the clip rectangles and pain
t offsets for each layer fragment. | 341 // Collect the fragments. This will compute the clip rectangles and pain
t offsets for each layer fragment. |
340 ClipRectsCacheSlot cacheSlot = (paintFlags & PaintLayerUncachedClipRects
) ? UncachedClipRects : PaintingClipRects; | 342 ClipRectsCacheSlot cacheSlot = (paintFlags & PaintLayerUncachedClipRects
) ? UncachedClipRects : PaintingClipRects; |
341 // TODO(trchen): We haven't decided how to handle visual fragmentation w
ith SPv2. | 343 // TODO(trchen): We haven't decided how to handle visual fragmentation w
ith SPv2. |
342 // Related thread https://groups.google.com/a/chromium.org/forum/#!topic
/graphics-dev/81XuWFf-mxM | 344 // Related thread https://groups.google.com/a/chromium.org/forum/#!topic
/graphics-dev/81XuWFf-mxM |
343 if (fragmentPolicy == ForceSingleFragment || RuntimeEnabledFeatures::sli
mmingPaintV2Enabled()) | 345 if (fragmentPolicy == ForceSingleFragment || RuntimeEnabledFeatures::sli
mmingPaintV2Enabled()) |
344 m_paintLayer.appendSingleFragmentIgnoringPagination(layerFragments,
localPaintingInfo.rootLayer, localPaintingInfo.paintDirtyRect, cacheSlot, Ignore
OverlayScrollbarSize, respectOverflowClip, &offsetFromRoot, localPaintingInfo.su
bPixelAccumulation); | 346 m_paintLayer.appendSingleFragmentIgnoringPagination(layerFragments,
localPaintingInfo.rootLayer, localPaintingInfo.paintDirtyRect, cacheSlot, Ignore
OverlayScrollbarSize, respectOverflowClip, &offsetFromRoot, localPaintingInfo.su
bPixelAccumulation); |
345 else | 347 else |
346 m_paintLayer.collectFragments(layerFragments, localPaintingInfo.root
Layer, localPaintingInfo.paintDirtyRect, cacheSlot, IgnoreOverlayScrollbarSize,
respectOverflowClip, &offsetFromRoot, localPaintingInfo.subPixelAccumulation); | 348 m_paintLayer.collectFragments(layerFragments, localPaintingInfo.root
Layer, localPaintingInfo.paintDirtyRect, cacheSlot, IgnoreOverlayScrollbarSize,
respectOverflowClip, &offsetFromRoot, localPaintingInfo.subPixelAccumulation); |
347 | 349 |
348 // TODO(trchen): Needs to adjust cull rect between transform spaces. htt
ps://crbug.com/593596 | |
349 // Disables layer culling for SPv2 for now because the space of the cull
rect doesn't match | |
350 // the space we paint in. Clipping will still be done by clip nodes, so
this won't cause | |
351 // rendering issues, only performance. | |
352 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | |
353 layerFragments[0].backgroundRect = LayoutRect(LayoutRect::infiniteIn
tRect()); | |
354 layerFragments[0].foregroundRect = LayoutRect(LayoutRect::infiniteIn
tRect()); | |
355 } | |
356 | |
357 if (shouldPaintContent) { | 350 if (shouldPaintContent) { |
358 // TODO(wangxianzhu): This is for old slow scrolling. Implement simi
lar optimization for slimming paint v2. | 351 // TODO(wangxianzhu): This is for old slow scrolling. Implement simi
lar optimization for slimming paint v2. |
359 shouldPaintContent = atLeastOneFragmentIntersectsDamageRect(layerFra
gments, localPaintingInfo, paintFlags, offsetFromRoot); | 352 shouldPaintContent = atLeastOneFragmentIntersectsDamageRect(layerFra
gments, localPaintingInfo, paintFlags, offsetFromRoot); |
360 if (!shouldPaintContent) | 353 if (!shouldPaintContent) |
361 result = MayBeClippedByPaintDirtyRect; | 354 result = MayBeClippedByPaintDirtyRect; |
362 } | 355 } |
363 } | 356 } |
364 | 357 |
365 bool selectionOnly = localPaintingInfo.getGlobalPaintFlags() & GlobalPaintSe
lectionOnly; | 358 bool selectionOnly = localPaintingInfo.getGlobalPaintFlags() & GlobalPaintSe
lectionOnly; |
366 | 359 |
(...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
816 if (!m_paintLayer.containsDirtyOverlayScrollbars()) | 809 if (!m_paintLayer.containsDirtyOverlayScrollbars()) |
817 return; | 810 return; |
818 | 811 |
819 PaintLayerPaintingInfo paintingInfo(&m_paintLayer, LayoutRect(enclosingIntRe
ct(damageRect)), paintFlags, LayoutSize()); | 812 PaintLayerPaintingInfo paintingInfo(&m_paintLayer, LayoutRect(enclosingIntRe
ct(damageRect)), paintFlags, LayoutSize()); |
820 paintLayer(context, paintingInfo, PaintLayerPaintingOverlayScrollbars); | 813 paintLayer(context, paintingInfo, PaintLayerPaintingOverlayScrollbars); |
821 | 814 |
822 m_paintLayer.setContainsDirtyOverlayScrollbars(false); | 815 m_paintLayer.setContainsDirtyOverlayScrollbars(false); |
823 } | 816 } |
824 | 817 |
825 } // namespace blink | 818 } // namespace blink |
OLD | NEW |