Index: third_party/WebKit/Source/core/paint/PaintLayer.cpp |
diff --git a/third_party/WebKit/Source/core/paint/PaintLayer.cpp b/third_party/WebKit/Source/core/paint/PaintLayer.cpp |
index c96f42c49d496e00d9ca3538e287babc7d8d072d..02f40fbc8e3eec86471d78e74fd9cdc5292aa228 100644 |
--- a/third_party/WebKit/Source/core/paint/PaintLayer.cpp |
+++ b/third_party/WebKit/Source/core/paint/PaintLayer.cpp |
@@ -149,7 +149,6 @@ PaintLayer::PaintLayer(LayoutBoxModelObject* layoutObject, PaintLayerType type) |
, m_3DTransformedDescendantStatusDirty(true) |
, m_has3DTransformedDescendant(false) |
, m_containsDirtyOverlayScrollbars(false) |
- , m_hasFilterInfo(false) |
, m_needsAncestorDependentCompositingInputsUpdate(true) |
, m_needsDescendantDependentCompositingInputsUpdate(true) |
, m_childNeedsCompositingInputsUpdate(true) |
@@ -193,8 +192,6 @@ PaintLayer::~PaintLayer() |
scrollingCoordinator->willDestroyLayer(this); |
} |
- removeFilterInfoIfNeeded(); |
- |
if (groupedMapping()) { |
DisableCompositingQueryAsserts disabler; |
setGroupedMapping(0, InvalidateLayerAndRemoveFromMapping); |
@@ -2614,17 +2611,23 @@ FilterOperations PaintLayer::computeBackdropFilterOperations(const ComputedStyle |
return computeFilterOperationsHandleReferenceFilters(style.backdropFilter(), style.effectiveZoom(), enclosingNode()); |
} |
-void PaintLayer::updateOrRemoveFilterClients() |
+PaintLayerFilterInfo& PaintLayer::ensureFilterInfo() |
{ |
- if (!hasFilter()) { |
- removeFilterInfoIfNeeded(); |
- return; |
- } |
+ PaintLayerRareData& rareData = ensureRareData(); |
+ if (!rareData.filterInfo) |
+ rareData.filterInfo = adoptPtr(new PaintLayerFilterInfo(this)); |
+ return *rareData.filterInfo; |
+} |
- if (layoutObject()->style()->filter().hasReferenceFilter()) |
- ensureFilterInfo()->updateReferenceFilterClients(layoutObject()->style()->filter()); |
- else if (hasFilterInfo()) |
+void PaintLayer::updateOrRemoveFilterClients() |
+{ |
+ if (!hasFilter() && m_rareData) { |
+ m_rareData->filterInfo = nullptr; |
+ } else if (layoutObject()->style()->filter().hasReferenceFilter()) { |
+ ensureFilterInfo().updateReferenceFilterClients(layoutObject()->style()->filter()); |
+ } else if (filterInfo()) { |
filterInfo()->clearFilterReferences(); |
+ } |
} |
FilterEffectBuilder* PaintLayer::updateFilterEffectBuilder() const |
@@ -2683,7 +2686,7 @@ void PaintLayer::updateOrRemoveFilterEffectBuilder() |
return; |
} |
- ensureFilterInfo()->setBuilder(nullptr); |
+ ensureFilterInfo().setBuilder(nullptr); |
} |
void PaintLayer::filterNeedsPaintInvalidation() |