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/LocalFrame.h" |
8 #include "core/layout/LayoutInline.h" | 8 #include "core/layout/LayoutInline.h" |
9 #include "core/layout/LayoutView.h" | 9 #include "core/layout/LayoutView.h" |
10 #include "core/paint/ClipPathClipper.h" | 10 #include "core/paint/ClipPathClipper.h" |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
96 return FullyPainted; | 96 return FullyPainted; |
97 | 97 |
98 // If this layer is totally invisible then there is nothing to paint. | 98 // If this layer is totally invisible then there is nothing to paint. |
99 if (!m_paintLayer.layoutObject()->opacity() && | 99 if (!m_paintLayer.layoutObject()->opacity() && |
100 !m_paintLayer.layoutObject()->hasBackdropFilter()) | 100 !m_paintLayer.layoutObject()->hasBackdropFilter()) |
101 return FullyPainted; | 101 return FullyPainted; |
102 | 102 |
103 if (m_paintLayer.paintsWithTransparency(paintingInfo.getGlobalPaintFlags())) | 103 if (m_paintLayer.paintsWithTransparency(paintingInfo.getGlobalPaintFlags())) |
104 paintFlags |= PaintLayerHaveTransparency; | 104 paintFlags |= PaintLayerHaveTransparency; |
105 | 105 |
106 // Transforms will be applied by property nodes directly for SPv2. | 106 if (m_paintLayer.paintsWithTransform(paintingInfo.getGlobalPaintFlags()) && |
chrishtr
2016/10/05 23:28:32
Need to call paintLayerWithTransform even for SPv2
| |
107 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled() && | |
108 m_paintLayer.paintsWithTransform(paintingInfo.getGlobalPaintFlags()) && | |
109 !(paintFlags & PaintLayerAppliedTransform)) | 107 !(paintFlags & PaintLayerAppliedTransform)) |
110 return paintLayerWithTransform(context, paintingInfo, paintFlags); | 108 return paintLayerWithTransform(context, paintingInfo, paintFlags); |
111 | 109 |
112 return paintLayerContentsCompositingAllPhases(context, paintingInfo, | 110 return paintLayerContentsCompositingAllPhases(context, paintingInfo, |
113 paintFlags); | 111 paintFlags); |
114 } | 112 } |
115 | 113 |
116 PaintLayerPainter::PaintResult | 114 PaintLayerPainter::PaintResult |
117 PaintLayerPainter::paintLayerContentsCompositingAllPhases( | 115 PaintLayerPainter::paintLayerContentsCompositingAllPhases( |
118 GraphicsContext& context, | 116 GraphicsContext& context, |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
187 | 185 |
188 // Repaint subsequence if the layer is marked for needing repaint. | 186 // Repaint subsequence if the layer is marked for needing repaint. |
189 // We don't set needsResetEmptyPaintPhase here, but clear the empty paint | 187 // We don't set needsResetEmptyPaintPhase here, but clear the empty paint |
190 // phase flags in PaintLayer::setNeedsPaintPhaseXXX(), to ensure that we won't | 188 // phase flags in PaintLayer::setNeedsPaintPhaseXXX(), to ensure that we won't |
191 // clear previousPaintPhaseXXXEmpty flags when unrelated things changed which | 189 // clear previousPaintPhaseXXXEmpty flags when unrelated things changed which |
192 // won't cause the paint phases to become non-empty. | 190 // won't cause the paint phases to become non-empty. |
193 if (paintLayer.needsRepaint()) | 191 if (paintLayer.needsRepaint()) |
194 needsRepaint = true; | 192 needsRepaint = true; |
195 | 193 |
196 // Repaint if layer's clip changes. | 194 // Repaint if layer's clip changes. |
197 ClipRects& clipRects = paintLayer.clipper().paintingClipRects( | 195 // TODO(chrishtr): implement detecting clipping changes in SPv2. crbug.com/645 667 |
198 paintingInfo.rootLayer, respectOverflowClip, subpixelAccumulation); | 196 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
199 ClipRects* previousClipRects = paintLayer.previousPaintingClipRects(); | 197 ClipRects& clipRects = paintLayer.clipper().paintingClipRects( |
200 if (&clipRects != previousClipRects && | 198 paintingInfo.rootLayer, respectOverflowClip, subpixelAccumulation); |
201 (!previousClipRects || clipRects != *previousClipRects)) { | 199 ClipRects* previousClipRects = paintLayer.previousPaintingClipRects(); |
202 needsRepaint = true; | 200 if (&clipRects != previousClipRects && |
203 shouldClearEmptyPaintPhaseFlags = true; | 201 (!previousClipRects || clipRects != *previousClipRects)) { |
202 needsRepaint = true; | |
203 shouldClearEmptyPaintPhaseFlags = true; | |
204 } | |
205 paintLayer.setPreviousPaintingClipRects(clipRects); | |
204 } | 206 } |
205 paintLayer.setPreviousPaintingClipRects(clipRects); | |
206 | 207 |
207 // Repaint if previously the layer might be clipped by paintDirtyRect and | 208 // Repaint if previously the layer might be clipped by paintDirtyRect and |
208 // paintDirtyRect changes. | 209 // paintDirtyRect changes. |
209 if (paintLayer.previousPaintResult() == | 210 if (paintLayer.previousPaintResult() == |
210 PaintLayerPainter::MayBeClippedByPaintDirtyRect && | 211 PaintLayerPainter::MayBeClippedByPaintDirtyRect && |
211 paintLayer.previousPaintDirtyRect() != paintingInfo.paintDirtyRect) { | 212 paintLayer.previousPaintDirtyRect() != paintingInfo.paintDirtyRect) { |
212 needsRepaint = true; | 213 needsRepaint = true; |
213 shouldClearEmptyPaintPhaseFlags = true; | 214 shouldClearEmptyPaintPhaseFlags = true; |
214 } | 215 } |
215 paintLayer.setPreviousPaintDirtyRect(paintingInfo.paintDirtyRect); | 216 paintLayer.setPreviousPaintDirtyRect(paintingInfo.paintDirtyRect); |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
389 localPaintingInfo.paintDirtyRect, cacheSlot, | 390 localPaintingInfo.paintDirtyRect, cacheSlot, |
390 IgnoreOverlayScrollbarSize, respectOverflowClip, &offsetFromRoot, | 391 IgnoreOverlayScrollbarSize, respectOverflowClip, &offsetFromRoot, |
391 localPaintingInfo.subPixelAccumulation); | 392 localPaintingInfo.subPixelAccumulation); |
392 else | 393 else |
393 m_paintLayer.collectFragments(layerFragments, localPaintingInfo.rootLayer, | 394 m_paintLayer.collectFragments(layerFragments, localPaintingInfo.rootLayer, |
394 localPaintingInfo.paintDirtyRect, cacheSlot, | 395 localPaintingInfo.paintDirtyRect, cacheSlot, |
395 IgnoreOverlayScrollbarSize, | 396 IgnoreOverlayScrollbarSize, |
396 respectOverflowClip, &offsetFromRoot, | 397 respectOverflowClip, &offsetFromRoot, |
397 localPaintingInfo.subPixelAccumulation); | 398 localPaintingInfo.subPixelAccumulation); |
398 | 399 |
399 // TODO(trchen): Needs to adjust cull rect between transform spaces. | |
400 // https://crbug.com/593596 | |
401 // Disables layer culling for SPv2 for now because the space of the cull | |
402 // rect doesn't match the space we paint in. Clipping will still be done by | |
403 // clip nodes, so this won't cause rendering issues, only performance. | |
404 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | |
405 layerFragments[0].backgroundRect = | |
406 LayoutRect(LayoutRect::infiniteIntRect()); | |
407 layerFragments[0].foregroundRect = | |
408 LayoutRect(LayoutRect::infiniteIntRect()); | |
409 } | |
410 | |
411 if (shouldPaintContent) { | 400 if (shouldPaintContent) { |
412 // TODO(wangxianzhu): This is for old slow scrolling. Implement similar | 401 // TODO(wangxianzhu): This is for old slow scrolling. Implement similar |
413 // optimization for slimming paint v2. | 402 // optimization for slimming paint v2. |
414 shouldPaintContent = atLeastOneFragmentIntersectsDamageRect( | 403 shouldPaintContent = atLeastOneFragmentIntersectsDamageRect( |
415 layerFragments, localPaintingInfo, paintFlags, offsetFromRoot); | 404 layerFragments, localPaintingInfo, paintFlags, offsetFromRoot); |
416 if (!shouldPaintContent) | 405 if (!shouldPaintContent) |
417 result = MayBeClippedByPaintDirtyRect; | 406 result = MayBeClippedByPaintDirtyRect; |
418 } | 407 } |
419 } | 408 } |
420 | 409 |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
557 newOffsetFromRoot)) | 546 newOffsetFromRoot)) |
558 return true; | 547 return true; |
559 } | 548 } |
560 return false; | 549 return false; |
561 } | 550 } |
562 | 551 |
563 PaintLayerPainter::PaintResult PaintLayerPainter::paintLayerWithTransform( | 552 PaintLayerPainter::PaintResult PaintLayerPainter::paintLayerWithTransform( |
564 GraphicsContext& context, | 553 GraphicsContext& context, |
565 const PaintLayerPaintingInfo& paintingInfo, | 554 const PaintLayerPaintingInfo& paintingInfo, |
566 PaintLayerFlags paintFlags) { | 555 PaintLayerFlags paintFlags) { |
567 // Transforms will be applied by property nodes directly for SPv2. | |
568 ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled()); | |
569 | |
570 TransformationMatrix layerTransform = | 556 TransformationMatrix layerTransform = |
571 m_paintLayer.renderableTransform(paintingInfo.getGlobalPaintFlags()); | 557 m_paintLayer.renderableTransform(paintingInfo.getGlobalPaintFlags()); |
572 // If the transform can't be inverted, then don't paint anything. | 558 // If the transform can't be inverted, then don't paint anything. |
573 if (!layerTransform.isInvertible()) | 559 if (!layerTransform.isInvertible()) |
574 return FullyPainted; | 560 return FullyPainted; |
575 | 561 |
576 // FIXME: We should make sure that we don't walk past paintingInfo.rootLayer | 562 // FIXME: We should make sure that we don't walk past paintingInfo.rootLayer |
577 // here. m_paintLayer may be the "root", and then we should avoid looking at | 563 // here. m_paintLayer may be the "root", and then we should avoid looking at |
578 // its parent. | 564 // its parent. |
579 PaintLayer* parentLayer = m_paintLayer.parent(); | 565 PaintLayer* parentLayer = m_paintLayer.parent(); |
580 | 566 |
581 ClipRect ancestorBackgroundClipRect; | |
582 if (parentLayer) { | |
583 // Calculate the clip rectangle that the ancestors establish. | |
584 ClipRectsContext clipRectsContext(paintingInfo.rootLayer, | |
585 (paintFlags & PaintLayerUncachedClipRects) | |
586 ? UncachedClipRects | |
587 : PaintingClipRects, | |
588 IgnoreOverlayScrollbarSize); | |
589 if (shouldRespectOverflowClip(paintFlags, m_paintLayer.layoutObject()) == | |
590 IgnoreOverflowClip) | |
591 clipRectsContext.setIgnoreOverflowClip(); | |
592 ancestorBackgroundClipRect = | |
593 m_paintLayer.clipper().backgroundClipRect(clipRectsContext); | |
594 } | |
595 | |
596 LayoutObject* object = m_paintLayer.layoutObject(); | 567 LayoutObject* object = m_paintLayer.layoutObject(); |
597 LayoutView* view = object->view(); | 568 LayoutView* view = object->view(); |
598 bool isFixedPosObjectInPagedMedia = | 569 bool isFixedPosObjectInPagedMedia = |
599 object->style()->position() == FixedPosition && | 570 object->style()->position() == FixedPosition && |
600 object->container() == view && view->pageLogicalHeight(); | 571 object->container() == view && view->pageLogicalHeight(); |
601 PaintLayer* paginationLayer = m_paintLayer.enclosingPaginationLayer(); | 572 PaintLayer* paginationLayer = m_paintLayer.enclosingPaginationLayer(); |
602 PaintLayerFragments fragments; | 573 PaintLayerFragments fragments; |
603 // TODO(crbug.com/619094): Figure out the correct behaviour for fixed position | 574 // TODO(crbug.com/619094): Figure out the correct behaviour for fixed position |
604 // objects in paged media with vertical writing modes. | 575 // objects in paged media with vertical writing modes. |
605 if (isFixedPosObjectInPagedMedia && view->isHorizontalWritingMode()) { | 576 if (isFixedPosObjectInPagedMedia && view->isHorizontalWritingMode()) { |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
643 // path, when the transform has been applied. | 614 // path, when the transform has been applied. |
644 PaintLayerFragment fragment; | 615 PaintLayerFragment fragment; |
645 fragment.backgroundRect = paintingInfo.paintDirtyRect; | 616 fragment.backgroundRect = paintingInfo.paintDirtyRect; |
646 fragments.append(fragment); | 617 fragments.append(fragment); |
647 } | 618 } |
648 | 619 |
649 Optional<DisplayItemCacheSkipper> cacheSkipper; | 620 Optional<DisplayItemCacheSkipper> cacheSkipper; |
650 if (fragments.size() > 1) | 621 if (fragments.size() > 1) |
651 cacheSkipper.emplace(context); | 622 cacheSkipper.emplace(context); |
652 | 623 |
624 ClipRect ancestorBackgroundClipRect; | |
625 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | |
626 if (parentLayer) { | |
627 // Calculate the clip rectangle that the ancestors establish. | |
628 ClipRectsContext clipRectsContext( | |
629 paintingInfo.rootLayer, | |
630 (paintFlags & PaintLayerUncachedClipRects) ? UncachedClipRects | |
631 : PaintingClipRects, | |
632 IgnoreOverlayScrollbarSize); | |
633 if (shouldRespectOverflowClip(paintFlags, m_paintLayer.layoutObject()) == | |
634 IgnoreOverflowClip) | |
635 clipRectsContext.setIgnoreOverflowClip(); | |
636 ancestorBackgroundClipRect = | |
637 m_paintLayer.clipper().backgroundClipRect(clipRectsContext); | |
638 } | |
639 } | |
640 | |
653 PaintResult result = FullyPainted; | 641 PaintResult result = FullyPainted; |
654 for (const auto& fragment : fragments) { | 642 for (const auto& fragment : fragments) { |
655 Optional<LayerClipRecorder> clipRecorder; | 643 Optional<LayerClipRecorder> clipRecorder; |
656 if (parentLayer) { | 644 if (parentLayer && !RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
657 ClipRect clipRectForFragment(ancestorBackgroundClipRect); | 645 ClipRect clipRectForFragment(ancestorBackgroundClipRect); |
658 // A fixed-position object is repeated on every page, but if it is clipped | 646 // A fixed-position object is repeated on every page, but if it is clipped |
659 // by an ancestor layer then the repetitions are clipped out. | 647 // by an ancestor layer then the repetitions are clipped out. |
660 if (!isFixedPosObjectInPagedMedia) | 648 if (!isFixedPosObjectInPagedMedia) |
661 clipRectForFragment.moveBy(fragment.paginationOffset); | 649 clipRectForFragment.moveBy(fragment.paginationOffset); |
662 clipRectForFragment.intersect(fragment.backgroundRect); | 650 clipRectForFragment.intersect(fragment.backgroundRect); |
663 if (clipRectForFragment.isEmpty()) | 651 if (clipRectForFragment.isEmpty()) |
664 continue; | 652 continue; |
665 if (needsToClip(paintingInfo, clipRectForFragment)) { | 653 if (needsToClip(paintingInfo, clipRectForFragment)) { |
666 if (m_paintLayer.layoutObject()->isPositioned() && | 654 if (m_paintLayer.layoutObject()->isPositioned() && |
(...skipping 16 matching lines...) Expand all Loading... | |
683 } | 671 } |
684 return result; | 672 return result; |
685 } | 673 } |
686 | 674 |
687 PaintLayerPainter::PaintResult | 675 PaintLayerPainter::PaintResult |
688 PaintLayerPainter::paintFragmentByApplyingTransform( | 676 PaintLayerPainter::paintFragmentByApplyingTransform( |
689 GraphicsContext& context, | 677 GraphicsContext& context, |
690 const PaintLayerPaintingInfo& paintingInfo, | 678 const PaintLayerPaintingInfo& paintingInfo, |
691 PaintLayerFlags paintFlags, | 679 PaintLayerFlags paintFlags, |
692 const LayoutPoint& fragmentTranslation) { | 680 const LayoutPoint& fragmentTranslation) { |
693 // Transforms will be applied by property nodes directly for SPv2. | |
694 ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled()); | |
695 | |
696 // This involves subtracting out the position of the layer in our current | 681 // This involves subtracting out the position of the layer in our current |
697 // coordinate space, but preserving the accumulated error for sub-pixel | 682 // coordinate space, but preserving the accumulated error for sub-pixel |
698 // layout. | 683 // layout. |
699 LayoutPoint delta; | 684 LayoutPoint delta; |
700 m_paintLayer.convertToLayerCoords(paintingInfo.rootLayer, delta); | 685 m_paintLayer.convertToLayerCoords(paintingInfo.rootLayer, delta); |
701 delta.moveBy(fragmentTranslation); | 686 delta.moveBy(fragmentTranslation); |
702 TransformationMatrix transform( | 687 TransformationMatrix transform( |
703 m_paintLayer.renderableTransform(paintingInfo.getGlobalPaintFlags())); | 688 m_paintLayer.renderableTransform(paintingInfo.getGlobalPaintFlags())); |
704 IntPoint roundedDelta = roundedIntPoint(delta); | 689 IntPoint roundedDelta = roundedIntPoint(delta); |
705 transform.translateRight(roundedDelta.x(), roundedDelta.y()); | 690 transform.translateRight(roundedDelta.x(), roundedDelta.y()); |
706 LayoutSize adjustedSubPixelAccumulation = | 691 LayoutSize adjustedSubPixelAccumulation = |
707 paintingInfo.subPixelAccumulation + (delta - roundedDelta); | 692 paintingInfo.subPixelAccumulation + (delta - roundedDelta); |
708 | 693 |
709 // TODO(jbroman): Put the real transform origin here, instead of using a | 694 // TODO(jbroman): Put the real transform origin here, instead of using a |
710 // matrix with the origin baked in. | 695 // matrix with the origin baked in. |
711 FloatPoint3D transformOrigin; | 696 FloatPoint3D transformOrigin; |
712 Transform3DRecorder transform3DRecorder( | 697 Transform3DRecorder transform3DRecorder( |
713 context, *m_paintLayer.layoutObject(), | 698 context, *m_paintLayer.layoutObject(), |
714 DisplayItem::kTransform3DElementTransform, transform, transformOrigin); | 699 DisplayItem::kTransform3DElementTransform, transform, transformOrigin); |
715 | |
716 // Now do a paint with the root layer shifted to be us. | 700 // Now do a paint with the root layer shifted to be us. |
717 PaintLayerPaintingInfo transformedPaintingInfo( | 701 PaintLayerPaintingInfo transformedPaintingInfo( |
718 &m_paintLayer, LayoutRect(enclosingIntRect(transform.inverse().mapRect( | 702 &m_paintLayer, LayoutRect(enclosingIntRect(transform.inverse().mapRect( |
719 paintingInfo.paintDirtyRect))), | 703 paintingInfo.paintDirtyRect))), |
720 paintingInfo.getGlobalPaintFlags(), adjustedSubPixelAccumulation); | 704 paintingInfo.getGlobalPaintFlags(), adjustedSubPixelAccumulation); |
721 transformedPaintingInfo.ancestorHasClipPathClipping = | 705 transformedPaintingInfo.ancestorHasClipPathClipping = |
722 paintingInfo.ancestorHasClipPathClipping; | 706 paintingInfo.ancestorHasClipPathClipping; |
723 | 707 |
724 // Remove skip root background flag when we're painting with a new root. | 708 // Remove skip root background flag when we're painting with a new root. |
725 if (&m_paintLayer != paintingInfo.rootLayer) | 709 if (&m_paintLayer != paintingInfo.rootLayer) |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
804 Optional<DisplayItemCacheSkipper> cacheSkipper; | 788 Optional<DisplayItemCacheSkipper> cacheSkipper; |
805 if (layerFragments.size() > 1) | 789 if (layerFragments.size() > 1) |
806 cacheSkipper.emplace(context); | 790 cacheSkipper.emplace(context); |
807 | 791 |
808 for (auto& fragment : layerFragments) { | 792 for (auto& fragment : layerFragments) { |
809 // We need to apply the same clips and transforms that | 793 // We need to apply the same clips and transforms that |
810 // paintFragmentWithPhase would have. | 794 // paintFragmentWithPhase would have. |
811 LayoutRect cullRect = fragment.backgroundRect.rect(); | 795 LayoutRect cullRect = fragment.backgroundRect.rect(); |
812 | 796 |
813 Optional<LayerClipRecorder> clipRecorder; | 797 Optional<LayerClipRecorder> clipRecorder; |
814 if (needsToClip(localPaintingInfo, fragment.backgroundRect)) | 798 if (needsToClip(localPaintingInfo, fragment.backgroundRect)) { |
815 clipRecorder.emplace(context, *m_paintLayer.layoutObject(), | 799 clipRecorder.emplace(context, *m_paintLayer.layoutObject(), |
816 DisplayItem::kClipLayerOverflowControls, | 800 DisplayItem::kClipLayerOverflowControls, |
817 fragment.backgroundRect, &localPaintingInfo, | 801 fragment.backgroundRect, &localPaintingInfo, |
818 fragment.paginationOffset, paintFlags); | 802 fragment.paginationOffset, paintFlags); |
803 } | |
819 | 804 |
820 Optional<ScrollRecorder> scrollRecorder; | 805 Optional<ScrollRecorder> scrollRecorder; |
821 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled() && | 806 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled() && |
822 !localPaintingInfo.scrollOffsetAccumulation.isZero()) { | 807 !localPaintingInfo.scrollOffsetAccumulation.isZero()) { |
823 cullRect.move(localPaintingInfo.scrollOffsetAccumulation); | 808 cullRect.move(localPaintingInfo.scrollOffsetAccumulation); |
824 scrollRecorder.emplace(context, *m_paintLayer.layoutObject(), | 809 scrollRecorder.emplace(context, *m_paintLayer.layoutObject(), |
825 DisplayItem::kScrollOverflowControls, | 810 DisplayItem::kScrollOverflowControls, |
826 localPaintingInfo.scrollOffsetAccumulation); | 811 localPaintingInfo.scrollOffsetAccumulation); |
827 } | 812 } |
828 | 813 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
871 LayoutRect newCullRect(clipRect.rect()); | 856 LayoutRect newCullRect(clipRect.rect()); |
872 Optional<ScrollRecorder> scrollRecorder; | 857 Optional<ScrollRecorder> scrollRecorder; |
873 LayoutPoint paintOffset = -m_paintLayer.layoutBoxLocation(); | 858 LayoutPoint paintOffset = -m_paintLayer.layoutBoxLocation(); |
874 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 859 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
875 const ObjectPaintProperties* objectPaintProperties = | 860 const ObjectPaintProperties* objectPaintProperties = |
876 m_paintLayer.layoutObject()->objectPaintProperties(); | 861 m_paintLayer.layoutObject()->objectPaintProperties(); |
877 ASSERT(objectPaintProperties && | 862 ASSERT(objectPaintProperties && |
878 objectPaintProperties->localBorderBoxProperties()); | 863 objectPaintProperties->localBorderBoxProperties()); |
879 paintOffset += | 864 paintOffset += |
880 toSize(objectPaintProperties->localBorderBoxProperties()->paintOffset); | 865 toSize(objectPaintProperties->localBorderBoxProperties()->paintOffset); |
866 newCullRect.move(paintingInfo.scrollOffsetAccumulation); | |
881 } else { | 867 } else { |
882 paintOffset += toSize(fragment.layerBounds.location()); | 868 paintOffset += toSize(fragment.layerBounds.location()); |
883 if (!paintingInfo.scrollOffsetAccumulation.isZero()) { | 869 if (!paintingInfo.scrollOffsetAccumulation.isZero()) { |
884 // As a descendant of the root layer, m_paintLayer's painting is not | 870 // As a descendant of the root layer, m_paintLayer's painting is not |
885 // controlled by the ScrollRecorders created by BlockPainter of the | 871 // controlled by the ScrollRecorders created by BlockPainter of the |
886 // ancestor layers up to the root layer, so we need to issue | 872 // ancestor layers up to the root layer, so we need to issue |
887 // ScrollRecorder for this layer seperately, with the scroll offset | 873 // ScrollRecorder for this layer seperately, with the scroll offset |
888 // accumulated from the root layer to the parent of this layer, to get the | 874 // accumulated from the root layer to the parent of this layer, to get the |
889 // same result as ScrollRecorder in BlockPainter. | 875 // same result as ScrollRecorder in BlockPainter. |
890 paintOffset += paintingInfo.scrollOffsetAccumulation; | 876 paintOffset += paintingInfo.scrollOffsetAccumulation; |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1076 | 1062 |
1077 PaintLayerPaintingInfo paintingInfo(&m_paintLayer, | 1063 PaintLayerPaintingInfo paintingInfo(&m_paintLayer, |
1078 LayoutRect(enclosingIntRect(damageRect)), | 1064 LayoutRect(enclosingIntRect(damageRect)), |
1079 paintFlags, LayoutSize()); | 1065 paintFlags, LayoutSize()); |
1080 paintLayer(context, paintingInfo, PaintLayerPaintingOverlayScrollbars); | 1066 paintLayer(context, paintingInfo, PaintLayerPaintingOverlayScrollbars); |
1081 | 1067 |
1082 m_paintLayer.setContainsDirtyOverlayScrollbars(false); | 1068 m_paintLayer.setContainsDirtyOverlayScrollbars(false); |
1083 } | 1069 } |
1084 | 1070 |
1085 } // namespace blink | 1071 } // namespace blink |
OLD | NEW |