OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009, 2010, 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2009, 2010, 2011 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 2748 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2759 // FIXME: need to split out paint invalidations for the background. | 2759 // FIXME: need to split out paint invalidations for the background. |
2760 ApplyToGraphicsLayers(this, SetContentsNeedsDisplayFunctor(), | 2760 ApplyToGraphicsLayers(this, SetContentsNeedsDisplayFunctor(), |
2761 ApplyToContentLayers); | 2761 ApplyToContentLayers); |
2762 } | 2762 } |
2763 | 2763 |
2764 struct SetContentsNeedsDisplayInRectFunctor { | 2764 struct SetContentsNeedsDisplayInRectFunctor { |
2765 void operator()(GraphicsLayer* layer) const { | 2765 void operator()(GraphicsLayer* layer) const { |
2766 if (layer->drawsContent()) { | 2766 if (layer->drawsContent()) { |
2767 IntRect layerDirtyRect = r; | 2767 IntRect layerDirtyRect = r; |
2768 layerDirtyRect.move(-layer->offsetFromLayoutObject()); | 2768 layerDirtyRect.move(-layer->offsetFromLayoutObject()); |
2769 layer->setNeedsDisplayInRect(layerDirtyRect, invalidationReason, client); | 2769 layer->setNeedsDisplayInRect(layerDirtyRect, invalidationReason, debug); |
2770 } | 2770 } |
2771 } | 2771 } |
2772 | 2772 |
2773 IntRect r; | 2773 IntRect r; |
2774 PaintInvalidationReason invalidationReason; | 2774 PaintInvalidationReason invalidationReason; |
2775 const DisplayItemClient& client; | 2775 const InvalidationDebugging& debug; |
2776 }; | 2776 }; |
2777 | 2777 |
2778 void CompositedLayerMapping::setContentsNeedDisplayInRect( | 2778 void CompositedLayerMapping::setContentsNeedDisplayInRect( |
2779 const LayoutRect& r, | 2779 const LayoutRect& r, |
2780 PaintInvalidationReason invalidationReason, | 2780 PaintInvalidationReason invalidationReason, |
2781 const DisplayItemClient& client) { | 2781 const InvalidationDebugging& debug) { |
2782 DCHECK(!m_owningLayer.layoutObject()->usesCompositedScrolling()); | 2782 DCHECK(!m_owningLayer.layoutObject()->usesCompositedScrolling()); |
2783 // TODO(wangxianzhu): Enable the following assert after paint invalidation for | 2783 // TODO(wangxianzhu): Enable the following assert after paint invalidation for |
2784 // spv2 is ready. | 2784 // spv2 is ready. |
2785 // ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled()); | 2785 // ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
2786 | 2786 |
2787 SetContentsNeedsDisplayInRectFunctor functor = { | 2787 SetContentsNeedsDisplayInRectFunctor functor = { |
2788 enclosingIntRect(LayoutRect( | 2788 enclosingIntRect(LayoutRect( |
2789 r.location() + m_owningLayer.subpixelAccumulation(), r.size())), | 2789 r.location() + m_owningLayer.subpixelAccumulation(), r.size())), |
2790 invalidationReason, client}; | 2790 invalidationReason, debug}; |
2791 ApplyToGraphicsLayers(this, functor, ApplyToContentLayers); | 2791 ApplyToGraphicsLayers(this, functor, ApplyToContentLayers); |
2792 } | 2792 } |
2793 | 2793 |
2794 void CompositedLayerMapping::setNonScrollingContentsNeedDisplayInRect( | 2794 void CompositedLayerMapping::setNonScrollingContentsNeedDisplayInRect( |
2795 const LayoutRect& r, | 2795 const LayoutRect& r, |
2796 PaintInvalidationReason invalidationReason, | 2796 PaintInvalidationReason invalidationReason, |
2797 const DisplayItemClient& client) { | 2797 const InvalidationDebugging& debug) { |
2798 DCHECK(m_owningLayer.layoutObject()->usesCompositedScrolling()); | 2798 DCHECK(m_owningLayer.layoutObject()->usesCompositedScrolling()); |
2799 // TODO(wangxianzhu): Enable the following assert after paint invalidation for | 2799 // TODO(wangxianzhu): Enable the following assert after paint invalidation for |
2800 // spv2 is ready. | 2800 // spv2 is ready. |
2801 // ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled()); | 2801 // ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
2802 | 2802 |
2803 SetContentsNeedsDisplayInRectFunctor functor = { | 2803 SetContentsNeedsDisplayInRectFunctor functor = { |
2804 enclosingIntRect(LayoutRect( | 2804 enclosingIntRect(LayoutRect( |
2805 r.location() + m_owningLayer.subpixelAccumulation(), r.size())), | 2805 r.location() + m_owningLayer.subpixelAccumulation(), r.size())), |
2806 invalidationReason, client}; | 2806 invalidationReason, debug}; |
2807 ApplyToGraphicsLayers(this, functor, ApplyToNonScrollingContentLayers); | 2807 ApplyToGraphicsLayers(this, functor, ApplyToNonScrollingContentLayers); |
2808 } | 2808 } |
2809 | 2809 |
2810 void CompositedLayerMapping::setScrollingContentsNeedDisplayInRect( | 2810 void CompositedLayerMapping::setScrollingContentsNeedDisplayInRect( |
2811 const LayoutRect& r, | 2811 const LayoutRect& r, |
2812 PaintInvalidationReason invalidationReason, | 2812 PaintInvalidationReason invalidationReason, |
2813 const DisplayItemClient& client) { | 2813 const InvalidationDebugging& debug) { |
2814 DCHECK(m_owningLayer.layoutObject()->usesCompositedScrolling()); | 2814 DCHECK(m_owningLayer.layoutObject()->usesCompositedScrolling()); |
2815 // TODO(wangxianzhu): Enable the following assert after paint invalidation for | 2815 // TODO(wangxianzhu): Enable the following assert after paint invalidation for |
2816 // spv2 is ready. | 2816 // spv2 is ready. |
2817 // ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled()); | 2817 // ASSERT(!RuntimeEnabledFeatures::slimmingPaintV2Enabled()); |
2818 | 2818 |
2819 SetContentsNeedsDisplayInRectFunctor functor = { | 2819 SetContentsNeedsDisplayInRectFunctor functor = { |
2820 enclosingIntRect(LayoutRect( | 2820 enclosingIntRect(LayoutRect( |
2821 r.location() + m_owningLayer.subpixelAccumulation(), r.size())), | 2821 r.location() + m_owningLayer.subpixelAccumulation(), r.size())), |
2822 invalidationReason, client}; | 2822 invalidationReason, debug}; |
2823 ApplyToGraphicsLayers(this, functor, ApplyToScrollingContentLayers); | 2823 ApplyToGraphicsLayers(this, functor, ApplyToScrollingContentLayers); |
2824 } | 2824 } |
2825 | 2825 |
2826 const GraphicsLayerPaintInfo* CompositedLayerMapping::containingSquashedLayer( | 2826 const GraphicsLayerPaintInfo* CompositedLayerMapping::containingSquashedLayer( |
2827 const LayoutObject* layoutObject, | 2827 const LayoutObject* layoutObject, |
2828 const Vector<GraphicsLayerPaintInfo>& layers, | 2828 const Vector<GraphicsLayerPaintInfo>& layers, |
2829 unsigned maxSquashedLayerIndex) { | 2829 unsigned maxSquashedLayerIndex) { |
2830 if (!layoutObject) | 2830 if (!layoutObject) |
2831 return nullptr; | 2831 return nullptr; |
2832 for (size_t i = 0; i < layers.size() && i < maxSquashedLayerIndex; ++i) { | 2832 for (size_t i = 0; i < layers.size() && i < maxSquashedLayerIndex; ++i) { |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2882 const GraphicsLayerPaintInfo& paintInfo, | 2882 const GraphicsLayerPaintInfo& paintInfo, |
2883 const GraphicsLayer& graphicsLayer, | 2883 const GraphicsLayer& graphicsLayer, |
2884 const PaintLayerFlags& paintLayerFlags, | 2884 const PaintLayerFlags& paintLayerFlags, |
2885 GraphicsContext& context, | 2885 GraphicsContext& context, |
2886 const IntRect& clip /* In the coords of rootLayer */) const { | 2886 const IntRect& clip /* In the coords of rootLayer */) const { |
2887 FontCachePurgePreventer fontCachePurgePreventer; | 2887 FontCachePurgePreventer fontCachePurgePreventer; |
2888 | 2888 |
2889 IntSize offset = paintInfo.offsetFromLayoutObject; | 2889 IntSize offset = paintInfo.offsetFromLayoutObject; |
2890 AffineTransform translation; | 2890 AffineTransform translation; |
2891 translation.translate(-offset.width(), -offset.height()); | 2891 translation.translate(-offset.width(), -offset.height()); |
2892 TransformRecorder transformRecorder(context, graphicsLayer, translation); | 2892 TransformRecorder transformRecorder( |
| 2893 context, translation, graphicsLayer.visualRect(), |
| 2894 graphicsLayer.debugName(), |
| 2895 graphicsLayer.paintedOutputOfObjectHasNoEffectRegardlessOfSize()); |
2893 | 2896 |
2894 // The dirtyRect is in the coords of the painting root. | 2897 // The dirtyRect is in the coords of the painting root. |
2895 IntRect dirtyRect(clip); | 2898 IntRect dirtyRect(clip); |
2896 dirtyRect.move(offset); | 2899 dirtyRect.move(offset); |
2897 | 2900 |
2898 if (paintLayerFlags & (PaintLayerPaintingOverflowContents | | 2901 if (paintLayerFlags & (PaintLayerPaintingOverflowContents | |
2899 PaintLayerPaintingAncestorClippingMaskPhase)) { | 2902 PaintLayerPaintingAncestorClippingMaskPhase)) { |
2900 dirtyRect.move( | 2903 dirtyRect.move( |
2901 roundedIntSize(paintInfo.paintLayer->subpixelAccumulation())); | 2904 roundedIntSize(paintInfo.paintLayer->subpixelAccumulation())); |
2902 } else { | 2905 } else { |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2953 } | 2956 } |
2954 | 2957 |
2955 static void paintScrollbar(const Scrollbar* scrollbar, | 2958 static void paintScrollbar(const Scrollbar* scrollbar, |
2956 GraphicsContext& context, | 2959 GraphicsContext& context, |
2957 const IntRect& clip) { | 2960 const IntRect& clip) { |
2958 if (!scrollbar) | 2961 if (!scrollbar) |
2959 return; | 2962 return; |
2960 | 2963 |
2961 const IntRect& scrollbarRect = scrollbar->frameRect(); | 2964 const IntRect& scrollbarRect = scrollbar->frameRect(); |
2962 TransformRecorder transformRecorder( | 2965 TransformRecorder transformRecorder( |
2963 context, *scrollbar, | 2966 context, |
2964 AffineTransform::translation(-scrollbarRect.x(), -scrollbarRect.y())); | 2967 AffineTransform::translation(-scrollbarRect.x(), -scrollbarRect.y()), |
| 2968 scrollbar->visualRect(), scrollbar->debugName(), |
| 2969 scrollbar->paintedOutputOfObjectHasNoEffectRegardlessOfSize()); |
2965 IntRect transformedClip = clip; | 2970 IntRect transformedClip = clip; |
2966 transformedClip.moveBy(scrollbarRect.location()); | 2971 transformedClip.moveBy(scrollbarRect.location()); |
2967 scrollbar->paint(context, CullRect(transformedClip)); | 2972 scrollbar->paint(context, CullRect(transformedClip)); |
2968 } | 2973 } |
2969 | 2974 |
2970 // TODO(eseckler): Make recording distance configurable, e.g. for use in | 2975 // TODO(eseckler): Make recording distance configurable, e.g. for use in |
2971 // headless, where we would like to record an exact area. | 2976 // headless, where we would like to record an exact area. |
2972 // Note however that the minimum value for this constant is the size of a | 2977 // Note however that the minimum value for this constant is the size of a |
2973 // raster tile. This is because the raster system is not able to raster a | 2978 // raster tile. This is because the raster system is not able to raster a |
2974 // tile that is not completely covered by a display list. If the constant | 2979 // tile that is not completely covered by a display list. If the constant |
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3478 } else if (graphicsLayer == m_decorationOutlineLayer.get()) { | 3483 } else if (graphicsLayer == m_decorationOutlineLayer.get()) { |
3479 name = "Decoration Layer"; | 3484 name = "Decoration Layer"; |
3480 } else { | 3485 } else { |
3481 ASSERT_NOT_REACHED(); | 3486 ASSERT_NOT_REACHED(); |
3482 } | 3487 } |
3483 | 3488 |
3484 return name; | 3489 return name; |
3485 } | 3490 } |
3486 | 3491 |
3487 } // namespace blink | 3492 } // namespace blink |
OLD | NEW |