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()) && |
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()); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
804 Optional<DisplayItemCacheSkipper> cacheSkipper; | 789 Optional<DisplayItemCacheSkipper> cacheSkipper; |
805 if (layerFragments.size() > 1) | 790 if (layerFragments.size() > 1) |
806 cacheSkipper.emplace(context); | 791 cacheSkipper.emplace(context); |
807 | 792 |
808 for (auto& fragment : layerFragments) { | 793 for (auto& fragment : layerFragments) { |
809 // We need to apply the same clips and transforms that | 794 // We need to apply the same clips and transforms that |
810 // paintFragmentWithPhase would have. | 795 // paintFragmentWithPhase would have. |
811 LayoutRect cullRect = fragment.backgroundRect.rect(); | 796 LayoutRect cullRect = fragment.backgroundRect.rect(); |
812 | 797 |
813 Optional<LayerClipRecorder> clipRecorder; | 798 Optional<LayerClipRecorder> clipRecorder; |
814 if (needsToClip(localPaintingInfo, fragment.backgroundRect)) | 799 if (needsToClip(localPaintingInfo, fragment.backgroundRect)) { |
815 clipRecorder.emplace(context, *m_paintLayer.layoutObject(), | 800 clipRecorder.emplace(context, *m_paintLayer.layoutObject(), |
816 DisplayItem::kClipLayerOverflowControls, | 801 DisplayItem::kClipLayerOverflowControls, |
817 fragment.backgroundRect, &localPaintingInfo, | 802 fragment.backgroundRect, &localPaintingInfo, |
818 fragment.paginationOffset, paintFlags); | 803 fragment.paginationOffset, paintFlags); |
| 804 } |
819 | 805 |
820 Optional<ScrollRecorder> scrollRecorder; | 806 Optional<ScrollRecorder> scrollRecorder; |
821 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled() && | 807 if (!RuntimeEnabledFeatures::slimmingPaintV2Enabled() && |
822 !localPaintingInfo.scrollOffsetAccumulation.isZero()) { | 808 !localPaintingInfo.scrollOffsetAccumulation.isZero()) { |
823 cullRect.move(localPaintingInfo.scrollOffsetAccumulation); | 809 cullRect.move(localPaintingInfo.scrollOffsetAccumulation); |
824 scrollRecorder.emplace(context, *m_paintLayer.layoutObject(), | 810 scrollRecorder.emplace(context, *m_paintLayer.layoutObject(), |
825 DisplayItem::kScrollOverflowControls, | 811 DisplayItem::kScrollOverflowControls, |
826 localPaintingInfo.scrollOffsetAccumulation); | 812 localPaintingInfo.scrollOffsetAccumulation); |
827 } | 813 } |
828 | 814 |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
871 LayoutRect newCullRect(clipRect.rect()); | 857 LayoutRect newCullRect(clipRect.rect()); |
872 Optional<ScrollRecorder> scrollRecorder; | 858 Optional<ScrollRecorder> scrollRecorder; |
873 LayoutPoint paintOffset = -m_paintLayer.layoutBoxLocation(); | 859 LayoutPoint paintOffset = -m_paintLayer.layoutBoxLocation(); |
874 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { | 860 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { |
875 const ObjectPaintProperties* objectPaintProperties = | 861 const ObjectPaintProperties* objectPaintProperties = |
876 m_paintLayer.layoutObject()->objectPaintProperties(); | 862 m_paintLayer.layoutObject()->objectPaintProperties(); |
877 ASSERT(objectPaintProperties && | 863 ASSERT(objectPaintProperties && |
878 objectPaintProperties->localBorderBoxProperties()); | 864 objectPaintProperties->localBorderBoxProperties()); |
879 paintOffset += | 865 paintOffset += |
880 toSize(objectPaintProperties->localBorderBoxProperties()->paintOffset); | 866 toSize(objectPaintProperties->localBorderBoxProperties()->paintOffset); |
| 867 newCullRect.move(paintingInfo.scrollOffsetAccumulation); |
881 } else { | 868 } else { |
882 paintOffset += toSize(fragment.layerBounds.location()); | 869 paintOffset += toSize(fragment.layerBounds.location()); |
883 if (!paintingInfo.scrollOffsetAccumulation.isZero()) { | 870 if (!paintingInfo.scrollOffsetAccumulation.isZero()) { |
884 // As a descendant of the root layer, m_paintLayer's painting is not | 871 // As a descendant of the root layer, m_paintLayer's painting is not |
885 // controlled by the ScrollRecorders created by BlockPainter of the | 872 // controlled by the ScrollRecorders created by BlockPainter of the |
886 // ancestor layers up to the root layer, so we need to issue | 873 // ancestor layers up to the root layer, so we need to issue |
887 // ScrollRecorder for this layer seperately, with the scroll offset | 874 // ScrollRecorder for this layer seperately, with the scroll offset |
888 // accumulated from the root layer to the parent of this layer, to get the | 875 // accumulated from the root layer to the parent of this layer, to get the |
889 // same result as ScrollRecorder in BlockPainter. | 876 // same result as ScrollRecorder in BlockPainter. |
890 paintOffset += paintingInfo.scrollOffsetAccumulation; | 877 paintOffset += paintingInfo.scrollOffsetAccumulation; |
(...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1076 | 1063 |
1077 PaintLayerPaintingInfo paintingInfo(&m_paintLayer, | 1064 PaintLayerPaintingInfo paintingInfo(&m_paintLayer, |
1078 LayoutRect(enclosingIntRect(damageRect)), | 1065 LayoutRect(enclosingIntRect(damageRect)), |
1079 paintFlags, LayoutSize()); | 1066 paintFlags, LayoutSize()); |
1080 paintLayer(context, paintingInfo, PaintLayerPaintingOverlayScrollbars); | 1067 paintLayer(context, paintingInfo, PaintLayerPaintingOverlayScrollbars); |
1081 | 1068 |
1082 m_paintLayer.setContainsDirtyOverlayScrollbars(false); | 1069 m_paintLayer.setContainsDirtyOverlayScrollbars(false); |
1083 } | 1070 } |
1084 | 1071 |
1085 } // namespace blink | 1072 } // namespace blink |
OLD | NEW |