Chromium Code Reviews| Index: third_party/WebKit/Source/core/svg/graphics/filters/SVGFilterBuilder.h |
| diff --git a/third_party/WebKit/Source/core/svg/graphics/filters/SVGFilterBuilder.h b/third_party/WebKit/Source/core/svg/graphics/filters/SVGFilterBuilder.h |
| index 9328bded421d900ff1fc175cef478cd98472b778..4885ea05cd57a0333b415472b9a7ab7aea8cd379 100644 |
| --- a/third_party/WebKit/Source/core/svg/graphics/filters/SVGFilterBuilder.h |
| +++ b/third_party/WebKit/Source/core/svg/graphics/filters/SVGFilterBuilder.h |
| @@ -31,23 +31,23 @@ |
| namespace blink { |
| +class FloatRect; |
| class LayoutObject; |
| +class SVGFilterElement; |
| -class SVGFilterBuilder final : public RefCountedWillBeGarbageCollectedFinalized<SVGFilterBuilder> { |
| +// A map from LayoutObject -> FilterEffect and FilterEffect -> dependent (downstream) FilterEffects ("reverse DAG"). |
| +// Used during invalidations from changes to the primitives (graph nodes). |
| +class SVGFilterGraphNodeMap final : public RefCountedWillBeGarbageCollectedFinalized<SVGFilterGraphNodeMap> { |
| public: |
| - typedef WillBeHeapHashSet<RawPtrWillBeMember<FilterEffect>> FilterEffectSet; |
| - |
| - static PassRefPtrWillBeRawPtr<SVGFilterBuilder> create(PassRefPtrWillBeRawPtr<FilterEffect> sourceGraphic) |
| + static PassRefPtrWillBeRawPtr<SVGFilterGraphNodeMap> create() |
| { |
| - return adoptRefWillBeNoop(new SVGFilterBuilder(sourceGraphic)); |
| + return adoptRefWillBeNoop(new SVGFilterGraphNodeMap); |
| } |
| - void add(const AtomicString& id, PassRefPtrWillBeRawPtr<FilterEffect>); |
| - |
| - FilterEffect* getEffectById(const AtomicString& id) const; |
| - FilterEffect* lastEffect() const { return m_lastEffect.get(); } |
| + typedef WillBeHeapHashSet<RawPtrWillBeMember<FilterEffect>> FilterEffectSet; |
| - void appendEffectToEffectReferences(PassRefPtrWillBeRawPtr<FilterEffect>, LayoutObject*); |
| + void addBuiltinEffect(FilterEffect*); |
| + void addPrimitive(PassRefPtrWillBeRawPtr<FilterEffect>, LayoutObject*); |
|
Stephen White
2015/10/07 19:44:01
Nit: while we're here, could we switch the order o
fs
2015/10/08 10:53:11
Done.
|
| inline FilterEffectSet& effectReferences(FilterEffect* effect) |
| { |
| @@ -59,30 +59,43 @@ public: |
| // Required to change the attributes of a filter during an svgAttributeChanged. |
| inline FilterEffect* effectByRenderer(LayoutObject* object) { return m_effectRenderer.get(object); } |
| - void clearEffects(); |
| - void clearResultsRecursive(FilterEffect*); |
| + void invalidateDependentEffects(FilterEffect*); |
| DECLARE_TRACE(); |
| private: |
| - SVGFilterBuilder(PassRefPtrWillBeRawPtr<FilterEffect> sourceGraphic); |
| + SVGFilterGraphNodeMap() = default; |
| - inline void addBuiltinEffects() |
| - { |
| - for (const auto& entry : m_builtinEffects) |
| - m_effectReferences.add(entry.value, FilterEffectSet()); |
| - } |
| + // The value is a list, which contains those filter effects, |
| + // which depends on the key filter effect. |
| + WillBeHeapHashMap<RefPtrWillBeMember<FilterEffect>, FilterEffectSet> m_effectReferences; |
| + WillBeHeapHashMap<LayoutObject*, RawPtrWillBeMember<FilterEffect>> m_effectRenderer; |
| +}; |
| + |
| +class SVGFilterBuilder { |
| + STACK_ALLOCATED(); |
| +public: |
| + SVGFilterBuilder( |
| + PassRefPtrWillBeRawPtr<Filter>, |
| + PassRefPtrWillBeRawPtr<FilterEffect> sourceGraphic, |
| + PassRefPtrWillBeRawPtr<SVGFilterGraphNodeMap> = nullptr); |
| + |
| + void buildGraph(SVGFilterElement&, const FloatRect&); |
| + |
| + FilterEffect* getEffectById(const AtomicString& id) const; |
| + |
| +private: |
| + void add(const AtomicString& id, PassRefPtrWillBeRawPtr<FilterEffect>); |
| + void addBuiltinEffects(); |
| typedef WillBeHeapHashMap<AtomicString, RefPtrWillBeMember<FilterEffect>> NamedFilterEffectMap; |
| NamedFilterEffectMap m_builtinEffects; |
| NamedFilterEffectMap m_namedEffects; |
| - // The value is a list, which contains those filter effects, |
| - // which depends on the key filter effect. |
| - WillBeHeapHashMap<RefPtrWillBeMember<FilterEffect>, FilterEffectSet> m_effectReferences; |
| - WillBeHeapHashMap<LayoutObject*, RawPtrWillBeMember<FilterEffect>> m_effectRenderer; |
| RefPtrWillBeMember<FilterEffect> m_lastEffect; |
| + RefPtrWillBeMember<Filter> m_filter; |
| + RefPtrWillBeMember<SVGFilterGraphNodeMap> m_nodeMap; |
| }; |
| } // namespace blink |