[webkit-changes] [WebKit/WebKit] abc235: 2D context get/putImageData cache should be aware ...

Kimmo Kinnunen noreply at github.com
Mon Dec 4 01:29:31 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: abc23583c3fded932dce57b3a4cdfa547d771464
      https://github.com/WebKit/WebKit/commit/abc23583c3fded932dce57b3a4cdfa547d771464
  Author: Kimmo Kinnunen <kkinnunen at apple.com>
  Date:   2023-12-04 (Mon, 04 Dec 2023)

  Changed paths:
    M Source/WebCore/html/ImageData.cpp
    M Source/WebCore/html/ImageData.h
    M Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp
    M Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp
    M Source/WebCore/html/canvas/CanvasRenderingContext2DBase.h
    M Source/WebCore/platform/graphics/ByteArrayPixelBuffer.cpp
    M Source/WebCore/platform/graphics/PixelBuffer.cpp
    M Source/WebCore/platform/graphics/PixelBuffer.h
    M Source/WebKit/GPUProcess/graphics/ShareablePixelBuffer.cpp

  Log Message:
  -----------
  2D context get/putImageData cache should be aware of empty contents
https://bugs.webkit.org/show_bug.cgi?id=264930
rdar://118499949

Reviewed by Cameron McCormack.

Avoid real ImageBuffer::getPixelBuffer when getImageData is called
for a new 2D context. Track the transparent contents state and
just return zero filled ImageData buffer.

Hardens ImageData to ensure the data buffer is not created too big.
The buffer size is limited with PixelBuffer max size.
This would be caught with test
fast/canvas/canvas-getImageData-invalid-result-buffer-crash.html

Fixes a bug where CG path of text drawing would not mark the canvas
as modified. This would be caught with test
fast/canvas/gradient-text-with-shadow.html

Fixes a bug where focus drawing would not mark the canvas as modified.
This would be caught with test
fast/canvas/draw-focus-if-needed-with-path.html
fast/canvas/draw-focus-if-needed.html

* Source/WebCore/html/ImageData.cpp:
(WebCore::ImageData::create):
* Source/WebCore/html/ImageData.h:
* Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:
(WebCore::CanvasRenderingContext2DBase::reset):
(WebCore::CanvasRenderingContext2DBase::didDraw):
(WebCore::CanvasRenderingContext2DBase::evictCachedImageData):
(WebCore::CanvasRenderingContext2DBase::CachedContentsImageData::CachedContentsImageData):
(WebCore::CanvasRenderingContext2DBase::cacheImageDataIfPossible):
(WebCore::CanvasRenderingContext2DBase::makeImageDataIfContentsCached const):
(WebCore::CanvasRenderingContext2DBase::getImageData const):
(WebCore::CanvasRenderingContext2DBase::putImageData):
(WebCore::CanvasRenderingContext2DBase::CachedImageData::CachedImageData): Deleted.
(WebCore::CanvasRenderingContext2DBase::takeCachedImageDataIfPossible const): Deleted.
* Source/WebCore/html/canvas/CanvasRenderingContext2DBase.h:

Canonical link: https://commits.webkit.org/271462@main




More information about the webkit-changes mailing list