Title: [286864] trunk/Source
Revision
286864
Author
[email protected]
Date
2021-12-10 11:26:37 -0800 (Fri, 10 Dec 2021)

Log Message

[GPU Process] [Filters] Make FilterEffectVector a Vector of Ref<FilterEffect>
https://bugs.webkit.org/show_bug.cgi?id=234108

Reviewed by Cameron McCormack.

Source/WebCore:

There is no case that would require inserting a nullptr in FilterEffectVector.

* platform/graphics/displaylists/DisplayListRecorder.cpp:
(WebCore::DisplayList::Recorder::drawFilteredImageBuffer):
* platform/graphics/filters/FilterEffect.cpp:
(WebCore::FilterEffect::inputEffect const):
* platform/graphics/filters/FilterEffect.h:
* platform/graphics/filters/FilterEffectVector.h:
* platform/graphics/filters/SourceAlpha.cpp:
(WebCore::SourceAlpha::SourceAlpha):
* rendering/CSSFilter.cpp:
(WebCore::CSSFilter::buildFilterFunctions):
(WebCore::CSSFilter::effectsOfType const):
* rendering/svg/RenderSVGResourceFilter.cpp:
(WebCore::RenderSVGResourceFilter::primitiveAttributeChanged):
* svg/SVGFEBlendElement.cpp:
(WebCore::SVGFEBlendElement::build const):
* svg/SVGFEColorMatrixElement.cpp:
(WebCore::SVGFEColorMatrixElement::build const):
* svg/SVGFEComponentTransferElement.cpp:
(WebCore::SVGFEComponentTransferElement::build const):
* svg/SVGFECompositeElement.cpp:
(WebCore::SVGFECompositeElement::build const):
* svg/SVGFEConvolveMatrixElement.cpp:
(WebCore::SVGFEConvolveMatrixElement::build const):
* svg/SVGFEDiffuseLightingElement.cpp:
(WebCore::SVGFEDiffuseLightingElement::build const):
* svg/SVGFEDisplacementMapElement.cpp:
(WebCore::SVGFEDisplacementMapElement::build const):
* svg/SVGFEDropShadowElement.cpp:
(WebCore::SVGFEDropShadowElement::build const):
* svg/SVGFEGaussianBlurElement.cpp:
(WebCore::SVGFEGaussianBlurElement::build const):
* svg/SVGFEMergeElement.cpp:
(WebCore::SVGFEMergeElement::build const):
* svg/SVGFEMorphologyElement.cpp:
(WebCore::SVGFEMorphologyElement::build const):
* svg/SVGFEOffsetElement.cpp:
(WebCore::SVGFEOffsetElement::build const):
* svg/SVGFESpecularLightingElement.cpp:
(WebCore::SVGFESpecularLightingElement::build const):
* svg/SVGFETileElement.cpp:
(WebCore::SVGFETileElement::build const):
* svg/graphics/filters/SVGFilter.cpp:
(WebCore::SVGFilter::effectsOfType const):
* svg/graphics/filters/SVGFilterBuilder.cpp:
(WebCore::SVGFilterBuilder::clearResultsRecursive):
(WebCore::SVGFilterBuilder::buildEffectExpression const):
(WebCore::SVGFilterBuilder::buildExpression const):
* svg/graphics/filters/SVGFilterBuilder.h:
(WebCore::SVGFilterBuilder::effectReferences):

Source/WebKit:

* GPUProcess/graphics/RemoteDisplayListRecorder.cpp:
(WebKit::RemoteDisplayListRecorder::drawFilteredImageBuffer):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (286863 => 286864)


