Changeset 286864 in webkit
- Timestamp:
- Dec 10, 2021, 11:26:37 AM (5 years ago)
- Location:
- trunk/Source
- Files:
-
- 27 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp (modified) (1 diff)
-
WebCore/platform/graphics/filters/FilterEffect.cpp (modified) (1 diff)
-
WebCore/platform/graphics/filters/FilterEffect.h (modified) (1 diff)
-
WebCore/platform/graphics/filters/FilterEffectVector.h (modified) (1 diff)
-
WebCore/platform/graphics/filters/SourceAlpha.cpp (modified) (1 diff)
-
WebCore/rendering/CSSFilter.cpp (modified) (2 diffs)
-
WebCore/rendering/svg/RenderSVGResourceFilter.cpp (modified) (1 diff)
-
WebCore/svg/SVGFEBlendElement.cpp (modified) (1 diff)
-
WebCore/svg/SVGFEColorMatrixElement.cpp (modified) (1 diff)
-
WebCore/svg/SVGFEComponentTransferElement.cpp (modified) (1 diff)
-
WebCore/svg/SVGFECompositeElement.cpp (modified) (1 diff)
-
WebCore/svg/SVGFEConvolveMatrixElement.cpp (modified) (1 diff)
-
WebCore/svg/SVGFEDiffuseLightingElement.cpp (modified) (1 diff)
-
WebCore/svg/SVGFEDisplacementMapElement.cpp (modified) (1 diff)
-
WebCore/svg/SVGFEDropShadowElement.cpp (modified) (1 diff)
-
WebCore/svg/SVGFEGaussianBlurElement.cpp (modified) (1 diff)
-
WebCore/svg/SVGFEMergeElement.cpp (modified) (1 diff)
-
WebCore/svg/SVGFEMorphologyElement.cpp (modified) (1 diff)
-
WebCore/svg/SVGFEOffsetElement.cpp (modified) (1 diff)
-
WebCore/svg/SVGFESpecularLightingElement.cpp (modified) (1 diff)
-
WebCore/svg/SVGFETileElement.cpp (modified) (1 diff)
-
WebCore/svg/graphics/filters/SVGFilter.cpp (modified) (1 diff)
-
WebCore/svg/graphics/filters/SVGFilterBuilder.cpp (modified) (4 diffs)
-
WebCore/svg/graphics/filters/SVGFilterBuilder.h (modified) (3 diffs)
-
WebKit/ChangeLog (modified) (1 diff)
-
WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r286861 r286864 1 2021-12-10 Said Abou-Hallawa <said@apple.com> 2 3 [GPU Process] [Filters] Make FilterEffectVector a Vector of Ref<FilterEffect> 4 https://bugs.webkit.org/show_bug.cgi?id=234108 5 6 Reviewed by Cameron McCormack. 7 8 There is no case that would require inserting a nullptr in FilterEffectVector. 9 10 * platform/graphics/displaylists/DisplayListRecorder.cpp: 11 (WebCore::DisplayList::Recorder::drawFilteredImageBuffer): 12 * platform/graphics/filters/FilterEffect.cpp: 13 (WebCore::FilterEffect::inputEffect const): 14 * platform/graphics/filters/FilterEffect.h: 15 * platform/graphics/filters/FilterEffectVector.h: 16 * platform/graphics/filters/SourceAlpha.cpp: 17 (WebCore::SourceAlpha::SourceAlpha): 18 * rendering/CSSFilter.cpp: 19 (WebCore::CSSFilter::buildFilterFunctions): 20 (WebCore::CSSFilter::effectsOfType const): 21 * rendering/svg/RenderSVGResourceFilter.cpp: 22 (WebCore::RenderSVGResourceFilter::primitiveAttributeChanged): 23 * svg/SVGFEBlendElement.cpp: 24 (WebCore::SVGFEBlendElement::build const): 25 * svg/SVGFEColorMatrixElement.cpp: 26 (WebCore::SVGFEColorMatrixElement::build const): 27 * svg/SVGFEComponentTransferElement.cpp: 28 (WebCore::SVGFEComponentTransferElement::build const): 29 * svg/SVGFECompositeElement.cpp: 30 (WebCore::SVGFECompositeElement::build const): 31 * svg/SVGFEConvolveMatrixElement.cpp: 32 (WebCore::SVGFEConvolveMatrixElement::build const): 33 * svg/SVGFEDiffuseLightingElement.cpp: 34 (WebCore::SVGFEDiffuseLightingElement::build const): 35 * svg/SVGFEDisplacementMapElement.cpp: 36 (WebCore::SVGFEDisplacementMapElement::build const): 37 * svg/SVGFEDropShadowElement.cpp: 38 (WebCore::SVGFEDropShadowElement::build const): 39 * svg/SVGFEGaussianBlurElement.cpp: 40 (WebCore::SVGFEGaussianBlurElement::build const): 41 * svg/SVGFEMergeElement.cpp: 42 (WebCore::SVGFEMergeElement::build const): 43 * svg/SVGFEMorphologyElement.cpp: 44 (WebCore::SVGFEMorphologyElement::build const): 45 * svg/SVGFEOffsetElement.cpp: 46 (WebCore::SVGFEOffsetElement::build const): 47 * svg/SVGFESpecularLightingElement.cpp: 48 (WebCore::SVGFESpecularLightingElement::build const): 49 * svg/SVGFETileElement.cpp: 50 (WebCore::SVGFETileElement::build const): 51 * svg/graphics/filters/SVGFilter.cpp: 52 (WebCore::SVGFilter::effectsOfType const): 53 * svg/graphics/filters/SVGFilterBuilder.cpp: 54 (WebCore::SVGFilterBuilder::clearResultsRecursive): 55 (WebCore::SVGFilterBuilder::buildEffectExpression const): 56 (WebCore::SVGFilterBuilder::buildExpression const): 57 * svg/graphics/filters/SVGFilterBuilder.h: 58 (WebCore::SVGFilterBuilder::effectReferences): 59 1 60 2021-12-10 Devin Rousso <drousso@apple.com> 2 61 -
trunk/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp
r286824 r286864 156 156 157 157 for (auto& effect : filter.effectsOfType(FilterEffect::Type::FEImage)) { 158 bool isRecorded = WTF::switchOn(downcast<FEImage>(effect.get()) ->sourceImage(),158 bool isRecorded = WTF::switchOn(downcast<FEImage>(effect.get()).sourceImage(), 159 159 [&] (const Ref<Image>& image) { 160 160 if (auto nativeImage = image->nativeImage()) { -
trunk/Source/WebCore/platform/graphics/filters/FilterEffect.cpp
r286765 r286864 148 148 } 149 149 150 FilterEffect *FilterEffect::inputEffect(unsigned number) const150 FilterEffect& FilterEffect::inputEffect(unsigned number) const 151 151 { 152 152 ASSERT_WITH_SECURITY_IMPLICATION(number < m_inputEffects.size()); 153 return m_inputEffects.at(number) .get();153 return m_inputEffects.at(number); 154 154 } 155 155 -
trunk/Source/WebCore/platform/graphics/filters/FilterEffect.h
r286765 r286864 52 52 53 53 FilterEffectVector& inputEffects() { return m_inputEffects; } 54 FilterEffect *inputEffect(unsigned) const;54 FilterEffect& inputEffect(unsigned) const; 55 55 56 56 RefPtr<FilterImage> apply(const Filter&, const FilterImageVector& inputs, const std::optional<FilterEffectGeometry>& = std::nullopt); -
trunk/Source/WebCore/platform/graphics/filters/FilterEffectVector.h
r285916 r286864 32 32 class FilterEffect; 33 33 34 using FilterEffectVector = Vector<Ref Ptr<FilterEffect>>;34 using FilterEffectVector = Vector<Ref<FilterEffect>>; 35 35 36 36 } // namespace WebCore -
trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.cpp
r286837 r286864 47 47 { 48 48 setOperatingColorSpace(sourceEffect.operatingColorSpace()); 49 inputEffects().append( &sourceEffect);49 inputEffects().append(sourceEffect); 50 50 } 51 51 -
trunk/Source/WebCore/rendering/CSSFilter.cpp
r286824 r286864 316 316 if (effect) { 317 317 effect->setOperatingColorSpace(DestinationColorSpace::SRGB()); 318 effect->inputEffects() = { WTFMove(previousEffect) };318 effect->inputEffects() = { previousEffect.releaseNonNull() }; 319 319 m_functions.append({ *effect }); 320 320 previousEffect = WTFMove(effect); … … 354 354 for (auto& function : m_functions) { 355 355 if (function->filterType() == filterType) { 356 effects.append({ downcast<FilterEffect>(function. ptr()) });356 effects.append({ downcast<FilterEffect>(function.get()) }); 357 357 continue; 358 358 } -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp
r286835 r286864 246 246 if (!primitve->setFilterEffectAttribute(effect, attribute)) 247 247 return; 248 builder->clearResultsRecursive( effect);248 builder->clearResultsRecursive(*effect); 249 249 250 250 // Repaint the image on the screen. -
trunk/Source/WebCore/svg/SVGFEBlendElement.cpp
r285796 r286864 110 110 111 111 auto effect = FEBlend::create(mode()); 112 effect->inputEffects() = { WTFMove(input1), WTFMove(input2) };112 effect->inputEffects() = { input1.releaseNonNull(), input2.releaseNonNull() }; 113 113 return effect; 114 114 } -
trunk/Source/WebCore/svg/SVGFEColorMatrixElement.cpp
r285796 r286864 143 143 144 144 auto effect = FEColorMatrix::create(filterType, WTFMove(filterValues)); 145 effect->inputEffects() = { WTFMove(input1) };145 effect->inputEffects() = { input1.releaseNonNull() }; 146 146 return effect; 147 147 } -
trunk/Source/WebCore/svg/SVGFEComponentTransferElement.cpp
r285796 r286864 88 88 89 89 auto effect = FEComponentTransfer::create(red, green, blue, alpha); 90 effect->inputEffects() = { WTFMove(input1) };90 effect->inputEffects() = { input1.releaseNonNull() }; 91 91 return effect; 92 92 } -
trunk/Source/WebCore/svg/SVGFECompositeElement.cpp
r285796 r286864 141 141 142 142 auto effect = FEComposite::create(svgOperator(), k1(), k2(), k3(), k4()); 143 effect->inputEffects() = { WTFMove(input1), WTFMove(input2) };143 effect->inputEffects() = { input1.releaseNonNull(), input2.releaseNonNull() }; 144 144 return effect; 145 145 } -
trunk/Source/WebCore/svg/SVGFEConvolveMatrixElement.cpp
r286152 r286864 248 248 249 249 auto effect = FEConvolveMatrix::create(IntSize(orderXValue, orderYValue), divisorValue, bias(), IntPoint(targetXValue, targetYValue), edgeMode(), FloatPoint(kernelUnitLengthXValue, kernelUnitLengthYValue), preserveAlpha(), kernelMatrix); 250 effect->inputEffects() = { WTFMove(input1) };250 effect->inputEffects() = { input1.releaseNonNull() }; 251 251 return effect; 252 252 } -
trunk/Source/WebCore/svg/SVGFEDiffuseLightingElement.cpp
r285796 r286864 172 172 173 173 auto effect = FEDiffuseLighting::create(color, surfaceScale(), diffuseConstant(), kernelUnitLengthX(), kernelUnitLengthY(), WTFMove(lightSource)); 174 effect->inputEffects() = { WTFMove(input1) };174 effect->inputEffects() = { input1.releaseNonNull() }; 175 175 return effect; 176 176 } -
trunk/Source/WebCore/svg/SVGFEDisplacementMapElement.cpp
r285796 r286864 125 125 126 126 auto effect = FEDisplacementMap::create(xChannelSelector(), yChannelSelector(), scale()); 127 effect->inputEffects() = { WTFMove(input1), WTFMove(input2) };127 effect->inputEffects() = { input1.releaseNonNull(), input2.releaseNonNull() }; 128 128 return effect; 129 129 } -
trunk/Source/WebCore/svg/SVGFEDropShadowElement.cpp
r285796 r286864 117 117 118 118 auto effect = FEDropShadow::create(stdDeviationX(), stdDeviationY(), dx(), dy(), color, opacity); 119 effect->inputEffects() = { WTFMove(input1) };119 effect->inputEffects() = { input1.releaseNonNull() }; 120 120 return effect; 121 121 } -
trunk/Source/WebCore/svg/SVGFEGaussianBlurElement.cpp
r286152 r286864 106 106 107 107 auto effect = FEGaussianBlur::create(stdDeviationX(), stdDeviationY(), edgeMode()); 108 effect->inputEffects() = { WTFMove(input1) };108 effect->inputEffects() = { input1.releaseNonNull() }; 109 109 return effect; 110 110 } -
trunk/Source/WebCore/svg/SVGFEMergeElement.cpp
r286538 r286864 54 54 if (!mergeEffect) 55 55 return nullptr; 56 mergeInputs.append( WTFMove(mergeEffect));56 mergeInputs.append(mergeEffect.releaseNonNull()); 57 57 } 58 58 -
trunk/Source/WebCore/svg/SVGFEMorphologyElement.cpp
r286152 r286864 127 127 128 128 auto effect = FEMorphology::create(svgOperator(), xRadius, yRadius); 129 effect->inputEffects() = { WTFMove(input1) };129 effect->inputEffects() = { input1.releaseNonNull() }; 130 130 return effect; 131 131 } -
trunk/Source/WebCore/svg/SVGFEOffsetElement.cpp
r285796 r286864 89 89 90 90 auto effect = FEOffset::create(dx(), dy()); 91 effect->inputEffects() = { WTFMove(input1) };91 effect->inputEffects() = { input1.releaseNonNull() }; 92 92 return effect; 93 93 } -
trunk/Source/WebCore/svg/SVGFESpecularLightingElement.cpp
r285796 r286864 180 180 181 181 auto effect = FESpecularLighting::create(color, surfaceScale(), specularConstant(), specularExponent(), kernelUnitLengthX(), kernelUnitLengthY(), WTFMove(lightSource)); 182 effect->inputEffects() = { WTFMove(input1) };182 effect->inputEffects() = { input1.releaseNonNull() }; 183 183 return effect; 184 184 } -
trunk/Source/WebCore/svg/SVGFETileElement.cpp
r285796 r286864 78 78 79 79 auto effect = FETile::create(); 80 effect->inputEffects() = { WTFMove(input1) };80 effect->inputEffects() = { input1.releaseNonNull() }; 81 81 return effect; 82 82 } -
trunk/Source/WebCore/svg/graphics/filters/SVGFilter.cpp
r286824 r286864 120 120 FilterEffectVector SVGFilter::effectsOfType(FilterFunction::Type filterType) const 121 121 { 122 HashSet<Ref Ptr<FilterEffect>> effects;122 HashSet<Ref<FilterEffect>> effects; 123 123 124 124 for (auto& term : m_expression) { 125 125 auto& effect = term.effect; 126 126 if (effect->filterType() == filterType) 127 effects.add( { effect.ptr() });127 effects.add(effect); 128 128 } 129 129 -
trunk/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp
r286765 r286864 172 172 } 173 173 174 void SVGFilterBuilder::clearResultsRecursive(FilterEffect *effect)175 { 176 if (!effect ->hasResult())174 void SVGFilterBuilder::clearResultsRecursive(FilterEffect& effect) 175 { 176 if (!effect.hasResult()) 177 177 return; 178 178 179 effect ->clearResult();179 effect.clearResult(); 180 180 181 181 for (auto& reference : effectReferences(effect)) 182 clearResultsRecursive( reference);182 clearResultsRecursive(*reference); 183 183 } 184 184 … … 191 191 } 192 192 193 bool SVGFilterBuilder::buildEffectExpression( const RefPtr<FilterEffect>& effect, FilterEffectVector& stack, unsigned level, SVGFilterExpression& expression) const193 bool SVGFilterBuilder::buildEffectExpression(FilterEffect& effect, FilterEffectVector& stack, unsigned level, SVGFilterExpression& expression) const 194 194 { 195 195 // A cycle is detected. … … 199 199 stack.append(effect); 200 200 201 expression.append({ *effect, effectGeometry(*effect), level });202 203 for (auto& inputEffect : effect ->inputEffects()) {201 expression.append({ effect, effectGeometry(effect), level }); 202 203 for (auto& inputEffect : effect.inputEffects()) { 204 204 if (!buildEffectExpression(inputEffect, stack, level + 1, expression)) 205 205 return false; … … 219 219 220 220 FilterEffectVector stack; 221 if (!buildEffectExpression( m_lastEffect, stack, 0, expression))221 if (!buildEffectExpression(*m_lastEffect, stack, 0, expression)) 222 222 return false; 223 223 -
trunk/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.h
r286589 r286864 55 55 void appendEffectToEffectReferences(RefPtr<FilterEffect>&&, RenderObject*); 56 56 57 inline FilterEffectSet& effectReferences(FilterEffect *effect)57 inline FilterEffectSet& effectReferences(FilterEffect& effect) 58 58 { 59 59 // Only allowed for effects belongs to this builder. 60 ASSERT(m_effectReferences.contains( effect));61 return m_effectReferences.find( effect)->value;60 ASSERT(m_effectReferences.contains(&effect)); 61 return m_effectReferences.find(&effect)->value; 62 62 } 63 63 … … 66 66 67 67 void clearEffects(); 68 void clearResultsRecursive(FilterEffect *);68 void clearResultsRecursive(FilterEffect&); 69 69 70 70 void setupBuiltinEffects(Ref<FilterEffect> sourceGraphic); … … 80 80 81 81 std::optional<FilterEffectGeometry> effectGeometry(FilterEffect&) const; 82 bool buildEffectExpression( const RefPtr<FilterEffect>&, FilterEffectVector& stack, unsigned level, SVGFilterExpression&) const;82 bool buildEffectExpression(FilterEffect&, FilterEffectVector& stack, unsigned level, SVGFilterExpression&) const; 83 83 84 84 HashMap<AtomString, RefPtr<FilterEffect>> m_builtinEffects; -
trunk/Source/WebKit/ChangeLog
r286859 r286864 1 2021-12-10 Said Abou-Hallawa <said@apple.com> 2 3 [GPU Process] [Filters] Make FilterEffectVector a Vector of Ref<FilterEffect> 4 https://bugs.webkit.org/show_bug.cgi?id=234108 5 6 Reviewed by Cameron McCormack. 7 8 * GPUProcess/graphics/RemoteDisplayListRecorder.cpp: 9 (WebKit::RemoteDisplayListRecorder::drawFilteredImageBuffer): 10 1 11 2021-12-10 Per Arne Vollan <pvollan@apple.com> 2 12 -
trunk/Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.cpp
r286824 r286864 237 237 238 238 for (auto& effect : filter->effectsOfType(FilterEffect::Type::FEImage)) { 239 auto& feImage = *downcast<FEImage>(effect.get());239 auto& feImage = downcast<FEImage>(effect.get()); 240 240 241 241 const auto* resourceIdentifier = std::get_if<RenderingResourceIdentifier>(&feImage.sourceImage());
Note:
See TracChangeset
for help on using the changeset viewer.