Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: 5122c31fca02ec16ce25f30992f963102191ffe1 https://github.com/WebKit/WebKit/commit/5122c31fca02ec16ce25f30992f963102191ffe1 Author: Simon Fraser <simon.fra...@apple.com> Date: 2024-07-25 (Thu, 25 Jul 2024)
Changed paths: M Source/WebCore/platform/graphics/BifurcatedGraphicsContext.cpp M Source/WebCore/platform/graphics/BifurcatedGraphicsContext.h M Source/WebCore/platform/graphics/GraphicsContext.h M Source/WebCore/platform/graphics/NullGraphicsContext.h M Source/WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp M Source/WebCore/platform/graphics/cairo/GraphicsContextCairo.h M Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp M Source/WebCore/platform/graphics/cg/GraphicsContextCG.h M Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp M Source/WebCore/platform/graphics/displaylists/DisplayListItems.h M Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp M Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h M Source/WebCore/platform/graphics/displaylists/DisplayListRecorderImpl.cpp M Source/WebCore/platform/graphics/displaylists/DisplayListRecorderImpl.h M Source/WebCore/platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.cpp M Source/WebCore/platform/graphics/nicosia/cairo/NicosiaCairoOperationRecorder.h M Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp M Source/WebCore/platform/graphics/skia/GraphicsContextSkia.h M Source/WebCore/rendering/RenderObject.h M Source/WebCore/rendering/svg/SVGInlineTextBox.cpp M Source/WebCore/rendering/svg/SVGRenderingContext.cpp M Source/WebCore/rendering/svg/SVGRenderingContext.h M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGRect.cpp M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGRect.h M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResource.h M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceClipper.cpp M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceClipper.h M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceFilter.cpp M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceFilter.h M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceGradient.cpp M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceGradient.h M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceMarker.h M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceMasker.cpp M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceMasker.h M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourcePattern.cpp M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourcePattern.h M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceSolidColor.cpp M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceSolidColor.h M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGShape.cpp M Source/WebCore/rendering/svg/legacy/LegacyRenderSVGShape.h M Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.cpp M Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.h M Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.messages.in M Source/WebKit/Shared/DisplayListArgumentCoders.serialization.in M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in M Source/WebKit/WebKit.xcodeproj/project.pbxproj M Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp M Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.h M Tools/TestWebKitAPI/Tests/WebCore/DisplayListRecorderTests.cpp M Tools/TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp Log Message: ----------- Avoid an extra clip when painting a rect with a clip-path https://bugs.webkit.org/show_bug.cgi?id=276894 rdar://problem/132258982 Reviewed by Mike Wyrzykowski. Clipping is expensive at rendering time; we can avoid a clip when painting an SVG rect with a clip path if we know that the clip path is entirely within the bounds of the rect; we no longer need to clip to the rect, when filling with a gradient. Fix by plumbing RequiresClipToRect through the GraphicsContext functions that are used when filling a rect with a gradient, and use it to avoid the clip in `GraphicsContextCG::fillRect()`. We compute whether we can avoid this clip in `LegacyRenderSVGResourceClipper::applyResource()` when we know we're using the path-based clipping, on a non-rounded rect. This is passed out from the SVGRenderingContext code via `ApplyResult::ClipContainsRendererContent` which sets some state on `LegacyRenderSVGRect` (I considered passing as arguments, but that's yet more plumbing). * Source/WebCore/platform/graphics/BifurcatedGraphicsContext.cpp: (WebCore::BifurcatedGraphicsContext::fillRect): * Source/WebCore/platform/graphics/BifurcatedGraphicsContext.h: * Source/WebCore/platform/graphics/GraphicsContext.h: * Source/WebCore/platform/graphics/NullGraphicsContext.h: * Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp: (WebCore::GraphicsContextCG::fillRect): * Source/WebCore/platform/graphics/cg/GraphicsContextCG.h: * Source/WebCore/platform/graphics/displaylists/DisplayListItems.cpp: (WebCore::DisplayList::FillRect::apply const): (WebCore::DisplayList::FillRect::dump const): (WebCore::DisplayList::FillRectWithGradientAndSpaceTransform::FillRectWithGradientAndSpaceTransform): (WebCore::DisplayList::FillRectWithGradientAndSpaceTransform::dump const): * Source/WebCore/platform/graphics/displaylists/DisplayListItems.h: (WebCore::DisplayList::FillRect::FillRect): (WebCore::DisplayList::FillRect::requiresClipToRect const): (WebCore::DisplayList::FillRectWithGradientAndSpaceTransform::requiresClipToRect const): * Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp: (WebCore::DisplayList::Recorder::fillRect): * Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h: * Source/WebCore/platform/graphics/displaylists/DisplayListRecorderImpl.cpp: (WebCore::DisplayList::RecorderImpl::recordFillRect): (WebCore::DisplayList::RecorderImpl::recordFillRectWithGradientAndSpaceTransform): * Source/WebCore/platform/graphics/displaylists/DisplayListRecorderImpl.h: * Source/WebCore/rendering/RenderObject.h: (WebCore::RenderObject::isLegacyRenderSVGRect const): * Source/WebCore/rendering/svg/SVGInlineTextBox.cpp: (WebCore::SVGInlineTextBox::acquireLegacyPaintingResource): * Source/WebCore/rendering/svg/SVGRenderingContext.cpp: (WebCore::SVGRenderingContext::prepareToRenderSVGContent): * Source/WebCore/rendering/svg/SVGRenderingContext.h: (WebCore::SVGRenderingContext::pathClippingIsEntirelyWithinRendererContents const): * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGRect.cpp: (WebCore::LegacyRenderSVGRect::fillShape const): * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGRect.h: * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResource.h: (WebCore::resourceWasApplied): * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceClipper.cpp: (WebCore::LegacyRenderSVGResourceClipper::applyResource): (WebCore::LegacyRenderSVGResourceClipper::pathOnlyClipping): (WebCore::LegacyRenderSVGResourceClipper::applyClippingToContext): * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceClipper.h: * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceFilter.cpp: (WebCore::LegacyRenderSVGResourceFilter::applyResource): * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceFilter.h: * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceGradient.cpp: (WebCore::LegacyRenderSVGResourceGradient::applyResource): * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceGradient.h: * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceMarker.h: * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceMasker.cpp: (WebCore::LegacyRenderSVGResourceMasker::applyResource): * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceMasker.h: * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourcePattern.cpp: (WebCore::LegacyRenderSVGResourcePattern::applyResource): * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourcePattern.h: * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceSolidColor.cpp: (WebCore::LegacyRenderSVGResourceSolidColor::applyResource): * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGResourceSolidColor.h: * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGShape.cpp: (WebCore::LegacyRenderSVGShape::fillShape): (WebCore::LegacyRenderSVGShape::strokeShapeInternal): (WebCore::LegacyRenderSVGShape::paint): * Source/WebCore/rendering/svg/legacy/LegacyRenderSVGShape.h: (WebCore::LegacyRenderSVGShape::fillRequiresClip const): * Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.cpp: (WebKit::RemoteDisplayListRecorder::fillRect): * Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.h: * Source/WebKit/GPUProcess/graphics/RemoteDisplayListRecorder.messages.in: * Source/WebKit/Shared/DisplayListArgumentCoders.serialization.in: * Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in: * Source/WebKit/WebKit.xcodeproj/project.pbxproj: * Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp: (WebKit::RemoteDisplayListRecorderProxy::recordFillRect): (WebKit::RemoteDisplayListRecorderProxy::recordFillRectWithGradientAndSpaceTransform): * Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.h: * Tools/TestWebKitAPI/Tests/WebCore/cg/DisplayListTestsCG.cpp: (TestWebKitAPI::TEST(DisplayListTests, ReplayWithMissingResource)): Canonical link: https://commits.webkit.org/281361@main To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes