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 "config.h" | 5 #include "config.h" |
6 #include "core/paint/PaintLayerPainter.h" | 6 #include "core/paint/PaintLayerPainter.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 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
214 return result; | 214 return result; |
215 | 215 |
216 // TODO(skyostil): Unify this early-out logic with subsequence caching. | 216 // TODO(skyostil): Unify this early-out logic with subsequence caching. |
217 if (m_paintLayer.layoutObject()->isLayoutPart() && toLayoutPart(m_paintLayer
.layoutObject())->isThrottledFrameView()) | 217 if (m_paintLayer.layoutObject()->isLayoutPart() && toLayoutPart(m_paintLayer
.layoutObject())->isThrottledFrameView()) |
218 return FullyPainted; | 218 return FullyPainted; |
219 | 219 |
220 // Ensure our lists are up-to-date. | 220 // Ensure our lists are up-to-date. |
221 m_paintLayer.stackingNode()->updateLayerListsIfNeeded(); | 221 m_paintLayer.stackingNode()->updateLayerListsIfNeeded(); |
222 | 222 |
223 Optional<SubsequenceRecorder> subsequenceRecorder; | 223 Optional<SubsequenceRecorder> subsequenceRecorder; |
224 if (!paintingInfoArg.disableSubsequenceCache | 224 if (!context->printing() |
225 && !context->printing() | |
226 && !(paintingInfoArg.globalPaintFlags() & GlobalPaintFlattenCompositingL
ayers) | 225 && !(paintingInfoArg.globalPaintFlags() & GlobalPaintFlattenCompositingL
ayers) |
227 && !(paintFlags & (PaintLayerPaintingReflection | PaintLayerPaintingRoot
BackgroundOnly | PaintLayerPaintingOverlayScrollbars)) | 226 && !(paintFlags & (PaintLayerPaintingReflection | PaintLayerPaintingRoot
BackgroundOnly | PaintLayerPaintingOverlayScrollbars)) |
228 && m_paintLayer.stackingNode()->isStackingContext() | 227 && m_paintLayer.stackingNode()->isStackingContext() |
229 && PaintLayerStackingNodeIterator(*m_paintLayer.stackingNode(), AllChild
ren).next()) { | 228 && PaintLayerStackingNodeIterator(*m_paintLayer.stackingNode(), AllChild
ren).next()) { |
230 if (!m_paintLayer.needsRepaint() | 229 if (!m_paintLayer.needsRepaint() |
231 && paintingInfoArg.scrollOffsetAccumulation == m_paintLayer.previous
ScrollOffsetAccumulationForPainting() | 230 && paintingInfoArg.scrollOffsetAccumulation == m_paintLayer.previous
ScrollOffsetAccumulationForPainting() |
232 && SubsequenceRecorder::useCachedSubsequenceIfPossible(*context, m_p
aintLayer)) | 231 && SubsequenceRecorder::useCachedSubsequenceIfPossible(*context, m_p
aintLayer)) |
233 return result; | 232 return result; |
234 subsequenceRecorder.emplace(*context, m_paintLayer); | 233 subsequenceRecorder.emplace(*context, m_paintLayer); |
235 } | 234 } |
236 | 235 |
237 PaintLayerPaintingInfo paintingInfo = paintingInfoArg; | 236 PaintLayerPaintingInfo paintingInfo = paintingInfoArg; |
238 | 237 |
239 // This is a workaround of ancestor clip change issue (crbug.com/533717). | |
240 // TODO(wangxianzhu): | |
241 // - spv1: This disables subsequence cache for all descendants of LayoutView
with root-layer-scrolls because | |
242 // LayoutView has overflow clip. Should find another workaround method wor
king with root-layer-scrolls | |
243 // if it ships before slimming paint v2. crbug.com/552030. | |
244 // - spv2: Ensure subsequence cache works with ancestor clip change. crbug.c
om/536138. | |
245 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled() && m_paintLayer.layout
Object()->hasClipOrOverflowClip()) | |
246 paintingInfo.disableSubsequenceCache = true; | |
247 | |
248 LayoutPoint offsetFromRoot; | 238 LayoutPoint offsetFromRoot; |
249 m_paintLayer.convertToLayerCoords(paintingInfo.rootLayer, offsetFromRoot); | 239 m_paintLayer.convertToLayerCoords(paintingInfo.rootLayer, offsetFromRoot); |
250 | 240 |
251 if (m_paintLayer.compositingState() == PaintsIntoOwnBacking) | 241 if (m_paintLayer.compositingState() == PaintsIntoOwnBacking) |
252 offsetFromRoot.move(m_paintLayer.subpixelAccumulation()); | 242 offsetFromRoot.move(m_paintLayer.subpixelAccumulation()); |
253 else | 243 else |
254 offsetFromRoot.move(paintingInfo.subPixelAccumulation); | 244 offsetFromRoot.move(paintingInfo.subPixelAccumulation); |
255 | 245 |
256 LayoutRect bounds = m_paintLayer.physicalBoundingBox(offsetFromRoot); | 246 LayoutRect bounds = m_paintLayer.physicalBoundingBox(offsetFromRoot); |
257 if (!paintingInfo.paintDirtyRect.contains(bounds)) | 247 if (!paintingInfo.paintDirtyRect.contains(bounds)) |
(...skipping 450 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
708 if (!m_paintLayer.containsDirtyOverlayScrollbars()) | 698 if (!m_paintLayer.containsDirtyOverlayScrollbars()) |
709 return; | 699 return; |
710 | 700 |
711 PaintLayerPaintingInfo paintingInfo(&m_paintLayer, LayoutRect(enclosingIntRe
ct(damageRect)), paintFlags, LayoutSize(), paintingRoot); | 701 PaintLayerPaintingInfo paintingInfo(&m_paintLayer, LayoutRect(enclosingIntRe
ct(damageRect)), paintFlags, LayoutSize(), paintingRoot); |
712 paintLayer(context, paintingInfo, PaintLayerPaintingOverlayScrollbars); | 702 paintLayer(context, paintingInfo, PaintLayerPaintingOverlayScrollbars); |
713 | 703 |
714 m_paintLayer.setContainsDirtyOverlayScrollbars(false); | 704 m_paintLayer.setContainsDirtyOverlayScrollbars(false); |
715 } | 705 } |
716 | 706 |
717 } // namespace blink | 707 } // namespace blink |
OLD | NEW |