--- trunk/Source/WebCore/ChangeLog	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/ChangeLog	2021-12-10 19:26:37 UTC (rev 286864)
@@ -1,3 +1,62 @@
+2021-12-10  Said Abou-Hallawa  <[email protected]>
+
+        [GPU Process] [Filters] Make FilterEffectVector a Vector of Ref<FilterEffect>
+        https://bugs.webkit.org/show_bug.cgi?id=234108
+
+        Reviewed by Cameron McCormack.
+
+        There is no case that would require inserting a nullptr in FilterEffectVector.
+
+        * platform/graphics/displaylists/DisplayListRecorder.cpp:
+        (WebCore::DisplayList::Recorder::drawFilteredImageBuffer):
+        * platform/graphics/filters/FilterEffect.cpp:
+        (WebCore::FilterEffect::inputEffect const):
+        * platform/graphics/filters/FilterEffect.h:
+        * platform/graphics/filters/FilterEffectVector.h:
+        * platform/graphics/filters/SourceAlpha.cpp:
+        (WebCore::SourceAlpha::SourceAlpha):
+        * rendering/CSSFilter.cpp:
+        (WebCore::CSSFilter::buildFilterFunctions):
+        (WebCore::CSSFilter::effectsOfType const):
+        * rendering/svg/RenderSVGResourceFilter.cpp:
+        (WebCore::RenderSVGResourceFilter::primitiveAttributeChanged):
+        * svg/SVGFEBlendElement.cpp:
+        (WebCore::SVGFEBlendElement::build const):
+        * svg/SVGFEColorMatrixElement.cpp:
+        (WebCore::SVGFEColorMatrixElement::build const):
+        * svg/SVGFEComponentTransferElement.cpp:
+        (WebCore::SVGFEComponentTransferElement::build const):
+        * svg/SVGFECompositeElement.cpp:
+        (WebCore::SVGFECompositeElement::build const):
+        * svg/SVGFEConvolveMatrixElement.cpp:
+        (WebCore::SVGFEConvolveMatrixElement::build const):
+        * svg/SVGFEDiffuseLightingElement.cpp:
+        (WebCore::SVGFEDiffuseLightingElement::build const):
+        * svg/SVGFEDisplacementMapElement.cpp:
+        (WebCore::SVGFEDisplacementMapElement::build const):
+        * svg/SVGFEDropShadowElement.cpp:
+        (WebCore::SVGFEDropShadowElement::build const):
+        * svg/SVGFEGaussianBlurElement.cpp:
+        (WebCore::SVGFEGaussianBlurElement::build const):
+        * svg/SVGFEMergeElement.cpp:
+        (WebCore::SVGFEMergeElement::build const):
+        * svg/SVGFEMorphologyElement.cpp:
+        (WebCore::SVGFEMorphologyElement::build const):
+        * svg/SVGFEOffsetElement.cpp:
+        (WebCore::SVGFEOffsetElement::build const):
+        * svg/SVGFESpecularLightingElement.cpp:
+        (WebCore::SVGFESpecularLightingElement::build const):
+        * svg/SVGFETileElement.cpp:
+        (WebCore::SVGFETileElement::build const):
+        * svg/graphics/filters/SVGFilter.cpp:
+        (WebCore::SVGFilter::effectsOfType const):
+        * svg/graphics/filters/SVGFilterBuilder.cpp:
+        (WebCore::SVGFilterBuilder::clearResultsRecursive):
+        (WebCore::SVGFilterBuilder::buildEffectExpression const):
+        (WebCore::SVGFilterBuilder::buildExpression const):
+        * svg/graphics/filters/SVGFilterBuilder.h:
+        (WebCore::SVGFilterBuilder::effectReferences):
+
 2021-12-10  Devin Rousso  <[email protected]>
 
         Add a way to write a `SharedBuffer` to the Pasteboard

Modified: trunk/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp (286863 => 286864)


