Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 5122c31fca02ec16ce25f30992f963102191ffe1
https://github.com/WebKit/WebKit/commit/5122c31fca02ec16ce25f30992f963102191ffe1
Author: Simon Fraser <[email protected]>
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
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes