Title: [285543] trunk/Source/WebCore
Revision
285543
Author
[email protected]
Date
2021-11-09 16:40:53 -0800 (Tue, 09 Nov 2021)

Log Message

[GPU Process] Introduce FilterFunction and make it the base class of Filter and FilterEffect
https://bugs.webkit.org/show_bug.cgi?id=232413
rdar://84966765

Reviewed by Myles C. Maxfield.

This allows CSSFilter to hold a list of FilterFunctions. The Filter in
this case will act like a composite pattern of FilterEffects.

This patch also
1. Removes the virtual function filterName() from all the FilterEffect
   classes. It replaces it with a static function in FilterFunction.
2. Removes the virtual function filterEffectType() and the function
   FilterEffect::filterEffectClassType() since they can both be replaced
   by FilterFunction::filterType().
3. Adds trait macros for all FilterEffects and the SVGFilters class.

* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:
(WebCore::FilterEffectRendererCoreImage::supportsCoreImageRendering):
(WebCore::FilterEffectRendererCoreImage::connectCIFilters):
* platform/graphics/filters/FEBlend.cpp:
(WebCore::FEBlend::FEBlend):
* platform/graphics/filters/FEBlend.h:
(): Deleted.
* platform/graphics/filters/FEColorMatrix.cpp:
(WebCore::FEColorMatrix::FEColorMatrix):
* platform/graphics/filters/FEColorMatrix.h:
(isType): Deleted.
* platform/graphics/filters/FEComponentTransfer.cpp:
(WebCore::FEComponentTransfer::FEComponentTransfer):
* platform/graphics/filters/FEComponentTransfer.h:
(isType): Deleted.
* platform/graphics/filters/FEComposite.cpp:
(WebCore::FEComposite::FEComposite):
* platform/graphics/filters/FEComposite.h:
* platform/graphics/filters/FEConvolveMatrix.cpp:
(WebCore::FEConvolveMatrix::FEConvolveMatrix):
* platform/graphics/filters/FEConvolveMatrix.h:
* platform/graphics/filters/FEDiffuseLighting.cpp:
(WebCore::FEDiffuseLighting::FEDiffuseLighting):
* platform/graphics/filters/FEDiffuseLighting.h:
* platform/graphics/filters/FEDisplacementMap.cpp:
(WebCore::FEDisplacementMap::FEDisplacementMap):
* platform/graphics/filters/FEDisplacementMap.h:
* platform/graphics/filters/FEDropShadow.cpp:
(WebCore::FEDropShadow::FEDropShadow):
* platform/graphics/filters/FEDropShadow.h:
(): Deleted.
* platform/graphics/filters/FEFlood.cpp:
(WebCore::FEFlood::FEFlood):
* platform/graphics/filters/FEFlood.h:
* platform/graphics/filters/FEGaussianBlur.cpp:
(WebCore::FEGaussianBlur::FEGaussianBlur):
* platform/graphics/filters/FEGaussianBlur.h:
(): Deleted.
* platform/graphics/filters/FELighting.h:
* platform/graphics/filters/FEMerge.cpp:
(WebCore::FEMerge::FEMerge):
* platform/graphics/filters/FEMerge.h:
(): Deleted.
* platform/graphics/filters/FEMorphology.cpp:
(WebCore::FEMorphology::FEMorphology):
* platform/graphics/filters/FEMorphology.h:
* platform/graphics/filters/FEOffset.cpp:
(WebCore::FEOffset::FEOffset):
* platform/graphics/filters/FEOffset.h:
(): Deleted.
* platform/graphics/filters/FESpecularLighting.cpp:
(WebCore::FESpecularLighting::FESpecularLighting):
* platform/graphics/filters/FESpecularLighting.h:
* platform/graphics/filters/FETile.cpp:
(WebCore::FETile::FETile):
(WebCore::FETile::platformApplySoftware):
* platform/graphics/filters/FETile.h:
* platform/graphics/filters/FETurbulence.cpp:
(WebCore::FETurbulence::FETurbulence):
* platform/graphics/filters/FETurbulence.h:
* platform/graphics/filters/Filter.h:
(WebCore::Filter::Filter):
* platform/graphics/filters/FilterEffect.cpp:
(WebCore::FilterEffect::FilterEffect):
(WebCore::FilterEffect::determineFilterPrimitiveSubregion):
(WebCore::FilterEffect::createImageBufferResult):
(WebCore::FilterEffect::createUnmultipliedImageResult):
(WebCore::FilterEffect::createPremultipliedImageResult):
* platform/graphics/filters/FilterEffect.h:
(isType):
(WebCore::FilterEffect::filterEffectType const): Deleted.
(WebCore::FilterEffect::filterEffectClassType const): Deleted.
* platform/graphics/filters/FilterFunction.cpp: Added.
(WebCore::FilterFunction::FilterFunction):
(WebCore::FilterFunction::filterName):
* platform/graphics/filters/FilterFunction.h: Added.
(WebCore::FilterFunction::filterType const):
(WebCore::FilterFunction::isCSSFilter const):
(WebCore::FilterFunction::isSVGFilter const):
(WebCore::FilterFunction::isFilter const):
(WebCore::FilterFunction::isFilterEffect const):
(WebCore::FilterFunction::sourceAlphaName):
(WebCore::FilterFunction::sourceGraphicName):
(WebCore::FilterFunction::filterName const):
* platform/graphics/filters/SourceAlpha.cpp:
(WebCore::SourceAlpha::SourceAlpha):
(WebCore::SourceAlpha::effectName): Deleted.
* platform/graphics/filters/SourceAlpha.h:
(WebCore::SourceAlpha::effectName):
(): Deleted.
* platform/graphics/filters/SourceGraphic.cpp:
(WebCore::SourceGraphic::effectName): Deleted.
* platform/graphics/filters/SourceGraphic.h:
(WebCore::SourceGraphic::effectName):
(WebCore::SourceGraphic::SourceGraphic):
(): Deleted.
(isType): Deleted.
* platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp:
* rendering/CSSFilter.cpp:
(WebCore::CSSFilter::CSSFilter):
* svg/graphics/filters/SVGFEImage.cpp:
(WebCore::FEImage::FEImage):
* svg/graphics/filters/SVGFEImage.h:
* svg/graphics/filters/SVGFilter.cpp:
(WebCore::SVGFilter::SVGFilter):
* svg/graphics/filters/SVGFilter.h:
(isType):
* svg/graphics/filters/SVGFilterBuilder.cpp:

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (285542 => 285543)