--- trunk/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -155,7 +155,7 @@
     }
 
     for (auto& effect : filter.effectsOfType(FilterEffect::Type::FEImage)) {
-        bool isRecorded = WTF::switchOn(downcast<FEImage>(effect.get())->sourceImage(),
+        bool isRecorded = WTF::switchOn(downcast<FEImage>(effect.get()).sourceImage(),
             [&] (const Ref<Image>& image) {
                 if (auto nativeImage = image->nativeImage()) {
                     recordResourceUse(*nativeImage);

Modified: trunk/Source/WebCore/platform/graphics/filters/FilterEffect.cpp (286863 => 286864)


--- trunk/Source/WebCore/platform/graphics/filters/FilterEffect.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterEffect.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -147,10 +147,10 @@
     return m_filterImage;
 }
 
-FilterEffect* FilterEffect::inputEffect(unsigned number) const
+FilterEffect& FilterEffect::inputEffect(unsigned number) const
 {
     ASSERT_WITH_SECURITY_IMPLICATION(number < m_inputEffects.size());
-    return m_inputEffects.at(number).get();
+    return m_inputEffects.at(number);
 }
 
 void FilterEffect::clearResult()

Modified: trunk/Source/WebCore/platform/graphics/filters/FilterEffect.h (286863 => 286864)


--- trunk/Source/WebCore/platform/graphics/filters/FilterEffect.h	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterEffect.h	2021-12-10 19:26:37 UTC (rev 286864)
@@ -51,7 +51,7 @@
     FilterImageVector takeImageInputs(FilterImageVector& stack) const;
 
     FilterEffectVector& inputEffects() { return m_inputEffects; }
-    FilterEffect* inputEffect(unsigned) const;
+    FilterEffect& inputEffect(unsigned) const;
 
     RefPtr<FilterImage> apply(const Filter&, const FilterImageVector& inputs, const std::optional<FilterEffectGeometry>& = std::nullopt);
 

Modified: trunk/Source/WebCore/platform/graphics/filters/FilterEffectVector.h (286863 => 286864)


--- trunk/Source/WebCore/platform/graphics/filters/FilterEffectVector.h	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterEffectVector.h	2021-12-10 19:26:37 UTC (rev 286864)
@@ -31,6 +31,6 @@
 
 class FilterEffect;
 
-using FilterEffectVector = Vector<RefPtr<FilterEffect>>;
+using FilterEffectVector = Vector<Ref<FilterEffect>>;
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.cpp (286863 => 286864)


--- trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -46,7 +46,7 @@
     : FilterEffect(FilterEffect::Type::SourceAlpha)
 {
     setOperatingColorSpace(sourceEffect.operatingColorSpace());
-    inputEffects().append(&sourceEffect);
+    inputEffects().append(sourceEffect);
 }
 
 std::unique_ptr<FilterEffectApplier> SourceAlpha::createApplier(const Filter&) const

Modified: trunk/Source/WebCore/rendering/CSSFilter.cpp (286863 => 286864)


--- trunk/Source/WebCore/rendering/CSSFilter.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/rendering/CSSFilter.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -315,7 +315,7 @@
 
         if (effect) {
             effect->setOperatingColorSpace(DestinationColorSpace::SRGB());
-            effect->inputEffects() = { WTFMove(previousEffect) };
+            effect->inputEffects() = { previousEffect.releaseNonNull() };
             m_functions.append({ *effect });
             previousEffect = WTFMove(effect);
         }
@@ -353,7 +353,7 @@
 
     for (auto& function : m_functions) {
         if (function->filterType() == filterType) {
-            effects.append({ downcast<FilterEffect>(function.ptr()) });
+            effects.append({ downcast<FilterEffect>(function.get()) });
             continue;
         }
 

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp (286863 => 286864)


--- trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -245,7 +245,7 @@
         // or none of them will be changed.
         if (!primitve->setFilterEffectAttribute(effect, attribute))
             return;
-        builder->clearResultsRecursive(effect);
+        builder->clearResultsRecursive(*effect);
 
         // Repaint the image on the screen.
         markClientForInvalidation(*objectFilterDataPair.key, RepaintInvalidation);

Modified: trunk/Source/WebCore/svg/SVGFEBlendElement.cpp (286863 => 286864)


--- trunk/Source/WebCore/svg/SVGFEBlendElement.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/svg/SVGFEBlendElement.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -109,7 +109,7 @@
         return nullptr;
 
     auto effect = FEBlend::create(mode());
-    effect->inputEffects() = { WTFMove(input1), WTFMove(input2) };
+    effect->inputEffects() = { input1.releaseNonNull(), input2.releaseNonNull() };
     return effect;
 }
 

Modified: trunk/Source/WebCore/svg/SVGFEColorMatrixElement.cpp (286863 => 286864)


--- trunk/Source/WebCore/svg/SVGFEColorMatrixElement.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/svg/SVGFEColorMatrixElement.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -142,7 +142,7 @@
     }
 
     auto effect = FEColorMatrix::create(filterType, WTFMove(filterValues));
-    effect->inputEffects() = { WTFMove(input1) };
+    effect->inputEffects() = { input1.releaseNonNull() };
     return effect;
 }
 

Modified: trunk/Source/WebCore/svg/SVGFEComponentTransferElement.cpp (286863 => 286864)


--- trunk/Source/WebCore/svg/SVGFEComponentTransferElement.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/svg/SVGFEComponentTransferElement.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -87,7 +87,7 @@
     }
 
     auto effect = FEComponentTransfer::create(red, green, blue, alpha);
-    effect->inputEffects() = { WTFMove(input1) };
+    effect->inputEffects() = { input1.releaseNonNull() };
     return effect;
 }
 

