| 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/LocalFrame.h" | 7 #include "core/frame/FrameView.h" |
| 8 #include "core/layout/LayoutView.h" | 8 #include "core/layout/LayoutView.h" |
| 9 #include "core/paint/ClipPathClipper.h" | 9 #include "core/paint/ClipPathClipper.h" |
| 10 #include "core/paint/FilterPainter.h" | 10 #include "core/paint/FilterPainter.h" |
| 11 #include "core/paint/LayerClipRecorder.h" | 11 #include "core/paint/LayerClipRecorder.h" |
| 12 #include "core/paint/LayoutObjectDrawingRecorder.h" | 12 #include "core/paint/LayoutObjectDrawingRecorder.h" |
| 13 #include "core/paint/ObjectPaintProperties.h" | 13 #include "core/paint/ObjectPaintProperties.h" |
| 14 #include "core/paint/PaintInfo.h" | 14 #include "core/paint/PaintInfo.h" |
| 15 #include "core/paint/PaintLayer.h" | 15 #include "core/paint/PaintLayer.h" |
| 16 #include "core/paint/ScrollRecorder.h" | 16 #include "core/paint/ScrollRecorder.h" |
| 17 #include "core/paint/ScrollableAreaPainter.h" | 17 #include "core/paint/ScrollableAreaPainter.h" |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 return true; | 98 return true; |
| 99 } | 99 } |
| 100 } | 100 } |
| 101 return false; | 101 return false; |
| 102 } | 102 } |
| 103 | 103 |
| 104 PaintResult PaintLayerPainter::Paint( | 104 PaintResult PaintLayerPainter::Paint( |
| 105 GraphicsContext& context, | 105 GraphicsContext& context, |
| 106 const PaintLayerPaintingInfo& painting_info, | 106 const PaintLayerPaintingInfo& painting_info, |
| 107 PaintLayerFlags paint_flags) { | 107 PaintLayerFlags paint_flags) { |
| 108 if (paint_layer_.GetLayoutObject().GetFrameView()->ShouldThrottleRendering()) |
| 109 return kFullyPainted; |
| 110 |
| 108 // https://code.google.com/p/chromium/issues/detail?id=343772 | 111 // https://code.google.com/p/chromium/issues/detail?id=343772 |
| 109 DisableCompositingQueryAsserts disabler; | 112 DisableCompositingQueryAsserts disabler; |
| 110 | 113 |
| 111 if (paint_layer_.GetCompositingState() != kNotComposited) { | 114 if (paint_layer_.GetCompositingState() != kNotComposited) { |
| 112 if (painting_info.GetGlobalPaintFlags() & | 115 if (painting_info.GetGlobalPaintFlags() & |
| 113 kGlobalPaintFlattenCompositingLayers) { | 116 kGlobalPaintFlattenCompositingLayers) { |
| 114 // FIXME: ok, but what about GlobalPaintFlattenCompositingLayers? That's | 117 // FIXME: ok, but what about GlobalPaintFlattenCompositingLayers? That's |
| 115 // for printing and drag-image. | 118 // for printing and drag-image. |
| 116 // FIXME: why isn't the code here global, as opposed to being set on each | 119 // FIXME: why isn't the code here global, as opposed to being set on each |
| 117 // paint() call? | 120 // paint() call? |
| 118 paint_flags |= kPaintLayerUncachedClipRects; | 121 paint_flags |= kPaintLayerUncachedClipRects; |
| 119 } | 122 } |
| 120 } | 123 } |
| 121 | 124 |
| 122 // Non self-painting layers without self-painting descendants don't need to be | 125 // Non self-painting layers without self-painting descendants don't need to be |
| 123 // painted as their layoutObject() should properly paint itself. | 126 // painted as their layoutObject() should properly paint itself. |
| 124 if (!paint_layer_.IsSelfPaintingLayer() && | 127 if (!paint_layer_.IsSelfPaintingLayer() && |
| 125 !paint_layer_.HasSelfPaintingLayerDescendant()) | 128 !paint_layer_.HasSelfPaintingLayerDescendant()) |
| 126 return kFullyPainted; | 129 return kFullyPainted; |
| 127 | 130 |
| 128 if (ShouldSuppressPaintingLayer(paint_layer_)) | 131 if (ShouldSuppressPaintingLayer(paint_layer_)) |
| 129 return kFullyPainted; | 132 return kFullyPainted; |
| 130 | 133 |
| 131 if (paint_layer_.GetLayoutObject().View()->GetFrame() && | |
| 132 paint_layer_.GetLayoutObject() | |
| 133 .View() | |
| 134 ->GetFrame() | |
| 135 ->ShouldThrottleRendering()) | |
| 136 return kFullyPainted; | |
| 137 | |
| 138 // If this layer is totally invisible then there is nothing to paint. In SPv2 | 134 // If this layer is totally invisible then there is nothing to paint. In SPv2 |
| 139 // we simplify this optimization by painting even when effectively invisible | 135 // we simplify this optimization by painting even when effectively invisible |
| 140 // but skipping the painted content during layerization in | 136 // but skipping the painted content during layerization in |
| 141 // PaintArtifactCompositor. | 137 // PaintArtifactCompositor. |
| 142 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled() && | 138 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled() && |
| 143 PaintedOutputInvisible(painting_info)) { | 139 PaintedOutputInvisible(painting_info)) { |
| 144 return kFullyPainted; | 140 return kFullyPainted; |
| 145 } | 141 } |
| 146 | 142 |
| 147 if (paint_layer_.PaintsWithTransparency(painting_info.GetGlobalPaintFlags())) | 143 if (paint_layer_.PaintsWithTransparency(painting_info.GetGlobalPaintFlags())) |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 painting_info.scroll_offset_accumulation); | 261 painting_info.scroll_offset_accumulation); |
| 266 | 262 |
| 267 return needs_repaint; | 263 return needs_repaint; |
| 268 } | 264 } |
| 269 | 265 |
| 270 PaintResult PaintLayerPainter::PaintLayerContents( | 266 PaintResult PaintLayerPainter::PaintLayerContents( |
| 271 GraphicsContext& context, | 267 GraphicsContext& context, |
| 272 const PaintLayerPaintingInfo& painting_info_arg, | 268 const PaintLayerPaintingInfo& painting_info_arg, |
| 273 PaintLayerFlags paint_flags, | 269 PaintLayerFlags paint_flags, |
| 274 FragmentPolicy fragment_policy) { | 270 FragmentPolicy fragment_policy) { |
| 271 PaintResult result = kFullyPainted; |
| 272 |
| 273 if (paint_layer_.GetLayoutObject().GetFrameView()->ShouldThrottleRendering()) |
| 274 return result; |
| 275 |
| 275 Optional<ScopedPaintChunkProperties> scoped_paint_chunk_properties; | 276 Optional<ScopedPaintChunkProperties> scoped_paint_chunk_properties; |
| 276 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled() && | 277 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled() && |
| 277 RuntimeEnabledFeatures::rootLayerScrollingEnabled() && | 278 RuntimeEnabledFeatures::rootLayerScrollingEnabled() && |
| 278 paint_layer_.GetLayoutObject().IsLayoutView()) { | 279 paint_layer_.GetLayoutObject().IsLayoutView()) { |
| 279 const auto* local_border_box_properties = | 280 const auto* local_border_box_properties = |
| 280 paint_layer_.GetLayoutObject().LocalBorderBoxProperties(); | 281 paint_layer_.GetLayoutObject().LocalBorderBoxProperties(); |
| 281 DCHECK(local_border_box_properties); | 282 DCHECK(local_border_box_properties); |
| 282 PaintChunkProperties properties( | 283 PaintChunkProperties properties( |
| 283 context.GetPaintController().CurrentPaintChunkProperties()); | 284 context.GetPaintController().CurrentPaintChunkProperties()); |
| 284 properties.property_tree_state = *local_border_box_properties; | 285 properties.property_tree_state = *local_border_box_properties; |
| (...skipping 21 matching lines...) Expand all Loading... |
| 306 bool is_painting_overflow_contents = | 307 bool is_painting_overflow_contents = |
| 307 paint_flags & kPaintLayerPaintingOverflowContents; | 308 paint_flags & kPaintLayerPaintingOverflowContents; |
| 308 // Outline always needs to be painted even if we have no visible content. | 309 // Outline always needs to be painted even if we have no visible content. |
| 309 // It is painted as part of the decoration phase which paints content that | 310 // It is painted as part of the decoration phase which paints content that |
| 310 // is not scrolled and should be above scrolled content. | 311 // is not scrolled and should be above scrolled content. |
| 311 bool should_paint_self_outline = | 312 bool should_paint_self_outline = |
| 312 is_self_painting_layer && !is_painting_overlay_scrollbars && | 313 is_self_painting_layer && !is_painting_overlay_scrollbars && |
| 313 (is_painting_composited_decoration || !is_painting_scrolling_content) && | 314 (is_painting_composited_decoration || !is_painting_scrolling_content) && |
| 314 paint_layer_.GetLayoutObject().StyleRef().HasOutline(); | 315 paint_layer_.GetLayoutObject().StyleRef().HasOutline(); |
| 315 | 316 |
| 316 PaintResult result = kFullyPainted; | |
| 317 | |
| 318 if (paint_flags & kPaintLayerPaintingRootBackgroundOnly && | 317 if (paint_flags & kPaintLayerPaintingRootBackgroundOnly && |
| 319 !paint_layer_.GetLayoutObject().IsLayoutView()) | 318 !paint_layer_.GetLayoutObject().IsLayoutView()) |
| 320 return result; | 319 return result; |
| 321 | 320 |
| 322 if (paint_layer_.GetLayoutObject().View()->GetFrame() && | |
| 323 paint_layer_.GetLayoutObject() | |
| 324 .View() | |
| 325 ->GetFrame() | |
| 326 ->ShouldThrottleRendering()) | |
| 327 return result; | |
| 328 | |
| 329 // Ensure our lists are up to date. | 321 // Ensure our lists are up to date. |
| 330 paint_layer_.StackingNode()->UpdateLayerListsIfNeeded(); | 322 paint_layer_.StackingNode()->UpdateLayerListsIfNeeded(); |
| 331 | 323 |
| 332 LayoutSize subpixel_accumulation = | 324 LayoutSize subpixel_accumulation = |
| 333 paint_layer_.GetCompositingState() == kPaintsIntoOwnBacking | 325 paint_layer_.GetCompositingState() == kPaintsIntoOwnBacking |
| 334 ? paint_layer_.SubpixelAccumulation() | 326 ? paint_layer_.SubpixelAccumulation() |
| 335 : painting_info_arg.sub_pixel_accumulation; | 327 : painting_info_arg.sub_pixel_accumulation; |
| 336 ShouldRespectOverflowClipType respect_overflow_clip = | 328 ShouldRespectOverflowClipType respect_overflow_clip = |
| 337 ShouldRespectOverflowClip(paint_flags, paint_layer_.GetLayoutObject()); | 329 ShouldRespectOverflowClip(paint_flags, paint_layer_.GetLayoutObject()); |
| 338 | 330 |
| (...skipping 923 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1262 context, layout_object, kPaintPhaseClippingMask)) | 1254 context, layout_object, kPaintPhaseClippingMask)) |
| 1263 return; | 1255 return; |
| 1264 | 1256 |
| 1265 IntRect snapped_clip_rect = PixelSnappedIntRect(clip_rect.Rect()); | 1257 IntRect snapped_clip_rect = PixelSnappedIntRect(clip_rect.Rect()); |
| 1266 LayoutObjectDrawingRecorder drawing_recorder( | 1258 LayoutObjectDrawingRecorder drawing_recorder( |
| 1267 context, layout_object, kPaintPhaseClippingMask, snapped_clip_rect); | 1259 context, layout_object, kPaintPhaseClippingMask, snapped_clip_rect); |
| 1268 context.FillRect(snapped_clip_rect, Color::kBlack); | 1260 context.FillRect(snapped_clip_rect, Color::kBlack); |
| 1269 } | 1261 } |
| 1270 | 1262 |
| 1271 } // namespace blink | 1263 } // namespace blink |
| OLD | NEW |