--- trunk/Source/WebCore/ChangeLog	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/ChangeLog	2021-11-10 00:40:53 UTC (rev 285543)
@@ -1,3 +1,133 @@
+2021-11-09  Said Abou-Hallawa  <[email protected]>
+
+        [GPU Process] Introduce FilterFunction and make it the base class of Filter and FilterEffect
+        https://bugs.webkit.org/show_bug.cgi?id=232413
+        rdar://84966765
+
+        Reviewed by Myles C. Maxfield.
+
+        This allows CSSFilter to hold a list of FilterFunctions. The Filter in
+        this case will act like a composite pattern of FilterEffects.
+
+        This patch also
+        1. Removes the virtual function filterName() from all the FilterEffect
+           classes. It replaces it with a static function in FilterFunction.
+        2. Removes the virtual function filterEffectType() and the function
+           FilterEffect::filterEffectClassType() since they can both be replaced
+           by FilterFunction::filterType().
+        3. Adds trait macros for all FilterEffects and the SVGFilters class.
+
+        * Sources.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        * platform/graphics/coreimage/FilterEffectRendererCoreImage.mm:
+        (WebCore::FilterEffectRendererCoreImage::supportsCoreImageRendering):
+        (WebCore::FilterEffectRendererCoreImage::connectCIFilters):
+        * platform/graphics/filters/FEBlend.cpp:
+        (WebCore::FEBlend::FEBlend):
+        * platform/graphics/filters/FEBlend.h:
+        (): Deleted.
+        * platform/graphics/filters/FEColorMatrix.cpp:
+        (WebCore::FEColorMatrix::FEColorMatrix):
+        * platform/graphics/filters/FEColorMatrix.h:
+        (isType): Deleted.
+        * platform/graphics/filters/FEComponentTransfer.cpp:
+        (WebCore::FEComponentTransfer::FEComponentTransfer):
+        * platform/graphics/filters/FEComponentTransfer.h:
+        (isType): Deleted.
+        * platform/graphics/filters/FEComposite.cpp:
+        (WebCore::FEComposite::FEComposite):
+        * platform/graphics/filters/FEComposite.h:
+        * platform/graphics/filters/FEConvolveMatrix.cpp:
+        (WebCore::FEConvolveMatrix::FEConvolveMatrix):
+        * platform/graphics/filters/FEConvolveMatrix.h:
+        * platform/graphics/filters/FEDiffuseLighting.cpp:
+        (WebCore::FEDiffuseLighting::FEDiffuseLighting):
+        * platform/graphics/filters/FEDiffuseLighting.h:
+        * platform/graphics/filters/FEDisplacementMap.cpp:
+        (WebCore::FEDisplacementMap::FEDisplacementMap):
+        * platform/graphics/filters/FEDisplacementMap.h:
+        * platform/graphics/filters/FEDropShadow.cpp:
+        (WebCore::FEDropShadow::FEDropShadow):
+        * platform/graphics/filters/FEDropShadow.h:
+        (): Deleted.
+        * platform/graphics/filters/FEFlood.cpp:
+        (WebCore::FEFlood::FEFlood):
+        * platform/graphics/filters/FEFlood.h:
+        * platform/graphics/filters/FEGaussianBlur.cpp:
+        (WebCore::FEGaussianBlur::FEGaussianBlur):
+        * platform/graphics/filters/FEGaussianBlur.h:
+        (): Deleted.
+        * platform/graphics/filters/FELighting.h:
+        * platform/graphics/filters/FEMerge.cpp:
+        (WebCore::FEMerge::FEMerge):
+        * platform/graphics/filters/FEMerge.h:
+        (): Deleted.
+        * platform/graphics/filters/FEMorphology.cpp:
+        (WebCore::FEMorphology::FEMorphology):
+        * platform/graphics/filters/FEMorphology.h:
+        * platform/graphics/filters/FEOffset.cpp:
+        (WebCore::FEOffset::FEOffset):
+        * platform/graphics/filters/FEOffset.h:
+        (): Deleted.
+        * platform/graphics/filters/FESpecularLighting.cpp:
+        (WebCore::FESpecularLighting::FESpecularLighting):
+        * platform/graphics/filters/FESpecularLighting.h:
+        * platform/graphics/filters/FETile.cpp:
+        (WebCore::FETile::FETile):
+        (WebCore::FETile::platformApplySoftware):
+        * platform/graphics/filters/FETile.h:
+        * platform/graphics/filters/FETurbulence.cpp:
+        (WebCore::FETurbulence::FETurbulence):
+        * platform/graphics/filters/FETurbulence.h:
+        * platform/graphics/filters/Filter.h:
+        (WebCore::Filter::Filter):
+        * platform/graphics/filters/FilterEffect.cpp:
+        (WebCore::FilterEffect::FilterEffect):
+        (WebCore::FilterEffect::determineFilterPrimitiveSubregion):
+        (WebCore::FilterEffect::createImageBufferResult):
+        (WebCore::FilterEffect::createUnmultipliedImageResult):
+        (WebCore::FilterEffect::createPremultipliedImageResult):
+        * platform/graphics/filters/FilterEffect.h:
+        (isType):
+        (WebCore::FilterEffect::filterEffectType const): Deleted.
+        (WebCore::FilterEffect::filterEffectClassType const): Deleted.
+        * platform/graphics/filters/FilterFunction.cpp: Added.
+        (WebCore::FilterFunction::FilterFunction):
+        (WebCore::FilterFunction::filterName):
+        * platform/graphics/filters/FilterFunction.h: Added.
+        (WebCore::FilterFunction::filterType const):
+        (WebCore::FilterFunction::isCSSFilter const):
+        (WebCore::FilterFunction::isSVGFilter const):
+        (WebCore::FilterFunction::isFilter const):
+        (WebCore::FilterFunction::isFilterEffect const):
+        (WebCore::FilterFunction::sourceAlphaName):
+        (WebCore::FilterFunction::sourceGraphicName):
+        (WebCore::FilterFunction::filterName const):
+        * platform/graphics/filters/SourceAlpha.cpp:
+        (WebCore::SourceAlpha::SourceAlpha):
+        (WebCore::SourceAlpha::effectName): Deleted.
+        * platform/graphics/filters/SourceAlpha.h:
+        (WebCore::SourceAlpha::effectName):
+        (): Deleted.
+        * platform/graphics/filters/SourceGraphic.cpp:
+        (WebCore::SourceGraphic::effectName): Deleted.
+        * platform/graphics/filters/SourceGraphic.h:
+        (WebCore::SourceGraphic::effectName):
+        (WebCore::SourceGraphic::SourceGraphic):
+        (): Deleted.
+        (isType): Deleted.
+        * platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp:
+        * rendering/CSSFilter.cpp:
+        (WebCore::CSSFilter::CSSFilter):
+        * svg/graphics/filters/SVGFEImage.cpp:
+        (WebCore::FEImage::FEImage):
+        * svg/graphics/filters/SVGFEImage.h:
+        * svg/graphics/filters/SVGFilter.cpp:
+        (WebCore::SVGFilter::SVGFilter):
+        * svg/graphics/filters/SVGFilter.h:
+        (isType):
+        * svg/graphics/filters/SVGFilterBuilder.cpp:
+
 2021-11-09  Commit Queue  <[email protected]>
 
         Unreviewed, reverting r285246.

Modified: trunk/Source/WebCore/Sources.txt (285542 => 285543)


--- trunk/Source/WebCore/Sources.txt	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/Sources.txt	2021-11-10 00:40:53 UTC (rev 285543)
@@ -2091,6 +2091,7 @@
 platform/graphics/filters/FETurbulence.cpp
 platform/graphics/filters/FilterEffect.cpp
 platform/graphics/filters/FilterEffectRenderer.cpp