Modified: trunk/Source/WebCore/svg/SVGFECompositeElement.cpp (286863 => 286864)


--- trunk/Source/WebCore/svg/SVGFECompositeElement.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/svg/SVGFECompositeElement.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -140,7 +140,7 @@
         return nullptr;
 
     auto effect = FEComposite::create(svgOperator(), k1(), k2(), k3(), k4());
-    effect->inputEffects() = { WTFMove(input1), WTFMove(input2) };
+    effect->inputEffects() = { input1.releaseNonNull(), input2.releaseNonNull() };
     return effect;
 }
 

Modified: trunk/Source/WebCore/svg/SVGFEConvolveMatrixElement.cpp (286863 => 286864)


--- trunk/Source/WebCore/svg/SVGFEConvolveMatrixElement.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/svg/SVGFEConvolveMatrixElement.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -247,7 +247,7 @@
     }
 
     auto effect = FEConvolveMatrix::create(IntSize(orderXValue, orderYValue), divisorValue, bias(), IntPoint(targetXValue, targetYValue), edgeMode(), FloatPoint(kernelUnitLengthXValue, kernelUnitLengthYValue), preserveAlpha(), kernelMatrix);
-    effect->inputEffects() = { WTFMove(input1) };
+    effect->inputEffects() = { input1.releaseNonNull() };
     return effect;
 }
 

Modified: trunk/Source/WebCore/svg/SVGFEDiffuseLightingElement.cpp (286863 => 286864)


--- trunk/Source/WebCore/svg/SVGFEDiffuseLightingElement.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/svg/SVGFEDiffuseLightingElement.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -171,7 +171,7 @@
     Color color = renderer->style().colorByApplyingColorFilter(renderer->style().svgStyle().lightingColor());
 
     auto effect = FEDiffuseLighting::create(color, surfaceScale(), diffuseConstant(), kernelUnitLengthX(), kernelUnitLengthY(), WTFMove(lightSource));
-    effect->inputEffects() = { WTFMove(input1) };
+    effect->inputEffects() = { input1.releaseNonNull() };
     return effect;
 }
 

Modified: trunk/Source/WebCore/svg/SVGFEDisplacementMapElement.cpp (286863 => 286864)


--- trunk/Source/WebCore/svg/SVGFEDisplacementMapElement.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/svg/SVGFEDisplacementMapElement.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -124,7 +124,7 @@
         return nullptr;
 
     auto effect = FEDisplacementMap::create(xChannelSelector(), yChannelSelector(), scale());
-    effect->inputEffects() = { WTFMove(input1), WTFMove(input2) };
+    effect->inputEffects() = { input1.releaseNonNull(), input2.releaseNonNull() };
     return effect;
 }
 

Modified: trunk/Source/WebCore/svg/SVGFEDropShadowElement.cpp (286863 => 286864)


--- trunk/Source/WebCore/svg/SVGFEDropShadowElement.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/svg/SVGFEDropShadowElement.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -116,7 +116,7 @@
     float opacity = svgStyle.floodOpacity();
 
     auto effect = FEDropShadow::create(stdDeviationX(), stdDeviationY(), dx(), dy(), color, opacity);
-    effect->inputEffects() = { WTFMove(input1) };
+    effect->inputEffects() = { input1.releaseNonNull() };
     return effect;
 }
 

Modified: trunk/Source/WebCore/svg/SVGFEGaussianBlurElement.cpp (286863 => 286864)


--- trunk/Source/WebCore/svg/SVGFEGaussianBlurElement.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/svg/SVGFEGaussianBlurElement.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -105,7 +105,7 @@
         return nullptr;
 
     auto effect = FEGaussianBlur::create(stdDeviationX(), stdDeviationY(), edgeMode());
-    effect->inputEffects() = { WTFMove(input1) };
+    effect->inputEffects() = { input1.releaseNonNull() };
     return effect;
 }
 

Modified: trunk/Source/WebCore/svg/SVGFEMergeElement.cpp (286863 => 286864)


--- trunk/Source/WebCore/svg/SVGFEMergeElement.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/svg/SVGFEMergeElement.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -53,7 +53,7 @@
         auto mergeEffect = filterBuilder.getEffectById(mergeNode.in1());
         if (!mergeEffect)
             return nullptr;
