OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights |
3 * reserved. | 3 * reserved. |
4 * | 4 * |
5 * Portions are Copyright (C) 1998 Netscape Communications Corporation. | 5 * Portions are Copyright (C) 1998 Netscape Communications Corporation. |
6 * | 6 * |
7 * Other contributors: | 7 * Other contributors: |
8 * Robert O'Callahan <roc+@cs.cmu.edu> | 8 * Robert O'Callahan <roc+@cs.cmu.edu> |
9 * David Baron <dbaron@fas.harvard.edu> | 9 * David Baron <dbaron@fas.harvard.edu> |
10 * Christian Biesinger <cbiesinger@web.de> | 10 * Christian Biesinger <cbiesinger@web.de> |
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 struct { | 103 struct { |
104 IntSize size; | 104 IntSize size; |
105 void* pointer; | 105 void* pointer; |
106 LayoutRect rect; | 106 LayoutRect rect; |
107 } previousPaintStatus; | 107 } previousPaintStatus; |
108 }; | 108 }; |
109 | 109 |
110 static_assert(sizeof(PaintLayer) == sizeof(SameSizeAsPaintLayer), | 110 static_assert(sizeof(PaintLayer) == sizeof(SameSizeAsPaintLayer), |
111 "PaintLayer should stay small"); | 111 "PaintLayer should stay small"); |
112 | 112 |
| 113 bool isReferenceClipPath(const ClipPathOperation* clipOperation) { |
| 114 return clipOperation && clipOperation->type() == ClipPathOperation::REFERENCE; |
| 115 } |
| 116 |
113 } // namespace | 117 } // namespace |
114 | 118 |
115 using namespace HTMLNames; | 119 using namespace HTMLNames; |
116 | 120 |
117 PaintLayerRareData::PaintLayerRareData() | 121 PaintLayerRareData::PaintLayerRareData() |
118 : enclosingPaginationLayer(nullptr), | 122 : enclosingPaginationLayer(nullptr), |
119 potentialCompositingReasonsFromStyle(CompositingReasonNone), | 123 potentialCompositingReasonsFromStyle(CompositingReasonNone), |
120 compositingReasons(CompositingReasonNone), | 124 compositingReasons(CompositingReasonNone), |
121 squashingDisallowedReasons(SquashingDisallowedReasonsNone), | 125 squashingDisallowedReasons(SquashingDisallowedReasonsNone), |
122 groupedMapping(nullptr) {} | 126 groupedMapping(nullptr) {} |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
172 if (!layoutObject->slowFirstChild() && layoutObject->style()) { | 176 if (!layoutObject->slowFirstChild() && layoutObject->style()) { |
173 m_isVisibleContentDirty = false; | 177 m_isVisibleContentDirty = false; |
174 m_hasVisibleContent = | 178 m_hasVisibleContent = |
175 layoutObject->style()->visibility() == EVisibility::Visible; | 179 layoutObject->style()->visibility() == EVisibility::Visible; |
176 } | 180 } |
177 | 181 |
178 updateScrollableArea(); | 182 updateScrollableArea(); |
179 } | 183 } |
180 | 184 |
181 PaintLayer::~PaintLayer() { | 185 PaintLayer::~PaintLayer() { |
182 if (m_rareData && m_rareData->filterInfo) { | 186 if (m_rareData && m_rareData->resourceInfo) { |
183 layoutObject()->styleRef().filter().removeClient(m_rareData->filterInfo); | 187 const ComputedStyle& style = layoutObject()->styleRef(); |
184 m_rareData->filterInfo->clearLayer(); | 188 if (style.hasFilter()) |
| 189 style.filter().removeClient(m_rareData->resourceInfo); |
| 190 if (isReferenceClipPath(style.clipPath())) { |
| 191 toReferenceClipPathOperation(style.clipPath()) |
| 192 ->removeClient(m_rareData->resourceInfo); |
| 193 } |
| 194 m_rareData->resourceInfo->clearLayer(); |
185 } | 195 } |
186 if (layoutObject()->frame() && layoutObject()->frame()->page()) { | 196 if (layoutObject()->frame() && layoutObject()->frame()->page()) { |
187 if (ScrollingCoordinator* scrollingCoordinator = | 197 if (ScrollingCoordinator* scrollingCoordinator = |
188 layoutObject()->frame()->page()->scrollingCoordinator()) | 198 layoutObject()->frame()->page()->scrollingCoordinator()) |
189 scrollingCoordinator->willDestroyLayer(this); | 199 scrollingCoordinator->willDestroyLayer(this); |
190 } | 200 } |
191 | 201 |
192 if (groupedMapping()) { | 202 if (groupedMapping()) { |
193 DisableCompositingQueryAsserts disabler; | 203 DisableCompositingQueryAsserts disabler; |
194 setGroupedMapping(0, InvalidateLayerAndRemoveFromMapping); | 204 setGroupedMapping(0, InvalidateLayerAndRemoveFromMapping); |
(...skipping 2172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2367 FloatPoint point(hitTestLocation.point()); | 2377 FloatPoint point(hitTestLocation.point()); |
2368 | 2378 |
2369 ClipPathOperation* clipPathOperation = layoutObject()->style()->clipPath(); | 2379 ClipPathOperation* clipPathOperation = layoutObject()->style()->clipPath(); |
2370 DCHECK(clipPathOperation); | 2380 DCHECK(clipPathOperation); |
2371 if (clipPathOperation->type() == ClipPathOperation::SHAPE) { | 2381 if (clipPathOperation->type() == ClipPathOperation::SHAPE) { |
2372 ShapeClipPathOperation* clipPath = | 2382 ShapeClipPathOperation* clipPath = |
2373 toShapeClipPathOperation(clipPathOperation); | 2383 toShapeClipPathOperation(clipPathOperation); |
2374 return !clipPath->path(FloatRect(referenceBox)).contains(point); | 2384 return !clipPath->path(FloatRect(referenceBox)).contains(point); |
2375 } | 2385 } |
2376 DCHECK_EQ(clipPathOperation->type(), ClipPathOperation::REFERENCE); | 2386 DCHECK_EQ(clipPathOperation->type(), ClipPathOperation::REFERENCE); |
2377 ReferenceClipPathOperation* referenceClipPathOperation = | 2387 Node* targetNode = layoutObject()->node(); |
2378 toReferenceClipPathOperation(clipPathOperation); | 2388 if (!targetNode) |
2379 Element* element = layoutObject()->document().getElementById( | 2389 return false; |
2380 referenceClipPathOperation->fragment()); | 2390 const ReferenceClipPathOperation& referenceClipPathOperation = |
| 2391 toReferenceClipPathOperation(*clipPathOperation); |
| 2392 SVGElement* element = |
| 2393 referenceClipPathOperation.findElement(targetNode->treeScope()); |
2381 if (!isSVGClipPathElement(element) || !element->layoutObject()) | 2394 if (!isSVGClipPathElement(element) || !element->layoutObject()) |
2382 return false; | 2395 return false; |
2383 LayoutSVGResourceClipper* clipper = toLayoutSVGResourceClipper( | 2396 LayoutSVGResourceClipper* clipper = toLayoutSVGResourceClipper( |
2384 toLayoutSVGResourceContainer(element->layoutObject())); | 2397 toLayoutSVGResourceContainer(element->layoutObject())); |
2385 // If the clipPath is using "userspace on use" units, then the origin of | 2398 // If the clipPath is using "userspace on use" units, then the origin of |
2386 // the coordinate system is the top-left of the reference box, so adjust | 2399 // the coordinate system is the top-left of the reference box, so adjust |
2387 // the point accordingly. | 2400 // the point accordingly. |
2388 if (clipper->clipPathUnits() == SVGUnitTypes::kSvgUnitTypeUserspaceonuse) | 2401 if (clipper->clipPathUnits() == SVGUnitTypes::kSvgUnitTypeUserspaceonuse) |
2389 point.moveBy(-referenceBox.location()); | 2402 point.moveBy(-referenceBox.location()); |
2390 return !clipper->hitTestClipContent(FloatRect(referenceBox), point); | 2403 return !clipper->hitTestClipContent(FloatRect(referenceBox), point); |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2638 | 2651 |
2639 void PaintLayer::ensureCompositedLayerMapping() { | 2652 void PaintLayer::ensureCompositedLayerMapping() { |
2640 if (m_rareData && m_rareData->compositedLayerMapping) | 2653 if (m_rareData && m_rareData->compositedLayerMapping) |
2641 return; | 2654 return; |
2642 | 2655 |
2643 ensureRareData().compositedLayerMapping = | 2656 ensureRareData().compositedLayerMapping = |
2644 wrapUnique(new CompositedLayerMapping(*this)); | 2657 wrapUnique(new CompositedLayerMapping(*this)); |
2645 m_rareData->compositedLayerMapping->setNeedsGraphicsLayerUpdate( | 2658 m_rareData->compositedLayerMapping->setNeedsGraphicsLayerUpdate( |
2646 GraphicsLayerUpdateSubtree); | 2659 GraphicsLayerUpdateSubtree); |
2647 | 2660 |
2648 if (PaintLayerFilterInfo* filterInfo = this->filterInfo()) | 2661 if (PaintLayerResourceInfo* resourceInfo = this->resourceInfo()) |
2649 filterInfo->invalidateFilterChain(); | 2662 resourceInfo->invalidateFilterChain(); |
2650 } | 2663 } |
2651 | 2664 |
2652 void PaintLayer::clearCompositedLayerMapping(bool layerBeingDestroyed) { | 2665 void PaintLayer::clearCompositedLayerMapping(bool layerBeingDestroyed) { |
2653 if (!layerBeingDestroyed) { | 2666 if (!layerBeingDestroyed) { |
2654 // We need to make sure our decendants get a geometry update. In principle, | 2667 // We need to make sure our decendants get a geometry update. In principle, |
2655 // we could call setNeedsGraphicsLayerUpdate on our children, but that would | 2668 // we could call setNeedsGraphicsLayerUpdate on our children, but that would |
2656 // require walking the z-order lists to find them. Instead, we | 2669 // require walking the z-order lists to find them. Instead, we |
2657 // over-invalidate by marking our parent as needing a geometry update. | 2670 // over-invalidate by marking our parent as needing a geometry update. |
2658 if (PaintLayer* compositingParent = | 2671 if (PaintLayer* compositingParent = |
2659 enclosingLayerWithCompositedLayerMapping(ExcludeSelf)) | 2672 enclosingLayerWithCompositedLayerMapping(ExcludeSelf)) |
2660 compositingParent->compositedLayerMapping()->setNeedsGraphicsLayerUpdate( | 2673 compositingParent->compositedLayerMapping()->setNeedsGraphicsLayerUpdate( |
2661 GraphicsLayerUpdateSubtree); | 2674 GraphicsLayerUpdateSubtree); |
2662 } | 2675 } |
2663 | 2676 |
2664 if (m_rareData) | 2677 if (m_rareData) |
2665 m_rareData->compositedLayerMapping.reset(); | 2678 m_rareData->compositedLayerMapping.reset(); |
2666 | 2679 |
2667 if (layerBeingDestroyed) | 2680 if (layerBeingDestroyed) |
2668 return; | 2681 return; |
2669 | 2682 |
2670 if (PaintLayerFilterInfo* filterInfo = this->filterInfo()) | 2683 if (PaintLayerResourceInfo* resourceInfo = this->resourceInfo()) |
2671 filterInfo->invalidateFilterChain(); | 2684 resourceInfo->invalidateFilterChain(); |
2672 } | 2685 } |
2673 | 2686 |
2674 void PaintLayer::setGroupedMapping(CompositedLayerMapping* groupedMapping, | 2687 void PaintLayer::setGroupedMapping(CompositedLayerMapping* groupedMapping, |
2675 SetGroupMappingOptions options) { | 2688 SetGroupMappingOptions options) { |
2676 CompositedLayerMapping* oldGroupedMapping = this->groupedMapping(); | 2689 CompositedLayerMapping* oldGroupedMapping = this->groupedMapping(); |
2677 if (groupedMapping == oldGroupedMapping) | 2690 if (groupedMapping == oldGroupedMapping) |
2678 return; | 2691 return; |
2679 | 2692 |
2680 if (options == InvalidateLayerAndRemoveFromMapping && oldGroupedMapping) { | 2693 if (options == InvalidateLayerAndRemoveFromMapping && oldGroupedMapping) { |
2681 oldGroupedMapping->setNeedsGraphicsLayerUpdate(GraphicsLayerUpdateSubtree); | 2694 oldGroupedMapping->setNeedsGraphicsLayerUpdate(GraphicsLayerUpdateSubtree); |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2864 return false; | 2877 return false; |
2865 | 2878 |
2866 return hasBoxDecorationsOrBackground() || hasOverflowControls(); | 2879 return hasBoxDecorationsOrBackground() || hasOverflowControls(); |
2867 } | 2880 } |
2868 | 2881 |
2869 void PaintLayer::updateFilters(const ComputedStyle* oldStyle, | 2882 void PaintLayer::updateFilters(const ComputedStyle* oldStyle, |
2870 const ComputedStyle& newStyle) { | 2883 const ComputedStyle& newStyle) { |
2871 if (!newStyle.hasFilterInducingProperty() && | 2884 if (!newStyle.hasFilterInducingProperty() && |
2872 (!oldStyle || !oldStyle->hasFilterInducingProperty())) | 2885 (!oldStyle || !oldStyle->hasFilterInducingProperty())) |
2873 return; | 2886 return; |
2874 const bool hadFilterInfo = filterInfo(); | 2887 const bool hadResourceInfo = resourceInfo(); |
2875 if (newStyle.hasFilterInducingProperty()) | 2888 if (newStyle.hasFilterInducingProperty()) |
2876 newStyle.filter().addClient(&ensureFilterInfo()); | 2889 newStyle.filter().addClient(&ensureResourceInfo()); |
2877 if (hadFilterInfo && oldStyle) | 2890 if (hadResourceInfo && oldStyle) |
2878 oldStyle->filter().removeClient(filterInfo()); | 2891 oldStyle->filter().removeClient(resourceInfo()); |
2879 if (!newStyle.hasFilterInducingProperty()) { | 2892 if (PaintLayerResourceInfo* resourceInfo = this->resourceInfo()) |
2880 removeFilterInfo(); | 2893 resourceInfo->invalidateFilterChain(); |
| 2894 } |
| 2895 |
| 2896 void PaintLayer::updateClipPath(const ComputedStyle* oldStyle, |
| 2897 const ComputedStyle& newStyle) { |
| 2898 ClipPathOperation* newClipOperation = newStyle.clipPath(); |
| 2899 ClipPathOperation* oldClipOperation = |
| 2900 oldStyle ? oldStyle->clipPath() : nullptr; |
| 2901 if (!newClipOperation && !oldClipOperation) |
2881 return; | 2902 return; |
| 2903 const bool hadResourceInfo = resourceInfo(); |
| 2904 if (isReferenceClipPath(newClipOperation)) { |
| 2905 toReferenceClipPathOperation(newClipOperation) |
| 2906 ->addClient(&ensureResourceInfo()); |
2882 } | 2907 } |
2883 if (PaintLayerFilterInfo* filterInfo = this->filterInfo()) | 2908 if (hadResourceInfo && isReferenceClipPath(oldClipOperation)) { |
2884 filterInfo->invalidateFilterChain(); | 2909 toReferenceClipPathOperation(oldClipOperation) |
| 2910 ->removeClient(resourceInfo()); |
| 2911 } |
2885 } | 2912 } |
2886 | 2913 |
2887 bool PaintLayer::attemptDirectCompositingUpdate(StyleDifference diff, | 2914 bool PaintLayer::attemptDirectCompositingUpdate(StyleDifference diff, |
2888 const ComputedStyle* oldStyle) { | 2915 const ComputedStyle* oldStyle) { |
2889 CompositingReasons oldPotentialCompositingReasonsFromStyle = | 2916 CompositingReasons oldPotentialCompositingReasonsFromStyle = |
2890 potentialCompositingReasonsFromStyle(); | 2917 potentialCompositingReasonsFromStyle(); |
2891 compositor()->updatePotentialCompositingReasonsFromStyle(this); | 2918 compositor()->updatePotentialCompositingReasonsFromStyle(this); |
2892 | 2919 |
2893 // This function implements an optimization for transforms and opacity. | 2920 // This function implements an optimization for transforms and opacity. |
2894 // A common pattern is for a touchmove handler to update the transform | 2921 // A common pattern is for a touchmove handler to update the transform |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2960 m_scrollableArea->updateAfterStyleChange(oldStyle); | 2987 m_scrollableArea->updateAfterStyleChange(oldStyle); |
2961 | 2988 |
2962 // Overlay scrollbars can make this layer self-painting so we need | 2989 // Overlay scrollbars can make this layer self-painting so we need |
2963 // to recompute the bit once scrollbars have been updated. | 2990 // to recompute the bit once scrollbars have been updated. |
2964 updateSelfPaintingLayer(); | 2991 updateSelfPaintingLayer(); |
2965 | 2992 |
2966 updateDescendantDependentFlags(); | 2993 updateDescendantDependentFlags(); |
2967 | 2994 |
2968 updateTransform(oldStyle, layoutObject()->styleRef()); | 2995 updateTransform(oldStyle, layoutObject()->styleRef()); |
2969 updateFilters(oldStyle, layoutObject()->styleRef()); | 2996 updateFilters(oldStyle, layoutObject()->styleRef()); |
| 2997 updateClipPath(oldStyle, layoutObject()->styleRef()); |
2970 | 2998 |
2971 setNeedsCompositingInputsUpdate(); | 2999 setNeedsCompositingInputsUpdate(); |
2972 } | 3000 } |
2973 | 3001 |
2974 bool PaintLayer::scrollsOverflow() const { | 3002 bool PaintLayer::scrollsOverflow() const { |
2975 if (PaintLayerScrollableArea* scrollableArea = this->getScrollableArea()) | 3003 if (PaintLayerScrollableArea* scrollableArea = this->getScrollableArea()) |
2976 return scrollableArea->scrollsOverflow(); | 3004 return scrollableArea->scrollsOverflow(); |
2977 | 3005 |
2978 return false; | 3006 return false; |
2979 } | 3007 } |
(...skipping 24 matching lines...) Expand all Loading... |
3004 PaintLayer::createCompositorFilterOperationsForBackdropFilter( | 3032 PaintLayer::createCompositorFilterOperationsForBackdropFilter( |
3005 const ComputedStyle& style) { | 3033 const ComputedStyle& style) { |
3006 FloatRect zoomedReferenceBox; | 3034 FloatRect zoomedReferenceBox; |
3007 if (style.backdropFilter().hasReferenceFilter()) | 3035 if (style.backdropFilter().hasReferenceFilter()) |
3008 zoomedReferenceBox = boxForFilter(); | 3036 zoomedReferenceBox = boxForFilter(); |
3009 FilterEffectBuilder builder(enclosingNode(), zoomedReferenceBox, | 3037 FilterEffectBuilder builder(enclosingNode(), zoomedReferenceBox, |
3010 style.effectiveZoom()); | 3038 style.effectiveZoom()); |
3011 return builder.buildFilterOperations(style.backdropFilter()); | 3039 return builder.buildFilterOperations(style.backdropFilter()); |
3012 } | 3040 } |
3013 | 3041 |
3014 PaintLayerFilterInfo& PaintLayer::ensureFilterInfo() { | 3042 PaintLayerResourceInfo& PaintLayer::ensureResourceInfo() { |
3015 PaintLayerRareData& rareData = ensureRareData(); | 3043 PaintLayerRareData& rareData = ensureRareData(); |
3016 if (!rareData.filterInfo) | 3044 if (!rareData.resourceInfo) |
3017 rareData.filterInfo = new PaintLayerFilterInfo(this); | 3045 rareData.resourceInfo = new PaintLayerResourceInfo(this); |
3018 return *rareData.filterInfo; | 3046 return *rareData.resourceInfo; |
3019 } | |
3020 | |
3021 void PaintLayer::removeFilterInfo() { | |
3022 if (!m_rareData || !m_rareData->filterInfo) | |
3023 return; | |
3024 m_rareData->filterInfo->clearLayer(); | |
3025 m_rareData->filterInfo = nullptr; | |
3026 } | 3047 } |
3027 | 3048 |
3028 void PaintLayer::removeAncestorOverflowLayer(const PaintLayer* removedLayer) { | 3049 void PaintLayer::removeAncestorOverflowLayer(const PaintLayer* removedLayer) { |
3029 // If the current ancestor overflow layer does not match the removed layer | 3050 // If the current ancestor overflow layer does not match the removed layer |
3030 // the ancestor overflow layer has changed so we can stop searching. | 3051 // the ancestor overflow layer has changed so we can stop searching. |
3031 if (ancestorOverflowLayer() && ancestorOverflowLayer() != removedLayer) | 3052 if (ancestorOverflowLayer() && ancestorOverflowLayer() != removedLayer) |
3032 return; | 3053 return; |
3033 | 3054 |
3034 if (ancestorOverflowLayer()) { | 3055 if (ancestorOverflowLayer()) { |
3035 // TODO(pdr): When slimming paint v2 is enabled, we will need to | 3056 // TODO(pdr): When slimming paint v2 is enabled, we will need to |
3036 // invalidate the scroll paint property subtree for this so main | 3057 // invalidate the scroll paint property subtree for this so main |
3037 // thread scroll reasons are recomputed. | 3058 // thread scroll reasons are recomputed. |
3038 ancestorOverflowLayer() | 3059 ancestorOverflowLayer() |
3039 ->getScrollableArea() | 3060 ->getScrollableArea() |
3040 ->invalidateStickyConstraintsFor(this); | 3061 ->invalidateStickyConstraintsFor(this); |
3041 } | 3062 } |
3042 updateAncestorOverflowLayer(nullptr); | 3063 updateAncestorOverflowLayer(nullptr); |
3043 PaintLayer* current = m_first; | 3064 PaintLayer* current = m_first; |
3044 while (current) { | 3065 while (current) { |
3045 current->removeAncestorOverflowLayer(removedLayer); | 3066 current->removeAncestorOverflowLayer(removedLayer); |
3046 current = current->nextSibling(); | 3067 current = current->nextSibling(); |
3047 } | 3068 } |
3048 } | 3069 } |
3049 | 3070 |
3050 FilterEffect* PaintLayer::lastFilterEffect() const { | 3071 FilterEffect* PaintLayer::lastFilterEffect() const { |
3051 // TODO(chrishtr): ensure (and assert) that compositing is clean here. | 3072 // TODO(chrishtr): ensure (and assert) that compositing is clean here. |
3052 if (!paintsWithFilters()) | 3073 if (!paintsWithFilters()) |
3053 return nullptr; | 3074 return nullptr; |
3054 PaintLayerFilterInfo* filterInfo = this->filterInfo(); | 3075 PaintLayerResourceInfo* resourceInfo = this->resourceInfo(); |
3055 DCHECK(filterInfo); | 3076 DCHECK(resourceInfo); |
3056 | 3077 |
3057 if (filterInfo->lastEffect()) | 3078 if (resourceInfo->lastEffect()) |
3058 return filterInfo->lastEffect(); | 3079 return resourceInfo->lastEffect(); |
3059 | 3080 |
3060 const ComputedStyle& style = layoutObject()->styleRef(); | 3081 const ComputedStyle& style = layoutObject()->styleRef(); |
3061 FloatRect zoomedReferenceBox; | 3082 FloatRect zoomedReferenceBox; |
3062 if (style.filter().hasReferenceFilter()) | 3083 if (style.filter().hasReferenceFilter()) |
3063 zoomedReferenceBox = boxForFilter(); | 3084 zoomedReferenceBox = boxForFilter(); |
3064 FilterEffectBuilder builder(enclosingNode(), zoomedReferenceBox, | 3085 FilterEffectBuilder builder(enclosingNode(), zoomedReferenceBox, |
3065 style.effectiveZoom()); | 3086 style.effectiveZoom()); |
3066 filterInfo->setLastEffect( | 3087 resourceInfo->setLastEffect( |
3067 builder.buildFilterEffect(addReflectionToFilterOperations(style))); | 3088 builder.buildFilterEffect(addReflectionToFilterOperations(style))); |
3068 return filterInfo->lastEffect(); | 3089 return resourceInfo->lastEffect(); |
3069 } | 3090 } |
3070 | 3091 |
3071 FloatRect PaintLayer::mapRectForFilter(const FloatRect& rect) const { | 3092 FloatRect PaintLayer::mapRectForFilter(const FloatRect& rect) const { |
3072 if (!hasFilterThatMovesPixels()) | 3093 if (!hasFilterThatMovesPixels()) |
3073 return rect; | 3094 return rect; |
3074 | 3095 |
3075 // Ensure the filter-chain is refreshed wrt reference filters. | 3096 // Ensure the filter-chain is refreshed wrt reference filters. |
3076 // TODO(fs): Avoid having this side-effect inducing call. | 3097 // TODO(fs): Avoid having this side-effect inducing call. |
3077 lastFilterEffect(); | 3098 lastFilterEffect(); |
3078 | 3099 |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3229 } | 3250 } |
3230 | 3251 |
3231 void showLayerTree(const blink::LayoutObject* layoutObject) { | 3252 void showLayerTree(const blink::LayoutObject* layoutObject) { |
3232 if (!layoutObject) { | 3253 if (!layoutObject) { |
3233 LOG(INFO) << "Cannot showLayerTree. Root is (nil)"; | 3254 LOG(INFO) << "Cannot showLayerTree. Root is (nil)"; |
3234 return; | 3255 return; |
3235 } | 3256 } |
3236 showLayerTree(layoutObject->enclosingLayer()); | 3257 showLayerTree(layoutObject->enclosingLayer()); |
3237 } | 3258 } |
3238 #endif | 3259 #endif |
OLD | NEW |