Branch: refs/heads/webkitglib/2.50
  Home:   https://github.com/WebKit/WebKit
  Commit: 408ffabf49611a8e0312b2f4bc3dfc661a38fe17
      
https://github.com/WebKit/WebKit/commit/408ffabf49611a8e0312b2f4bc3dfc661a38fe17
  Author: Nikolas Zimmermann <[email protected]>
  Date:   2025-12-19 (Fri, 19 Dec 2025)

  Changed paths:
    M Source/WebCore/bindings/js/SerializedScriptValue.cpp
    M Source/WebCore/html/ImageBitmap.cpp
    M Source/WebCore/html/ImageBitmap.h
    M Source/WebCore/html/canvas/OffscreenCanvasRenderingContext2D.cpp
    M Source/WebCore/platform/graphics/ImageBuffer.cpp
    M Source/WebCore/platform/graphics/ImageBuffer.h
    M Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp
    M Source/WebCore/platform/graphics/skia/GraphicsContextSkia.h
    M 
Source/WebCore/platform/graphics/skia/ImageBufferSkiaAcceleratedBackend.cpp
    M Source/WebCore/platform/graphics/skia/ImageBufferSkiaAcceleratedBackend.h

  Log Message:
  -----------
  Cherry-pick 304687@main (48db7480703c). 
https://bugs.webkit.org/show_bug.cgi?id=295538

    REGRESSION(287399@main): [Skia] Broke rendering of various PDFs
    https://bugs.webkit.org/show_bug.cgi?id=295538

    Reviewed by Carlos Garcia Campos.

    Fix PDF rendering regression caused by cross-thread transfer of accelerated
    ImageBitmap. When a texture-backed image is transferred across threads, the
    GPU texture may not be valid for the current Skia context.

    The fix has two parts:

    1. Flush GPU commands before cross-thread transfer by calling
       flushDrawingContext() in 
OffscreenCanvasRenderingContext2D::transferToImageBuffer().
       This is implemented via ImageBufferSkiaAcceleratedBackend::flushContext()
       which creates a GL fence and performs a server wait.

    2. Rewrap textures at draw time in GraphicsContextSkia::drawNativeImage().
       When drawing a texture-backed image, check if it's valid for the current
       GrContext using isValid(). If not (because it was created in a different
       thread/context), use SkImages::BorrowTextureFrom() to create a new 
SkImage
       wrapper around the existing backend texture. Before rewrapping, create
       a GL fence and server wait to ensure pending GPU operations on the source
       image are complete.

    This approach simplifies cross-thread transfer by removing the explicit
    prepare/finalize pattern from ImageBitmap (prepareForCrossThreadTransfer,
    finalizeCrossThreadTransfer, m_fence member), ImageBuffer
    (sinkIntoImageBufferForCrossThreadTransfer,
    sinkIntoImageBufferAfterCrossThreadTransfer), and SerializedScriptValue.

    Also refactor the fence creation API: rename the implementation to
    createAcceleratedRenderingFenceInternal, add public static
    createAcceleratedRenderingFence() methods for both SkSurface* and
    sk_sp<SkImage>, and remove the private 
createAcceleratedRenderingFenceIfNeeded
    methods by inlining the null/texture-backed checks into callers.

    Covered by existing tests.

    * Source/WebCore/bindings/js/SerializedScriptValue.cpp:
    (WebCore::CloneSerializer::dumpImageBitmap):
    (WebCore::CloneDeserializer::readTransferredImageBitmap):
    * Source/WebCore/html/ImageBitmap.cpp:
    (WebCore::ImageBitmap::prepareForCrossThreadTransfer): Deleted.
    (WebCore::ImageBitmap::finalizeCrossThreadTransfer): Deleted.
    * Source/WebCore/html/ImageBitmap.h:
    * Source/WebCore/html/canvas/OffscreenCanvasRenderingContext2D.cpp:
    (WebCore::OffscreenCanvasRenderingContext2D::transferToImageBuffer):
    * Source/WebCore/platform/graphics/ImageBuffer.cpp:
    (WebCore::DefaultSerializedImageBuffer::DefaultSerializedImageBuffer):
    (WebCore::ImageBuffer::sinkIntoImageBufferForCrossThreadTransfer): Deleted.
    (WebCore::ImageBuffer::sinkIntoImageBufferAfterCrossThreadTransfer): 
Deleted.
    * Source/WebCore/platform/graphics/ImageBuffer.h:
    * Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:
    (WebCore::GraphicsContextSkia::drawNativeImage):
    (WebCore::createAcceleratedRenderingFenceInternal):
    (WebCore::GraphicsContextSkia::createAcceleratedRenderingFence):
    (WebCore::GraphicsContextSkia::trackAcceleratedRenderingFenceIfNeeded):
    (WebCore::createAcceleratedRenderingFence): Deleted.
    (WebCore::GraphicsContextSkia::createAcceleratedRenderingFenceIfNeeded): 
Deleted.
    * Source/WebCore/platform/graphics/skia/GraphicsContextSkia.h:
    * 
Source/WebCore/platform/graphics/skia/ImageBufferSkiaAcceleratedBackend.cpp:
    (WebCore::ImageBufferSkiaAcceleratedBackend::flushContext):
    * Source/WebCore/platform/graphics/skia/ImageBufferSkiaAcceleratedBackend.h:

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

Canonical link: https://commits.webkit.org/298234.366@webkitglib/2.50



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to