[webkit-reviews] review granted: [Bug 209635] Hovering over countries at https://covidinc.io/ shows bizarre rendering artifacts : [Attachment 394732] Patch
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Fri Mar 27 12:34:08 PDT 2020
Said Abou-Hallawa <sabouhallawa at apple.com> has granted Simon Fraser (smfr)
<simon.fraser at apple.com>'s request for review:
Bug 209635: Hovering over countries at https://covidinc.io/ shows bizarre
rendering artifacts
https://bugs.webkit.org/show_bug.cgi?id=209635
Attachment 394732: Patch
https://bugs.webkit.org/attachment.cgi?id=394732&action=review
--- Comment #6 from Said Abou-Hallawa <sabouhallawa at apple.com> ---
Comment on attachment 394732
--> https://bugs.webkit.org/attachment.cgi?id=394732
Patch
View in context: https://bugs.webkit.org/attachment.cgi?id=394732&action=review
> Source/WebCore/ChangeLog:10
> + when using a image buffer mask. However, it created and rendered
into this image buffer
However, it is created...?
> Source/WebCore/rendering/RenderLayer.cpp:4497
> + auto referenceBox =
snapRectToDevicePixels(rootRelativeBounds.value(),
renderer().document().deviceScaleFactor());
The description mentioned the ImageBuffer wrong caching so I am confused about
this change. Is this cleanup or it is part of this fix?
> Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:131
> bool RenderSVGResourceClipper::applyClippingToContext(RenderElement&
renderer, const FloatRect& objectBoundingBox, const FloatRect& repaintRect,
GraphicsContext& context)
I think we can get rid of repaintRect. It is only used in the LOG_WITH_STREAM
statement and in the if-statement which recreates the ImageBuffer. I think the
caller should avoid calling this function if the repaintRect.isEmpty().
> Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:146
> + auto canUseExistingImageBuffer = [&]() {
> + return clipperData.imageBuffer && clipperData.objectBoundingBox ==
objectBoundingBox && clipperData.absoluteTransform == absoluteTransform;
> + };
Should not be this a function of ClipperData?
> Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:156
> + clipperData.imageBuffer = WTFMove(maskImage);
> + clipperData.objectBoundingBox = objectBoundingBox;
> + clipperData.absoluteTransform = absoluteTransform;
Can't this code be a constructor of ClipperData?
clipperData = { WTFMove(maskImage), objectBoundingBox, absoluteTransform };
> Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:177
> + clipperData.imageBuffer = nullptr;
Should not we clear everything, i.e. clipperData = { };?
> Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:187
> +bool RenderSVGResourceClipper::drawContentIntoMaskImage(ImageBuffer&
maskImageBuffer, const FloatRect& objectBoundingBox)
I think maskImageBuffer should be const ImageBuffer&.
> Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp:239
> -
SVGRenderingContext::renderSubtreeToImageBuffer(clipperMaskImage.get(),
isUseElement ? *child.renderer() : *renderer, maskContentTransformation);
> + SVGRenderingContext::renderSubtreeToImageBuffer(&maskImageBuffer,
isUseElement ? *child.renderer() : *renderer, maskContentTransformation);
Can't we just pass the maskImageBuffer->context() instead of maskImageBuffer
since renderSubtreeToImageBuffer() is using the ImageBuffer to get its
context()?
> Source/WebCore/rendering/svg/RenderSVGResourceClipper.h:33
> -typedef std::unique_ptr<ImageBuffer> ClipperMaskImage;
> +using ClipperMaskImage = std::unique_ptr<ImageBuffer>;
Do we still need this? It seems you replaced all the reference to
ClipperMaskImage by either ImageBuffer or ClipperData.
More information about the webkit-reviews
mailing list