[webkit-changes] [WebKit/WebKit] f92c75: Implement ImageBufferPipe for CoreAnimation so tha...

mattwoodrow noreply at github.com
Sat Dec 10 22:20:12 PST 2022


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: f92c75b5eb3f5701b5a37283816170d8f861e829
      https://github.com/WebKit/WebKit/commit/f92c75b5eb3f5701b5a37283816170d8f861e829
  Author: Matt Woodrow <mattwoodrow at apple.com>
  Date:   2022-12-10 (Sat, 10 Dec 2022)

  Changed paths:
    M Source/WebCore/PlatformMac.cmake
    M Source/WebCore/SourcesCocoa.txt
    M Source/WebCore/WebCore.xcodeproj/project.pbxproj
    M Source/WebCore/html/OffscreenCanvas.cpp
    M Source/WebCore/html/canvas/CanvasRenderingContext.cpp
    M Source/WebCore/html/canvas/CanvasRenderingContext.h
    M Source/WebCore/html/canvas/PlaceholderRenderingContext.cpp
    M Source/WebCore/html/canvas/PlaceholderRenderingContext.h
    M Source/WebCore/platform/graphics/GraphicsLayer.cpp
    M Source/WebCore/platform/graphics/GraphicsLayer.h
    M Source/WebCore/platform/graphics/GraphicsLayerContentsDisplayDelegate.h
    M Source/WebCore/platform/graphics/ImageBufferPipe.cpp
    M Source/WebCore/platform/graphics/ImageBufferPipe.h
    M Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp
    M Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h
    A Source/WebCore/platform/graphics/ca/cocoa/GraphicsLayerAsyncContentsDisplayDelegateCocoa.h
    A Source/WebCore/platform/graphics/ca/cocoa/GraphicsLayerAsyncContentsDisplayDelegateCocoa.mm
    M Source/WebCore/platform/graphics/nicosia/NicosiaImageBufferPipe.cpp
    M Source/WebCore/platform/graphics/nicosia/NicosiaImageBufferPipe.h
    M Source/WebCore/rendering/RenderLayerBacking.cpp
    M Source/WebKit/WebProcess/WebPage/RemoteLayerTree/GraphicsLayerCARemote.h

  Log Message:
  -----------
  Implement ImageBufferPipe for CoreAnimation so that we can update frames without using the main-thread
https://bugs.webkit.org/show_bug.cgi?id=244878
<rdar://problem/99902985>

Creates a new API for pushing contents to a layer. The requirements here are that it works asynchronously (from a worker thread),
and that it works with UI process compositing (can't access any platform layers).

The existing APIs are insufficient, since setContentsToPlatformLayer won't work in the WebProcess if UI-side compositing is enabled,
and setContentsDisplayDelegate has main-thread callbacks for the delegate to provide new contents.

This adds a new API GraphicsLayerAsyncContentsDisplayDelegate, which get allocated on-demand by the GraphicsLayer implementation and
allows the consumer to push an ImageBuffer that will be copied into the GraphicsLayer asynchronously.

It adds an implementation of this new delegate type for GraphicsLayerCA, and a non-nicosia implementation of ImageBufferPipe which
uses it for frame transfer.

ImageBufferPipe (and the new delegate) both work by providing an ImageBuffer reference that needs to be copied if it succeeds, so that we
never end up copying in the caller and not using the frame.

Reviewed by Simon Fraser.

* Source/WebCore/PlatformMac.cmake:
* Source/WebCore/SourcesCocoa.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/html/canvas/CanvasRenderingContext.h:
(WebCore::CanvasRenderingContext::usesPlatformLayer const):
(WebCore::CanvasRenderingContext::platformLayer):
* Source/WebCore/html/canvas/PlaceholderRenderingContext.cpp:
(WebCore::PlaceholderRenderingContext::usesPlatformLayer const):
(WebCore::PlaceholderRenderingContext::platformLayer):
* Source/WebCore/html/canvas/PlaceholderRenderingContext.h:
* Source/WebCore/platform/graphics/ImageBufferPipe.cpp:
* Source/WebCore/platform/graphics/ImageBufferPipe.h:
(WebCore::ImageBufferPipe::usesPlatformLayer const):
(WebCore::ImageBufferPipe::platformLayer):
* Source/WebCore/platform/graphics/cocoa/ImageBufferPipeCA.mm: Added.
(WebCore::ImageBufferPipeSourceCA::ImageBufferPipeSourceCA):
(WebCore::ImageBufferPipeCA::ImageBufferPipeCA):
(WebCore::ImageBufferPipe::create):
* Source/WebCore/platform/graphics/cv/VideoFrameCV.mm:
* Source/WebCore/rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateConfiguration):

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




More information about the webkit-changes mailing list