-        mergeInputs.append(WTFMove(mergeEffect));
+        mergeInputs.append(mergeEffect.releaseNonNull());
     }
 
     mergeInputs.shrinkToFit();

Modified: trunk/Source/WebCore/svg/SVGFEMorphologyElement.cpp (286863 => 286864)


--- trunk/Source/WebCore/svg/SVGFEMorphologyElement.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/svg/SVGFEMorphologyElement.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -126,7 +126,7 @@
         return nullptr;
 
     auto effect = FEMorphology::create(svgOperator(), xRadius, yRadius);
-    effect->inputEffects() = { WTFMove(input1) };
+    effect->inputEffects() = { input1.releaseNonNull() };
     return effect;
 }
 

Modified: trunk/Source/WebCore/svg/SVGFEOffsetElement.cpp (286863 => 286864)


--- trunk/Source/WebCore/svg/SVGFEOffsetElement.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/svg/SVGFEOffsetElement.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -88,7 +88,7 @@
         return nullptr;
 
     auto effect = FEOffset::create(dx(), dy());
-    effect->inputEffects() = { WTFMove(input1) };
+    effect->inputEffects() = { input1.releaseNonNull() };
     return effect;
 }
 

Modified: trunk/Source/WebCore/svg/SVGFESpecularLightingElement.cpp (286863 => 286864)


--- trunk/Source/WebCore/svg/SVGFESpecularLightingElement.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/svg/SVGFESpecularLightingElement.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -179,7 +179,7 @@
     Color color = renderer->style().colorByApplyingColorFilter(renderer->style().svgStyle().lightingColor());
 
     auto effect = FESpecularLighting::create(color, surfaceScale(), specularConstant(), specularExponent(), kernelUnitLengthX(), kernelUnitLengthY(), WTFMove(lightSource));
-    effect->inputEffects() = { WTFMove(input1) };
+    effect->inputEffects() = { input1.releaseNonNull() };
     return effect;
 }
 

Modified: trunk/Source/WebCore/svg/SVGFETileElement.cpp (286863 => 286864)


--- trunk/Source/WebCore/svg/SVGFETileElement.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/svg/SVGFETileElement.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -77,7 +77,7 @@
         return nullptr;
 
     auto effect = FETile::create();
-    effect->inputEffects() = { WTFMove(input1) };
+    effect->inputEffects() = { input1.releaseNonNull() };
     return effect;
 }
 

Modified: trunk/Source/WebCore/svg/graphics/filters/SVGFilter.cpp (286863 => 286864)


--- trunk/Source/WebCore/svg/graphics/filters/SVGFilter.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/svg/graphics/filters/SVGFilter.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -119,12 +119,12 @@
 
 FilterEffectVector SVGFilter::effectsOfType(FilterFunction::Type filterType) const
 {
-    HashSet<RefPtr<FilterEffect>> effects;
+    HashSet<Ref<FilterEffect>> effects;
 
     for (auto& term : m_expression) {
         auto& effect = term.effect;
         if (effect->filterType() == filterType)
-            effects.add({ effect.ptr() });
+            effects.add(effect);
     }
 
     return copyToVector(effects);

Modified: trunk/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp (286863 => 286864)


--- trunk/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -171,15 +171,15 @@
     addBuiltinEffects();
 }
 
-void SVGFilterBuilder::clearResultsRecursive(FilterEffect* effect)
+void SVGFilterBuilder::clearResultsRecursive(FilterEffect& effect)
 {
-    if (!effect->hasResult())
+    if (!effect.hasResult())
         return;
 
-    effect->clearResult();
+    effect.clearResult();
 
     for (auto& reference : effectReferences(effect))
-        clearResultsRecursive(reference);
+        clearResultsRecursive(*reference);
 }
 
 std::optional<FilterEffectGeometry> SVGFilterBuilder::effectGeometry(FilterEffect& effect) const
@@ -190,7 +190,7 @@
     return std::nullopt;
 }
 