+platform/graphics/filters/FilterFunction.cpp
 platform/graphics/filters/FilterOperation.cpp
 platform/graphics/filters/FilterOperations.cpp
 platform/graphics/filters/PointLightSource.cpp

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (285542 => 285543)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2021-11-10 00:40:53 UTC (rev 285543)
@@ -10848,6 +10848,8 @@
 		724EE54E1DC7F25B00A91FFB /* ActivityState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ActivityState.h; sourceTree = "<group>"; };
 		724EE54F1DC7F25B00A91FFB /* ActivityStateChangeObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ActivityStateChangeObserver.h; sourceTree = "<group>"; };
 		7252396B254CADC200F5FB15 /* NativeImage.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = NativeImage.cpp; sourceTree = "<group>"; };
+		7262D756272A174100C56A09 /* FilterFunction.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FilterFunction.h; sourceTree = "<group>"; };
+		7262D757272A174100C56A09 /* FilterFunction.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FilterFunction.cpp; sourceTree = "<group>"; };
 		7266F0132241BCE200833975 /* SVGPropertyAnimatorFactory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGPropertyAnimatorFactory.h; sourceTree = "<group>"; };
 		7266F0142241BFB200833975 /* SVGPrimitivePropertyAnimatorImpl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGPrimitivePropertyAnimatorImpl.h; sourceTree = "<group>"; };
 		7266F0152241C09800833975 /* SVGPrimitivePropertyAnimator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SVGPrimitivePropertyAnimator.h; sourceTree = "<group>"; };
@@ -18907,11 +18909,11 @@
 		1A569CC40D7E2B60007C3983 /* bridge */ = {
 			isa = PBXGroup;
 			children = (
+				1A569CE20D7E2B82007C3983 /* objc */,
 				599E758F11055A1F00D904FA /* Bridge.h */,
 				1A71D5790F33819000F9CE4E /* IdentifierRep.cpp */,
 				1A71D57A0F33819000F9CE4E /* IdentifierRep.h */,
 				59B5977111086556007159E8 /* jsc */,
-				1A569CE20D7E2B82007C3983 /* objc */,
 				1A569CEF0D7E2B82007C3983 /* runtime_array.cpp */,
 				1A569CF00D7E2B82007C3983 /* runtime_array.h */,
 				1A569CF10D7E2B82007C3983 /* runtime_method.cpp */,
@@ -25869,6 +25871,8 @@
 				08C925180FCC7C4A00480DEC /* FilterEffect.h */,
 				2C85653824C10B0B00A37673 /* FilterEffectRenderer.cpp */,
 				2C85653324C0F73C00A37673 /* FilterEffectRenderer.h */,
+				7262D757272A174100C56A09 /* FilterFunction.cpp */,
+				7262D756272A174100C56A09 /* FilterFunction.h */,
 				49ECEB631499790D00CDD3A4 /* FilterOperation.cpp */,
 				49ECEB641499790D00CDD3A4 /* FilterOperation.h */,
 				49ECEB651499790D00CDD3A4 /* FilterOperations.cpp */,

Modified: trunk/Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/coreimage/FilterEffectRendererCoreImage.mm	2021-11-10 00:40:53 UTC (rev 285543)
@@ -72,11 +72,11 @@
 bool FilterEffectRendererCoreImage::supportsCoreImageRendering(FilterEffect& effect)
 {
     // FIXME: change return value to true once they are implemented
-    switch (effect.filterEffectClassType()) {
+    switch (effect.filterType()) {
     case FilterEffect::Type::SourceGraphic:
         return true;
             
-    case FilterEffect::Type::ColorMatrix: {
+    case FilterEffect::Type::FEColorMatrix: {
         switch (downcast<FEColorMatrix>(effect).type()) {
         case FECOLORMATRIX_TYPE_UNKNOWN:
         case FECOLORMATRIX_TYPE_LUMINANCETOALPHA:
@@ -88,26 +88,10 @@
         }
     }
 
-    case FilterEffect::Type::ComponentTransfer:
+    case FilterEffect::Type::FEComponentTransfer:
         return isNullOrLinearComponentTransferFunction(downcast<FEComponentTransfer>(effect));
 
-    case FilterEffect::Type::Blend:
-    case FilterEffect::Type::Composite:
-    case FilterEffect::Type::ConvolveMatrix:
-    case FilterEffect::Type::DiffuseLighting:
-    case FilterEffect::Type::DisplacementMap:
-    case FilterEffect::Type::DropShadow:
-    case FilterEffect::Type::Flood:
-    case FilterEffect::Type::GaussianBlur:
-    case FilterEffect::Type::Image:
-    case FilterEffect::Type::Lighting:
-    case FilterEffect::Type::Merge:
-    case FilterEffect::Type::Morphology:
-    case FilterEffect::Type::Offset:
-    case FilterEffect::Type::SpecularLighting:
-    case FilterEffect::Type::Tile:
-    case FilterEffect::Type::Turbulence:
-    case FilterEffect::Type::SourceAlpha:
+    default:
         return false;
     }
     return false;
@@ -137,32 +121,14 @@
     if (effect.absolutePaintRect().isEmpty() || ImageBuffer::sizeNeedsClamping(effect.absolutePaintRect().size()))
         return nullptr;
     
-    switch (effect.filterEffectClassType()) {
+    switch (effect.filterType()) {
     case FilterEffect::Type::SourceGraphic:
         return imageForSourceGraphic(downcast<SourceGraphic>(effect));
-    case FilterEffect::Type::ColorMatrix:
+    case FilterEffect::Type::FEColorMatrix:
         return imageForFEColorMatrix(downcast<FEColorMatrix>(effect), inputImages);
-    case FilterEffect::Type::ComponentTransfer:
+    case FilterEffect::Type::FEComponentTransfer:
         return imageForFEComponentTransfer(downcast<FEComponentTransfer>(effect), inputImages);
 
-    // FIXME: Implement those filters using CIFilter so that the function returns a valid CIImage
-    case FilterEffect::Type::Blend:
-    case FilterEffect::Type::Composite:
-    case FilterEffect::Type::ConvolveMatrix:
-    case FilterEffect::Type::DiffuseLighting:
-    case FilterEffect::Type::DisplacementMap:
-    case FilterEffect::Type::DropShadow:
-    case FilterEffect::Type::Flood:
-    case FilterEffect::Type::GaussianBlur:
-    case FilterEffect::Type::Image:
-    case FilterEffect::Type::Lighting:
-    case FilterEffect::Type::Merge:
-    case FilterEffect::Type::Morphology:
-    case FilterEffect::Type::Offset:
-    case FilterEffect::Type::SpecularLighting:
-    case FilterEffect::Type::Tile:
-    case FilterEffect::Type::Turbulence:
-    case FilterEffect::Type::SourceAlpha:
     default:
         return nullptr;
     }

Modified: trunk/Source/WebCore/platform/graphics/filters/FEBlend.cpp (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEBlend.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEBlend.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -35,7 +35,7 @@
 namespace WebCore {
 
 FEBlend::FEBlend(Filter& filter, BlendMode mode)
-    : FilterEffect(filter, Type::Blend)
+    : FilterEffect(filter, FilterEffect::Type::FEBlend)
     , m_mode(mode)
 {
 }

Modified: trunk/Source/WebCore/platform/graphics/filters/FEBlend.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEBlend.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEBlend.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -36,8 +36,6 @@
     bool setBlendMode(BlendMode);
 
 private:
-    const char* filterName() const final { return "FEBlend"; }
-
     void platformApplySoftware() override;
     void platformApplyGeneric(unsigned char* srcPixelArrayA, unsigned char* srcPixelArrayB, unsigned char* dstPixelArray,
                            unsigned colorArrayLength);
@@ -53,3 +51,4 @@
 
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEBlend)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -36,7 +36,7 @@
 namespace WebCore {
 
 FEColorMatrix::FEColorMatrix(Filter& filter, ColorMatrixType type, Vector<float>&& values)
-    : FilterEffect(filter, Type::ColorMatrix)
+    : FilterEffect(filter, FilterEffect::Type::FEColorMatrix)
     , m_type(type)
     , m_values(WTFMove(values))
 {

Modified: trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEColorMatrix.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -52,8 +52,6 @@
 private:
     FEColorMatrix(Filter&, ColorMatrixType, Vector<float>&&);
 
-    const char* filterName() const final { return "FEColorMatrix"; }
-
     void platformApplySoftware() override;
 
     WTF::TextStream& externalRepresentation(WTF::TextStream&, RepresentationType) const override;
@@ -93,7 +91,4 @@
 
 } // namespace WebCore
 
-SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::FEColorMatrix)
-    static bool isType(const WebCore::FilterEffect& effect) { return effect.filterEffectClassType() == WebCore::FilterEffect::Type::ColorMatrix; }
-SPECIALIZE_TYPE_TRAITS_END()
-
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEColorMatrix)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEComponentTransfer.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -33,9 +33,8 @@
 
 namespace WebCore {
 
-FEComponentTransfer::FEComponentTransfer(Filter& filter, const ComponentTransferFunction& redFunction,
-    const ComponentTransferFunction& greenFunction, const ComponentTransferFunction& blueFunction, const ComponentTransferFunction& alphaFunction)
-    : FilterEffect(filter, Type::ComponentTransfer)
+FEComponentTransfer::FEComponentTransfer(Filter& filter, const ComponentTransferFunction& redFunction, const ComponentTransferFunction& greenFunction, const ComponentTransferFunction& blueFunction, const ComponentTransferFunction& alphaFunction)
+    : FilterEffect(filter, FilterEffect::Type::FEComponentTransfer)
     , m_redFunction(redFunction)
     , m_greenFunction(greenFunction)
     , m_blueFunction(blueFunction)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEComponentTransfer.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEComponentTransfer.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEComponentTransfer.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -65,8 +65,6 @@
     FEComponentTransfer(Filter&, const ComponentTransferFunction& redFunc, const ComponentTransferFunction& greenFunc,
                         const ComponentTransferFunction& blueFunc, const ComponentTransferFunction& alphaFunc);
 
-     const char* filterName() const final { return "FEComponentTransfer"; }
-
     using LookupTable = std::array<uint8_t, 256>;
 
     static void computeIdentityTable(LookupTable&, const ComponentTransferFunction&);
@@ -89,6 +87,4 @@
 
 } // namespace WebCore
 
-SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::FEComponentTransfer)
-    static bool isType(const WebCore::FilterEffect& effect) { return effect.filterEffectClassType() == WebCore::FilterEffect::Type::ComponentTransfer; }
-SPECIALIZE_TYPE_TRAITS_END()
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEComponentTransfer)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEComposite.cpp (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEComposite.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEComposite.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -33,7 +33,7 @@
 namespace WebCore {
 
 FEComposite::FEComposite(Filter& filter, const CompositeOperationType& type, float k1, float k2, float k3, float k4)
-    : FilterEffect(filter, Type::Composite)
+    : FilterEffect(filter, FilterEffect::Type::FEComposite)
     , m_type(type)
     , m_k1(k1)
     , m_k2(k2)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEComposite.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEComposite.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEComposite.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -64,8 +64,6 @@
 private:
     FEComposite(Filter&, const CompositeOperationType&, float, float, float, float);
 
-    const char* filterName() const final { return "FEComposite"; }
-
     void correctFilterResultIfNeeded() override;
     void determineAbsolutePaintRect() override;
 
@@ -90,3 +88,4 @@
 
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEComposite)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -32,10 +32,8 @@
 
 namespace WebCore {
 
-FEConvolveMatrix::FEConvolveMatrix(Filter& filter, const IntSize& kernelSize,
-    float divisor, float bias, const IntPoint& targetOffset, EdgeModeType edgeMode,
-    const FloatPoint& kernelUnitLength, bool preserveAlpha, const Vector<float>& kernelMatrix)
-    : FilterEffect(filter, Type::ConvolveMatrix)
+FEConvolveMatrix::FEConvolveMatrix(Filter& filter, const IntSize& kernelSize, float divisor, float bias, const IntPoint& targetOffset, EdgeModeType edgeMode, const FloatPoint& kernelUnitLength, bool preserveAlpha, const Vector<float>& kernelMatrix)
+    : FilterEffect(filter, FilterEffect::Type::FEConvolveMatrix)
     , m_kernelSize(kernelSize)
     , m_divisor(divisor)
     , m_bias(bias)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEConvolveMatrix.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -80,8 +80,6 @@
     FEConvolveMatrix(Filter&, const IntSize&, float, float,
             const IntPoint&, EdgeModeType, const FloatPoint&, bool, const Vector<float>&);
 
-    const char* filterName() const final { return "FEConvolveMatrix"; }
-
     void determineAbsolutePaintRect() override { setAbsolutePaintRect(enclosingIntRect(maxEffectRect())); }
 
     void platformApplySoftware() override;
@@ -115,3 +113,4 @@
 
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEConvolveMatrix)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.cpp (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -28,7 +28,7 @@
 namespace WebCore {
 
 FEDiffuseLighting::FEDiffuseLighting(Filter& filter, const Color& lightingColor, float surfaceScale, float diffuseConstant, float kernelUnitLengthX, float kernelUnitLengthY, Ref<LightSource>&& lightSource)
-    : FELighting(filter, DiffuseLighting, lightingColor, surfaceScale, diffuseConstant, 0, 0, kernelUnitLengthX, kernelUnitLengthY, WTFMove(lightSource), Type::DiffuseLighting)
+    : FELighting(filter, DiffuseLighting, lightingColor, surfaceScale, diffuseConstant, 0, 0, kernelUnitLengthX, kernelUnitLengthY, WTFMove(lightSource), FilterEffect::Type::FEDiffuseLighting)
 {
 }
 
@@ -37,8 +37,6 @@
     return adoptRef(*new FEDiffuseLighting(filter, lightingColor, surfaceScale, diffuseConstant, kernelUnitLengthX, kernelUnitLengthY, WTFMove(lightSource)));
 }
 
-FEDiffuseLighting::~FEDiffuseLighting() = default;
-
 bool FEDiffuseLighting::setDiffuseConstant(float diffuseConstant)
 {
     if (m_diffuseConstant == diffuseConstant)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEDiffuseLighting.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -30,7 +30,6 @@
 class FEDiffuseLighting : public FELighting {
 public:
     static Ref<FEDiffuseLighting> create(Filter&, const Color&, float, float, float, float, Ref<LightSource>&&);
-    virtual ~FEDiffuseLighting();
 
     float diffuseConstant() const { return m_diffuseConstant; }
     bool setDiffuseConstant(float);
@@ -43,3 +42,4 @@
 
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEDiffuseLighting)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEDisplacementMap.cpp (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEDisplacementMap.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEDisplacementMap.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -32,7 +32,7 @@
 namespace WebCore {
 
 FEDisplacementMap::FEDisplacementMap(Filter& filter, ChannelSelectorType xChannelSelector, ChannelSelectorType yChannelSelector, float scale)
-    : FilterEffect(filter, Type::DisplacementMap)
+    : FilterEffect(filter, FilterEffect::Type::FEDisplacementMap)
     , m_xChannelSelector(xChannelSelector)
     , m_yChannelSelector(yChannelSelector)
     , m_scale(scale)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEDisplacementMap.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEDisplacementMap.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEDisplacementMap.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -54,8 +54,6 @@
 private:
     FEDisplacementMap(Filter&, ChannelSelectorType xChannelSelector, ChannelSelectorType yChannelSelector, float);
 
-    const char* filterName() const final { return "FEDisplacementMap"; }
-
     void platformApplySoftware() override;
 
     void determineAbsolutePaintRect() override { setAbsolutePaintRect(enclosingIntRect(maxEffectRect())); }
@@ -72,3 +70,4 @@
 
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEDisplacementMap)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.cpp (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -32,7 +32,7 @@
 namespace WebCore {
     
 FEDropShadow::FEDropShadow(Filter& filter, float stdX, float stdY, float dx, float dy, const Color& shadowColor, float shadowOpacity)
-    : FilterEffect(filter, Type::DropShadow)
+    : FilterEffect(filter, FilterEffect::Type::FEDropShadow)
     , m_stdX(stdX)
     , m_stdY(stdY)
     , m_dx(dx)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEDropShadow.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -50,8 +50,6 @@
 private:
     FEDropShadow(Filter&, float, float, float, float, const Color&, float);
 
-    const char* filterName() const final { return "FEDropShadow"; }
-
     void platformApplySoftware() override;
 
     void determineAbsolutePaintRect() override;
@@ -70,3 +68,4 @@
     
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEDropShadow)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEFlood.cpp (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEFlood.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEFlood.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -31,7 +31,7 @@
 namespace WebCore {
 
 FEFlood::FEFlood(Filter& filter, const Color& floodColor, float floodOpacity)
-    : FilterEffect(filter, Type::Flood)
+    : FilterEffect(filter, FilterEffect::Type::FEFlood)
     , m_floodColor(floodColor)
     , m_floodOpacity(floodOpacity)
 {

Modified: trunk/Source/WebCore/platform/graphics/filters/FEFlood.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEFlood.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEFlood.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -47,8 +47,6 @@
 private:
     FEFlood(Filter&, const Color&, float);
 
-    const char* filterName() const final { return "FEFlood"; }
-
     void platformApplySoftware() override;
 
     void determineAbsolutePaintRect() override { setAbsolutePaintRect(enclosingIntRect(maxEffectRect())); }
@@ -61,3 +59,4 @@
 
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEFlood)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -80,7 +80,7 @@
 }
 
 FEGaussianBlur::FEGaussianBlur(Filter& filter, float x, float y, EdgeModeType edgeMode)
-    : FilterEffect(filter, Type::GaussianBlur)
+    : FilterEffect(filter, FilterEffect::Type::FEGaussianBlur)
     , m_stdX(x)
     , m_stdY(y)
     , m_edgeMode(edgeMode)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEGaussianBlur.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -47,8 +47,6 @@
 private:
     FEGaussianBlur(Filter&, float, float, EdgeModeType);
 
-    const char* filterName() const final { return "FEGaussianBlur"; }
-
     static const int s_minimalRectDimension = 100 * 100; // Empirical data limit for parallel jobs
 
     struct PlatformApplyParameters {
@@ -80,3 +78,4 @@
 
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEGaussianBlur)

Modified: trunk/Source/WebCore/platform/graphics/filters/FELighting.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FELighting.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FELighting.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -130,8 +130,6 @@
 
     FELighting(Filter&, LightingType, const Color&, float, float, float, float, float, float, Ref<LightSource>&&, Type);
 
-    const char* filterName() const final { return "FELighting"; }
-
     bool drawLighting(Uint8ClampedArray&, int, int);
 
     void setPixel(int offset, const LightingData&, const LightSource::PaintingData&, int x, int y, float factorX, float factorY, IntSize normalVector);

Modified: trunk/Source/WebCore/platform/graphics/filters/FEMerge.cpp (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEMerge.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEMerge.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -29,7 +29,7 @@
 namespace WebCore {
 
 FEMerge::FEMerge(Filter& filter)
-    : FilterEffect(filter, Type::Merge)
+    : FilterEffect(filter, FilterEffect::Type::FEMerge)
 {
 }
 

Modified: trunk/Source/WebCore/platform/graphics/filters/FEMerge.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEMerge.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEMerge.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -33,8 +33,6 @@
 private:
     FEMerge(Filter&);
 
-    const char* filterName() const final { return "FEMerge"; }
-
     void platformApplySoftware() override;
 
     WTF::TextStream& externalRepresentation(WTF::TextStream&, RepresentationType) const override;
@@ -42,3 +40,4 @@
 
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEMerge)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEMorphology.cpp (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEMorphology.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEMorphology.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -36,7 +36,7 @@
 namespace WebCore {
 
 FEMorphology::FEMorphology(Filter& filter, MorphologyOperatorType type, float radiusX, float radiusY)
-    : FilterEffect(filter, Type::Morphology)
+    : FilterEffect(filter, FilterEffect::Type::FEMorphology)
     , m_type(type)
     , m_radiusX(radiusX)
     , m_radiusY(radiusY)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEMorphology.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEMorphology.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEMorphology.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -48,8 +48,6 @@
 private:
     FEMorphology(Filter&, MorphologyOperatorType, float radiusX, float radiusY);
 
-    const char* filterName() const final { return "FEMorphology"; }
-
     void platformApplySoftware() override;
 
     void determineAbsolutePaintRect() override;
@@ -86,3 +84,4 @@
 
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEMorphology)

Modified: trunk/Source/WebCore/platform/graphics/filters/FEOffset.cpp (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEOffset.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEOffset.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -31,7 +31,7 @@
 namespace WebCore {
 
 FEOffset::FEOffset(Filter& filter, float dx, float dy)
-    : FilterEffect(filter, Type::Offset)
+    : FilterEffect(filter, FilterEffect::Type::FEOffset)
     , m_dx(dx)
     , m_dy(dy)
 {

Modified: trunk/Source/WebCore/platform/graphics/filters/FEOffset.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FEOffset.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FEOffset.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -39,8 +39,6 @@
 private:
     FEOffset(Filter&, float dx, float dy);
 
-    const char* filterName() const final { return "FEOffset"; }
-
     void platformApplySoftware() override;
     
     void determineAbsolutePaintRect() override;
@@ -53,3 +51,4 @@
 
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEOffset)

Modified: trunk/Source/WebCore/platform/graphics/filters/FESpecularLighting.cpp (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FESpecularLighting.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FESpecularLighting.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -28,7 +28,7 @@
 namespace WebCore {
 
 FESpecularLighting::FESpecularLighting(Filter& filter, const Color& lightingColor, float surfaceScale, float specularConstant, float specularExponent, float kernelUnitLengthX, float kernelUnitLengthY, Ref<LightSource>&& lightSource)
-    : FELighting(filter, SpecularLighting, lightingColor, surfaceScale, 0, specularConstant, specularExponent, kernelUnitLengthX, kernelUnitLengthY, WTFMove(lightSource), Type::SpecularLighting)
+    : FELighting(filter, SpecularLighting, lightingColor, surfaceScale, 0, specularConstant, specularExponent, kernelUnitLengthX, kernelUnitLengthY, WTFMove(lightSource), FilterEffect::Type::FESpecularLighting)
 {
 }
 
@@ -37,8 +37,6 @@
     return adoptRef(*new FESpecularLighting(filter, lightingColor, surfaceScale, specularConstant, specularExponent, kernelUnitLengthX, kernelUnitLengthY, WTFMove(lightSource)));
 }
 
-FESpecularLighting::~FESpecularLighting() = default;
-
 bool FESpecularLighting::setSpecularConstant(float specularConstant)
 {
     if (m_specularConstant == specularConstant)

Modified: trunk/Source/WebCore/platform/graphics/filters/FESpecularLighting.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FESpecularLighting.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FESpecularLighting.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -28,7 +28,6 @@
 class FESpecularLighting : public FELighting {
 public:
     static Ref<FESpecularLighting> create(Filter&, const Color&, float, float, float, float, float, Ref<LightSource>&&);
-    virtual ~FESpecularLighting();
 
     float specularConstant() const { return m_specularConstant; }
     bool setSpecularConstant(float);
@@ -44,3 +43,4 @@
 
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FESpecularLighting)

Modified: trunk/Source/WebCore/platform/graphics/filters/FETile.cpp (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FETile.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FETile.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -32,7 +32,7 @@
 namespace WebCore {
 
 FETile::FETile(Filter& filter)
-    : FilterEffect(filter, Type::Tile)
+    : FilterEffect(filter, FilterEffect::Type::FETile)
 {
 }
 
@@ -58,7 +58,7 @@
     FloatRect tileRect = in->maxEffectRect();
     FloatPoint inMaxEffectLocation = tileRect.location();
     FloatPoint maxEffectLocation = maxEffectRect().location();
-    if (in->filterEffectType() == FilterEffectTypeSourceInput) {
+    if (in->filterType() == FilterEffect::Type::SourceGraphic || in->filterType() == FilterEffect::Type::SourceAlpha) {
         Filter& filter = this->filter();
         tileRect = filter.filterRegion();
         tileRect.scale(filter.filterResolution().width(), filter.filterResolution().height());

Modified: trunk/Source/WebCore/platform/graphics/filters/FETile.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FETile.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FETile.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -33,10 +33,6 @@
 private:
     FETile(Filter&);
 
-    const char* filterName() const final { return "FETile"; }
-
-    FilterEffectType filterEffectType() const override { return FilterEffectTypeTile; }
-
     void platformApplySoftware() override;
 
     void determineAbsolutePaintRect() override { setAbsolutePaintRect(enclosingIntRect(maxEffectRect())); }
@@ -46,3 +42,4 @@
 
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FETile)

Modified: trunk/Source/WebCore/platform/graphics/filters/FETurbulence.cpp (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FETurbulence.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FETurbulence.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -49,7 +49,7 @@
 static const int s_randR = 2836; // m % a
 
 FETurbulence::FETurbulence(Filter& filter, TurbulenceType type, float baseFrequencyX, float baseFrequencyY, int numOctaves, float seed, bool stitchTiles)
-    : FilterEffect(filter, Type::Turbulence)
+    : FilterEffect(filter, FilterEffect::Type::FETurbulence)
     , m_type(type)
     , m_baseFrequencyX(baseFrequencyX)
     , m_baseFrequencyY(baseFrequencyY)

Modified: trunk/Source/WebCore/platform/graphics/filters/FETurbulence.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FETurbulence.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FETurbulence.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -105,8 +105,6 @@
 
     FETurbulence(Filter&, TurbulenceType, float, float, int, float, bool);
 
-    const char* filterName() const final { return "FETurbulence"; }
-
     void platformApplySoftware() override;
     void determineAbsolutePaintRect() override { setAbsolutePaintRect(enclosingIntRect(maxEffectRect())); }
     WTF::TextStream& externalRepresentation(WTF::TextStream&, RepresentationType) const override;
@@ -129,3 +127,4 @@
 
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FETurbulence)

Modified: trunk/Source/WebCore/platform/graphics/filters/Filter.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/Filter.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/Filter.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -1,6 +1,7 @@
 /*
  * Copyright (C) 2009 Dirk Schulze <[email protected]>
  * Copyright (C) 2013 Google Inc. All rights reserved.
+ * Copyright (C) 2021 Apple Inc.  All rights reserved.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -21,23 +22,17 @@
 #pragma once
 
 #include "AffineTransform.h"
+#include "FilterFunction.h"
 #include "FloatRect.h"
 #include "GraphicsTypes.h"
 #include "ImageBuffer.h"
-#include <wtf/RefCounted.h>
 
 namespace WebCore {
 
 class FilterEffect;
 
-class Filter : public RefCounted<Filter> {
+class Filter : public FilterFunction {
 public:
-    Filter(const AffineTransform& absoluteTransform, float filterScale = 1)
-        : m_absoluteTransform(absoluteTransform)
-        , m_filterScale(filterScale)
-    { }
-    virtual ~Filter() = default;
-
     void setSourceImage(RefPtr<ImageBuffer>&& sourceImage) { m_sourceImage = WTFMove(sourceImage); }
     ImageBuffer* sourceImage() { return m_sourceImage.get(); }
 
@@ -62,11 +57,19 @@
     virtual FloatRect filterRegionInUserSpace() const = 0;
 
 protected:
-    explicit Filter(const FloatSize& filterResolution)
-        : m_filterResolution(filterResolution)
+    Filter(Filter::Type filterType, const AffineTransform& absoluteTransform, float filterScale = 1)
+        : FilterFunction(filterType)
+        , m_absoluteTransform(absoluteTransform)
+        , m_filterScale(filterScale)
     {
     }
 
+    Filter(Filter::Type filterType, const FloatSize& filterResolution)
+        : FilterFunction(filterType)
+        , m_filterResolution(filterResolution)
+    {
+    }
+
 private:
     RefPtr<ImageBuffer> m_sourceImage;
     FloatSize m_filterResolution;

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


--- trunk/Source/WebCore/platform/graphics/filters/FilterEffect.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterEffect.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -45,14 +45,12 @@
 
 namespace WebCore {
 
-FilterEffect::FilterEffect(Filter& filter, Type type)
-    : m_filter(filter)
-    , m_filterEffectClassType(type)
+FilterEffect::FilterEffect(Filter& filter, FilterEffect::Type type)
+    : FilterFunction(type)
+    , m_filter(filter)
 {
 }
 
-FilterEffect::~FilterEffect() = default;
-
 void FilterEffect::determineAbsolutePaintRect()
 {
     m_absolutePaintRect = IntRect();
@@ -110,7 +108,7 @@
         subregion = m_filter.filterRegionInUserSpace();
 
     // After calling determineFilterPrimitiveSubregion on the target effect, reset the subregion again for <feTile>.
-    if (filterEffectType() == FilterEffectTypeTile)
+    if (filterType() == FilterEffect::Type::FETile)
         subregion = m_filter.filterRegionInUserSpace();
 
     auto boundaries = effectBoundaries();
@@ -572,7 +570,7 @@
 
 ImageBuffer* FilterEffect::createImageBufferResult()
 {
-    LOG(Filters, "FilterEffect %s %p createImageBufferResult %dx%d", filterName(), this, m_absolutePaintRect.size().width(), m_absolutePaintRect.size().height());
+    LOG(Filters, "FilterEffect %s %p createImageBufferResult %dx%d", filterName().characters8(), this, m_absolutePaintRect.size().width(), m_absolutePaintRect.size().height());
 
     // Only one result type is allowed.
     ASSERT(!hasResult());
@@ -586,7 +584,7 @@
 
 std::optional<PixelBuffer>& FilterEffect::createUnmultipliedImageResult()
 {
-    LOG(Filters, "FilterEffect %s %p createUnmultipliedImageResult", filterName(), this);
+    LOG(Filters, "FilterEffect %s %p createUnmultipliedImageResult", filterName().characters8(), this);
 
     // Only one result type is allowed.
     ASSERT(!hasResult());
@@ -605,7 +603,7 @@
 
 std::optional<PixelBuffer>& FilterEffect::createPremultipliedImageResult()
 {
-    LOG(Filters, "FilterEffect %s %p createPremultipliedImageResult", filterName(), this);
+    LOG(Filters, "FilterEffect %s %p createPremultipliedImageResult", filterName().characters8(), this);
 
     // Only one result type is allowed.
     ASSERT(!hasResult());

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


--- trunk/Source/WebCore/platform/graphics/filters/FilterEffect.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterEffect.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -24,6 +24,7 @@
 
 #include "AlphaPremultiplication.h"
 #include "DestinationColorSpace.h"
+#include "FilterFunction.h"
 #include "FloatRect.h"
 #include "IntRect.h"
 #include "IntRectExtent.h"
@@ -30,7 +31,6 @@
 #include "PixelBuffer.h"
 #include <_javascript_Core/Forward.h>
 #include <wtf/MathExtras.h>
-#include <wtf/RefCounted.h>
 #include <wtf/RefPtr.h>
 #include <wtf/Vector.h>
 
@@ -46,39 +46,8 @@
 
 typedef Vector<RefPtr<FilterEffect>> FilterEffectVector;
 
-enum FilterEffectType {
-    FilterEffectTypeUnknown,
-    FilterEffectTypeImage,
-    FilterEffectTypeTile,
-    FilterEffectTypeSourceInput
-};
-
-class FilterEffect : public RefCounted<FilterEffect> {
+class FilterEffect : public FilterFunction {
 public:
-    enum class Type : uint8_t {
-        Blend,
-        ColorMatrix,
-        ComponentTransfer,
-        Composite,
-        ConvolveMatrix,
-        DiffuseLighting,
-        DisplacementMap,
-        DropShadow,
-        Flood,
-        GaussianBlur,
-        Image,
-        Lighting,
-        Merge,
-        Morphology,
-        Offset,
-        SpecularLighting,
-        Tile,
-        Turbulence,
-        SourceAlpha,
-        SourceGraphic
-    };
-    virtual ~FilterEffect();
-
     void clearResult();
     void clearResultsRecursive();
 
@@ -125,8 +94,6 @@
 
     virtual void determineAbsolutePaintRect();
 
-    virtual FilterEffectType filterEffectType() const { return FilterEffectTypeUnknown; }
-
     virtual IntOutsets outsets() const { return IntOutsets(); }
 
     enum class RepresentationType { TestOutput, Debugging };
@@ -156,8 +123,6 @@
     
     FloatPoint mapPointFromUserSpaceToBuffer(FloatPoint) const;
     
-    Type filterEffectClassType() const { return m_filterEffectClassType; }
-
     Filter& filter() { return m_filter; }
     const Filter& filter() const { return m_filter; }
 
@@ -183,8 +148,6 @@
 protected:
     FilterEffect(Filter&, Type);
     
-    virtual const char* filterName() const = 0;
-
     ImageBuffer* createImageBufferResult();
     std::optional<PixelBuffer>& createUnmultipliedImageResult();
     std::optional<PixelBuffer>& createPremultipliedImageResult();
@@ -248,8 +211,6 @@
     DestinationColorSpace m_operatingColorSpace { DestinationColorSpace::SRGB() };
 #endif
     DestinationColorSpace m_resultColorSpace { DestinationColorSpace::SRGB() };
-    
-    const Type m_filterEffectClassType;
 };
 
 WEBCORE_EXPORT WTF::TextStream& operator<<(WTF::TextStream&, const FilterEffect&);
@@ -256,3 +217,11 @@
 
 } // namespace WebCore
 
+SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::FilterEffect)
+    static bool isType(const WebCore::FilterFunction& function) { return function.isFilterEffect(); }
+SPECIALIZE_TYPE_TRAITS_END()
+
+#define SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(ClassName) \
+SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::ClassName) \
+    static bool isType(const WebCore::FilterEffect& effect) { return effect.filterType() == WebCore::FilterEffect::Type::ClassName; } \
+SPECIALIZE_TYPE_TRAITS_END()

Added: trunk/Source/WebCore/platform/graphics/filters/FilterFunction.cpp (0 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FilterFunction.cpp	                        (rev 0)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterFunction.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2021 Apple Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "FilterFunction.h"
+
+#include <wtf/SortedArrayMap.h>
+
+namespace WebCore {
+
+FilterFunction::FilterFunction(Type filterType)
+    : m_filterType(filterType)
+{
+}
+
+AtomString FilterFunction::filterName(Type filterType)
+{
+    static constexpr std::pair<FilterFunction::Type, ASCIILiteral> namesArray[] = {
+        { FilterFunction::Type::CSSFilter,           "CSSFilter"_s           },
+        { FilterFunction::Type::SVGFilter,           "SVGFilter"_s           },
+        
+        { FilterFunction::Type::FEBlend,             "FEBlend"_s             },
+        { FilterFunction::Type::FEColorMatrix,       "FEColorMatrix"_s       },
+        { FilterFunction::Type::FEComponentTransfer, "FEComponentTransfer"_s },
+        { FilterFunction::Type::FEComposite,         "FEComposite"_s         },
+        { FilterFunction::Type::FEConvolveMatrix,    "FEConvolveMatrix"_s    },
+        { FilterFunction::Type::FEDiffuseLighting,   "FEDiffuseLighting"_s   },
+        { FilterFunction::Type::FEDisplacementMap,   "FEDisplacementMap"_s   },
+        { FilterFunction::Type::FEDropShadow,        "FEDropShadow"_s        },
+        { FilterFunction::Type::FEFlood,             "FEFlood"_s             },
+        { FilterFunction::Type::FEGaussianBlur,      "FEGaussianBlur"_s      },
+        { FilterFunction::Type::FEImage,             "FEImage"_s             },
+        { FilterFunction::Type::FEMerge,             "FEMerge"_s             },
+        { FilterFunction::Type::FEMorphology,        "FEMorphology"_s        },
+        { FilterFunction::Type::FEOffset,            "FEOffset"_s            },
+        { FilterFunction::Type::FESpecularLighting,  "FESpecularLighting"_s  },
+        { FilterFunction::Type::FETile,              "FETile"_s              },
+        { FilterFunction::Type::FETurbulence,        "FETurbulence"_s        },
+
+        { FilterFunction::Type::SourceAlpha,         "SourceAlpha"_s         },
+        { FilterFunction::Type::SourceGraphic,       "SourceGraphic"_s       }
+    };
+
+    static constexpr SortedArrayMap namesMap { namesArray };
+    
+    ASSERT(namesMap.tryGet(filterType));
+    return namesMap.get(filterType, ""_s);
+}
+
+} // namespace WebCore

Added: trunk/Source/WebCore/platform/graphics/filters/FilterFunction.h (0 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/FilterFunction.h	                        (rev 0)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterFunction.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2021 Apple Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <wtf/RefCounted.h>
+#include <wtf/text/AtomString.h>
+
+namespace WTF {
+class TextStream;
+}
+
+namespace WebCore {
+
+class FilterFunction : public RefCounted<FilterFunction> {
+public:
+    enum class Type : uint8_t {
+        CSSFilter,
+        SVGFilter,
+
+        FEFirst,
+
+        FEBlend = FEFirst,
+        FEColorMatrix,
+        FEComponentTransfer,
+        FEComposite,
+        FEConvolveMatrix,
+        FEDiffuseLighting,
+        FEDisplacementMap,
+        FEDropShadow,
+        FEFlood,
+        FEGaussianBlur,
+        FEImage,
+        FEMerge,
+        FEMorphology,
+        FEOffset,
+        FESpecularLighting,
+        FETile,
+        FETurbulence,
+        SourceAlpha,
+        SourceGraphic,
+
+        FELast = SourceGraphic
+    };
+
+    FilterFunction(Type);
+    virtual ~FilterFunction() = default;
+
+    Type filterType() const { return m_filterType; }
+
+    bool isCSSFilter() const { return m_filterType == Type::CSSFilter; }
+    bool isSVGFilter() const { return m_filterType == Type::SVGFilter; }
+    bool isFilter() const { return m_filterType == Type::CSSFilter || m_filterType == Type::SVGFilter; }
+    bool isFilterEffect() const { return m_filterType >= Type::FEFirst && m_filterType <= Type::FELast; }
+
+    static AtomString filterName(Type);
+    static AtomString sourceAlphaName() { return filterName(Type::SourceAlpha); }
+    static AtomString sourceGraphicName() { return filterName(Type::SourceGraphic); }
+    AtomString filterName() const { return filterName(m_filterType); }
+
+private:
+    Type m_filterType;
+};
+
+} // namespace WebCore
+
+namespace WTF {
+
+template<> struct EnumTraits<WebCore::FilterFunction::Type> {
+    using values = EnumValues<
+        WebCore::FilterFunction::Type,
+
+        WebCore::FilterFunction::Type::CSSFilter,
+        WebCore::FilterFunction::Type::SVGFilter,
+
+        WebCore::FilterFunction::Type::FEBlend,
+        WebCore::FilterFunction::Type::FEColorMatrix,
+        WebCore::FilterFunction::Type::FEComponentTransfer,
+        WebCore::FilterFunction::Type::FEComposite,
+        WebCore::FilterFunction::Type::FEConvolveMatrix,
+        WebCore::FilterFunction::Type::FEDiffuseLighting,
+        WebCore::FilterFunction::Type::FEDisplacementMap,
+        WebCore::FilterFunction::Type::FEDropShadow,
+        WebCore::FilterFunction::Type::FEFlood,
+        WebCore::FilterFunction::Type::FEGaussianBlur,
+        WebCore::FilterFunction::Type::FEImage,
+        WebCore::FilterFunction::Type::FEMerge,
+        WebCore::FilterFunction::Type::FEMorphology,
+        WebCore::FilterFunction::Type::FEOffset,
+        WebCore::FilterFunction::Type::FESpecularLighting,
+        WebCore::FilterFunction::Type::FETile,
+        WebCore::FilterFunction::Type::FETurbulence,
+        WebCore::FilterFunction::Type::SourceAlpha,
+        WebCore::FilterFunction::Type::SourceGraphic
+    >;
+};
+
+} // namespace WTF

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


--- trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -23,10 +23,7 @@
 #include "Color.h"
 #include "Filter.h"
 #include "GraphicsContext.h"
-#include <wtf/NeverDestroyed.h>
-#include <wtf/StdLibExtras.h>
 #include <wtf/text/TextStream.h>
-#include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
@@ -35,10 +32,11 @@
     return adoptRef(*new SourceAlpha(sourceEffect));
 }
 
-const AtomString& SourceAlpha::effectName()
+SourceAlpha::SourceAlpha(FilterEffect& sourceEffect)
+    : FilterEffect(sourceEffect.filter(), FilterEffect::Type::SourceAlpha)
 {
-    static MainThreadNeverDestroyed<const AtomString> s_effectName("SourceAlpha", AtomString::ConstructFromLiteral);
-    return s_effectName;
+    setOperatingColorSpace(sourceEffect.operatingColorSpace());
+    inputEffects().append(&sourceEffect);
 }
 
 void SourceAlpha::determineAbsolutePaintRect()
@@ -69,11 +67,4 @@
     return ts;
 }
 
-SourceAlpha::SourceAlpha(FilterEffect& sourceEffect)
-    : FilterEffect(sourceEffect.filter(), Type::SourceAlpha)
-{
-    setOperatingColorSpace(sourceEffect.operatingColorSpace());
-    inputEffects().append(&sourceEffect);
-}
-
 } // namespace WebCore

Modified: trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/SourceAlpha.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -17,8 +17,7 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#ifndef SourceAlpha_h
-#define SourceAlpha_h
+#pragma once
 
 #include "FilterEffect.h"
 
@@ -28,14 +27,11 @@
 public:        
     static Ref<SourceAlpha> create(FilterEffect&);
 
-    static const AtomString& effectName();
+    static AtomString effectName() { return FilterEffect::sourceAlphaName(); }
 
 private:
     explicit SourceAlpha(FilterEffect&);
-    FilterEffectType filterEffectType() const override { return FilterEffectTypeSourceInput; }
 
-    const char* filterName() const final { return "SourceAlpha"; }
-
     void platformApplySoftware() override;
     void determineAbsolutePaintRect() override;
     WTF::TextStream& externalRepresentation(WTF::TextStream&, RepresentationType) const override;
@@ -43,4 +39,4 @@
 
 } //namespace WebCore
 
-#endif // SourceAlpha_h
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(SourceAlpha)

Modified: trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.cpp (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -22,10 +22,7 @@
 
 #include "Filter.h"
 #include "GraphicsContext.h"
-#include <wtf/NeverDestroyed.h>
-#include <wtf/StdLibExtras.h>
 #include <wtf/text/TextStream.h>
-#include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
@@ -34,12 +31,6 @@
     return adoptRef(*new SourceGraphic(filter));
 }
 
-const AtomString& SourceGraphic::effectName()
-{
-    static MainThreadNeverDestroyed<const AtomString> s_effectName("SourceGraphic", AtomString::ConstructFromLiteral);
-    return s_effectName;
-}
-
 void SourceGraphic::determineAbsolutePaintRect()
 {
     Filter& filter = this->filter();

Modified: trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.h (285542 => 285543)


--- trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -18,11 +18,9 @@
  * Boston, MA 02110-1301, USA.
  */
 
-#ifndef SourceGraphic_h
-#define SourceGraphic_h
+#pragma once
 
 #include "FilterEffect.h"
-#include "Filter.h"
 
 namespace WebCore {
 
@@ -30,29 +28,20 @@
 public:        
     static Ref<SourceGraphic> create(Filter&);
 
-    static const AtomString& effectName();
+    static AtomString effectName() { return FilterEffect::sourceGraphicName(); }
 
 private:
     SourceGraphic(Filter& filter)
-        : FilterEffect(filter, Type::SourceGraphic)
+        : FilterEffect(filter, FilterEffect::Type::SourceGraphic)
     {
         setOperatingColorSpace(DestinationColorSpace::SRGB());
     }
 
-    const char* filterName() const final { return "SourceGraphic"; }
-
     void determineAbsolutePaintRect() override;
     void platformApplySoftware() override;
     WTF::TextStream& externalRepresentation(WTF::TextStream&, RepresentationType) const override;
-
-    FilterEffectType filterEffectType() const override { return FilterEffectTypeSourceInput; }
 };
 
 } //namespace WebCore
 
-SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::SourceGraphic)
-    static bool isType(const WebCore::FilterEffect& effect) { return effect.filterEffectClassType() == WebCore::FilterEffect::Type::SourceGraphic; }
-SPECIALIZE_TYPE_TRAITS_END()
-
-
-#endif // SourceGraphic_h
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(SourceGraphic)

Modified: trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp (285542 => 285543)


--- trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/platform/mediastream/mac/RealtimeIncomingAudioSourceCocoa.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -33,6 +33,7 @@
 #include "AudioStreamDescription.h"
 #include "CAAudioStreamDescription.h"
 #include "LibWebRTCAudioFormat.h"
+#include "LibWebRTCAudioModule.h"
 #include "Logging.h"
 #include <pal/avfoundation/MediaTimeAVFoundation.h>
 #include <wtf/FastMalloc.h>

Modified: trunk/Source/WebCore/rendering/CSSFilter.cpp (285542 => 285543)


--- trunk/Source/WebCore/rendering/CSSFilter.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/rendering/CSSFilter.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -60,7 +60,7 @@
 }
 
 CSSFilter::CSSFilter()
-    : Filter(FloatSize { 1, 1 })
+    : Filter(Filter::Type::CSSFilter, FloatSize { 1, 1 })
     , m_sourceGraphic(SourceGraphic::create(*this))
 {
 }

Modified: trunk/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp (285542 => 285543)


--- trunk/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -42,7 +42,7 @@
 }
 
 FEImage::FEImage(Filter& filter, SourceImage&& sourceImage, const FloatRect& sourceImageRect, const SVGPreserveAspectRatioValue& preserveAspectRatio)
-    : FilterEffect(filter, Type::Image)
+    : FilterEffect(filter, Type::FEImage)
     , m_sourceImage(WTFMove(sourceImage))
     , m_sourceImageRect(sourceImageRect)
     , m_preserveAspectRatio(preserveAspectRatio)

Modified: trunk/Source/WebCore/svg/graphics/filters/SVGFEImage.h (285542 => 285543)


--- trunk/Source/WebCore/svg/graphics/filters/SVGFEImage.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/svg/graphics/filters/SVGFEImage.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -24,7 +24,6 @@
 #pragma once
 
 #include "FilterEffect.h"
-#include "RenderingResourceIdentifier.h"
 #include "SVGPreserveAspectRatioValue.h"
 
 namespace WebCore {
@@ -34,10 +33,7 @@
 
 class FEImage final : public FilterEffect {
 public:
-    using SourceImage = std::variant<
-        Ref<Image>,
-        Ref<ImageBuffer>
-    >;
+    using SourceImage = std::variant<Ref<Image>, Ref<ImageBuffer>>;
 
     static Ref<FEImage> create(Filter&, Ref<Image>&&, const SVGPreserveAspectRatioValue&);
     static Ref<FEImage> create(Filter&, SourceImage&&, const FloatRect& sourceImageRect, const SVGPreserveAspectRatioValue&);
@@ -48,8 +44,6 @@
 private:
     FEImage(Filter&, SourceImage&&, const FloatRect& sourceImageRect, const SVGPreserveAspectRatioValue&);
 
-    const char* filterName() const final { return "FEImage"; }
-
     void platformApplySoftware() final;
     void determineAbsolutePaintRect() final;
     WTF::TextStream& externalRepresentation(WTF::TextStream&, RepresentationType) const final;
@@ -60,3 +54,5 @@
 };
 
 } // namespace WebCore
+
+SPECIALIZE_TYPE_TRAITS_FILTER_EFFECT(FEImage)

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


--- trunk/Source/WebCore/svg/graphics/filters/SVGFilter.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/svg/graphics/filters/SVGFilter.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -25,7 +25,7 @@
 namespace WebCore {
 
 SVGFilter::SVGFilter(const AffineTransform& absoluteTransform, const FloatRect& absoluteSourceDrawingRegion, const FloatRect& targetBoundingBox, const FloatRect& filterRegion, bool effectBBoxMode)
-    : Filter(absoluteTransform)
+    : Filter(Filter::Type::CSSFilter, absoluteTransform)
     , m_absoluteSourceDrawingRegion(absoluteSourceDrawingRegion)
     , m_targetBoundingBox(targetBoundingBox)
     , m_filterRegion(filterRegion)

Modified: trunk/Source/WebCore/svg/graphics/filters/SVGFilter.h (285542 => 285543)


--- trunk/Source/WebCore/svg/graphics/filters/SVGFilter.h	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/svg/graphics/filters/SVGFilter.h	2021-11-10 00:40:53 UTC (rev 285543)
@@ -57,4 +57,5 @@
 
 SPECIALIZE_TYPE_TRAITS_BEGIN(WebCore::SVGFilter)
     static bool isType(const WebCore::Filter& filter) { return filter.isSVGFilter(); }
+    static bool isType(const WebCore::FilterFunction& function) { return function.isSVGFilter(); }
 SPECIALIZE_TYPE_TRAITS_END()

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


--- trunk/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp	2021-11-10 00:38:06 UTC (rev 285542)
+++ trunk/Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp	2021-11-10 00:40:53 UTC (rev 285543)
@@ -21,6 +21,7 @@
 #include "SVGFilterBuilder.h"
 
 #include "FilterEffect.h"
+#include "ImageBuffer.h"
 #include "SourceAlpha.h"
 #include "SourceGraphic.h"
 #include <wtf/text/StringConcatenateNumbers.h>
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to