-bool SVGFilterBuilder::buildEffectExpression(const RefPtr<FilterEffect>& effect, FilterEffectVector& stack, unsigned level, SVGFilterExpression& _expression_) const
+bool SVGFilterBuilder::buildEffectExpression(FilterEffect& effect, FilterEffectVector& stack, unsigned level, SVGFilterExpression& _expression_) const
 {
     // A cycle is detected.
     if (stack.contains(effect))
@@ -198,9 +198,9 @@
 
     stack.append(effect);
     
-    _expression_.append({ *effect, effectGeometry(*effect), level });
+    _expression_.append({ effect, effectGeometry(effect), level });
 
-    for (auto& inputEffect : effect->inputEffects()) {
+    for (auto& inputEffect : effect.inputEffects()) {
         if (!buildEffectExpression(inputEffect, stack, level + 1, _expression_))
             return false;
     }
@@ -218,7 +218,7 @@
         return false;
 
     FilterEffectVector stack;
-    if (!buildEffectExpression(m_lastEffect, stack, 0, _expression_))
+    if (!buildEffectExpression(*m_lastEffect, stack, 0, _expression_))
         return false;
 
     if (_expression_.size() > maxTotalNumberFilterEffects)

Modified: trunk/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.h (286863 => 286864)


--- trunk/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.h	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.h	2021-12-10 19:26:37 UTC (rev 286864)
@@ -54,11 +54,11 @@
 
     void appendEffectToEffectReferences(RefPtr<FilterEffect>&&, RenderObject*);
 
-    inline FilterEffectSet& effectReferences(FilterEffect* effect)
+    inline FilterEffectSet& effectReferences(FilterEffect& effect)
     {
         // Only allowed for effects belongs to this builder.
-        ASSERT(m_effectReferences.contains(effect));
-        return m_effectReferences.find(effect)->value;
+        ASSERT(m_effectReferences.contains(&effect));
+        return m_effectReferences.find(&effect)->value;
     }
 
     // Required to change the attributes of a filter during an svgAttributeChanged.
@@ -65,7 +65,7 @@
     inline FilterEffect* effectByRenderer(RenderObject* object) { return m_effectRenderer.get(object); }
 
     void clearEffects();
-    void clearResultsRecursive(FilterEffect*);
+    void clearResultsRecursive(FilterEffect&);
 
     void setupBuiltinEffects(Ref<FilterEffect> sourceGraphic);
     RefPtr<FilterEffect> buildFilterEffects(SVGFilterElement&);
@@ -79,7 +79,7 @@
     }
 
     std::optional<FilterEffectGeometry> effectGeometry(FilterEffect&) const;
-    bool buildEffectExpression(const RefPtr<FilterEffect>&, FilterEffectVector& stack, unsigned level, SVGFilterExpression&) const;
+    bool buildEffectExpression(FilterEffect&, FilterEffectVector& stack, unsigned level, SVGFilterExpression&) const;
 
     HashMap<AtomString, RefPtr<FilterEffect>> m_builtinEffects;
     HashMap<AtomString, RefPtr<FilterEffect>> m_namedEffects;

Modified: trunk/Source/WebKit/ChangeLog (286863 => 286864)


--- trunk/Source/WebKit/ChangeLog	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebKit/ChangeLog	2021-12-10 19:26:37 UTC (rev 286864)
@@ -1,3 +1,13 @@
+2021-12-10  Said Abou-Hallawa  <[email protected]>
+
+        [GPU Process] [Filters] Make FilterEffectVector a Vector of Ref<FilterEffect>
+        https://bugs.webkit.org/show_bug.cgi?id=234108
+
+        Reviewed by Cameron McCormack.
+
+        * GPUProcess/graphics/RemoteDisplayListRecorder.cpp:
+        (WebKit::RemoteDisplayListRecorder::drawFilteredImageBuffer):
+
 2021-12-10  Per Arne Vollan  <[email protected]>
 
         [WP][macOS] Add required system call

Modified: trunk/Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.cpp (286863 => 286864)


--- trunk/Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.cpp	2021-12-10 19:26:14 UTC (rev 286863)
+++ trunk/Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.cpp	2021-12-10 19:26:37 UTC (rev 286864)
@@ -236,7 +236,7 @@
     auto filter = filterReference.takeFilter();
 
     for (auto& effect : filter->effectsOfType(FilterEffect::Type::FEImage)) {
-        auto& feImage = *downcast<FEImage>(effect.get());
+        auto& feImage = downcast<FEImage>(effect.get());
 
         const auto* resourceIdentifier = std::get_if<RenderingResourceIdentifier>(&feImage.sourceImage());
         if (!resourceIdentifier) {
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to