Changeset 257730 in webkit


Ignore:
Timestamp:
Mar 2, 2020 1:12:40 PM (4 years ago)
Author:
commit-queue@webkit.org
Message:

Implement the remote ImageBuffer
https://bugs.webkit.org/show_bug.cgi?id=207221

Patch by Said Abou-Hallawa <sabouhallawa@apple.com> on 2020-03-02
Reviewed by Jon Lee.

Source/WebCore:

  • WebCore.xcodeproj/project.pbxproj:
  • platform/graphics/ConcreteImageBuffer.h:

(WebCore::ConcreteImageBuffer::create):
ConcreteImageBuffer::create returns the derived class which it creates.

  • platform/graphics/displaylists/DisplayList.h:

This using statement gives compilation error when referencing DisplayList
from WebKit.

  • platform/graphics/displaylists/DisplayListDrawingContext.h:

RemoteImageBuffer inherits DisplayList::ImageBuffer so these methods
need to be exported.

  • platform/graphics/displaylists/DisplayListImageBuffer.h:

(WebCore::DisplayList::ImageBuffer::ImageBuffer):
Make it possible for RemoteImageBuffer to be created with no backend. It
will be created later when RemoteImageBufferProxy shares its backend with
RemoteImageBuffer.

Source/WebKit:

RemoteImageBuffer and RemoteImageBufferProxy represent a single remote
ImageBuffer. The back end should be created by RemoteImageBufferProxy in
GPUProcess and shared with the RemoteImageBuffer in the WebProcess.
Flushing the DrawingContext will be done in GPUProcess. But creating the
native image out of the back end will be in GPUProcess.

RemoteRenderingBackend and RemoteRenderingBackendProxy are central points
for receiving and sending all the messages of the RemoteImageBuffer and
RemoteImageBufferProxy.

  • GPUProcess/graphics/PlatformRemoteImageBufferProxy.h: Added.

Defines the platform types of RemoteImageBufferProxy.

  • GPUProcess/graphics/RemoteImageBufferMessageHandlerProxy.cpp: Added.

(WebKit::RemoteImageBufferMessageHandlerProxy::RemoteImageBufferMessageHandlerProxy):
(WebKit::RemoteImageBufferMessageHandlerProxy::createBackend):
(WebKit::RemoteImageBufferMessageHandlerProxy::commitFlushContext):

  • GPUProcess/graphics/RemoteImageBufferMessageHandlerProxy.h: Added.

Manages sending and receiving the messages of RemoteImageBufferProxy

  • GPUProcess/graphics/RemoteImageBufferProxy.h: Added.

(WebKit::RemoteImageBufferProxy::create):
(WebKit::RemoteImageBufferProxy::RemoteImageBufferProxy):
It is responsible for creating a shared back end and replaying back drawing
commands.

  • GPUProcess/graphics/RemoteRenderingBackendProxy.cpp:

(WebKit::RemoteRenderingBackendProxy::createImageBuffer):
(WebKit::RemoteRenderingBackendProxy::releaseImageBuffer):
(WebKit::RemoteRenderingBackendProxy::flushImageBufferDrawingContext):

  • GPUProcess/graphics/RemoteRenderingBackendProxy.h:

(WebKit::RemoteRenderingBackendProxy::renderingBackendIdentifier const):

  • GPUProcess/graphics/RemoteRenderingBackendProxy.messages.in:

Handle or dispatch messages received from RemoteRenderingBackend.

  • Scripts/webkit/messages.py:
  • Sources.txt:
  • WebKit.xcodeproj/project.pbxproj:
  • WebProcess/GPU/graphics/ImageBufferFlushIdentifier.h: Added.
  • WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp:

(WebKit::ImageBufferShareableBitmapBackend::create):

  • WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.h:

Although hostWindow isn't used, this is what ConcreteImageBuffer::create
expects from the creator of the backend.

  • WebProcess/GPU/graphics/PlatformRemoteImageBuffer.h: Added.

Defines the platform types of RemoteImageBuffer.

  • WebProcess/GPU/graphics/RemoteImageBuffer.h: Added.

(WebKit::RemoteImageBuffer::create):
(WebKit::RemoteImageBuffer::RemoteImageBuffer):
It is responsible for creating RemoteImageBufferProxy and performing the
drawing commands in the GPUProcess.

  • WebProcess/GPU/graphics/RemoteImageBufferMessageHandler.cpp: Added.

(WebKit::RemoteImageBufferMessageHandler::RemoteImageBufferMessageHandler):
(WebKit::RemoteImageBufferMessageHandler::~RemoteImageBufferMessageHandler):
(WebKit::RemoteImageBufferMessageHandler::flushDrawingContext):
(WebKit::RemoteImageBufferMessageHandler::commitFlushContext):

  • WebProcess/GPU/graphics/RemoteImageBufferMessageHandler.h: Added.

(WebKit::RemoteImageBufferMessageHandler::imageBufferIdentifier const):
Manages sending and receiving the messages of RemoteImageBuffer.

  • WebProcess/GPU/graphics/RemoteRenderingBackend.cpp:

(WebKit::RemoteRenderingBackend::createImageBuffer):
(WebKit::RemoteRenderingBackend::releaseImageBuffer):
(WebKit::RemoteRenderingBackend::createImageBufferBackend):
(WebKit::RemoteRenderingBackend::commitImageBufferFlushContext):

  • WebProcess/GPU/graphics/RemoteRenderingBackend.h:

(WebKit::RemoteRenderingBackend::renderingBackendIdentifier const):

  • WebProcess/GPU/graphics/RemoteRenderingBackend.messages.in:

Handle or dispatch messages received from RemoteRenderingBackendProxy.

  • WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.cpp:

(WebKit::ImageBufferShareableIOSurfaceBackend::create):

  • WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.h:

Although hostWindow isn't used, this is what ConcreteImageBuffer::create
expects from the creator of the backend.

Location:
trunk/Source
Files:
5 added
22 edited
4 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r257729 r257730  
     12020-03-02  Said Abou-Hallawa  <sabouhallawa@apple.com>
     2
     3        Implement the remote ImageBuffer
     4        https://bugs.webkit.org/show_bug.cgi?id=207221
     5
     6        Reviewed by Jon Lee.
     7
     8        * WebCore.xcodeproj/project.pbxproj:
     9        * platform/graphics/ConcreteImageBuffer.h:
     10        (WebCore::ConcreteImageBuffer::create):
     11        ConcreteImageBuffer::create returns the derived class which it creates.
     12
     13        * platform/graphics/displaylists/DisplayList.h:
     14        This using statement gives compilation error when referencing DisplayList
     15        from WebKit.
     16
     17        * platform/graphics/displaylists/DisplayListDrawingContext.h:
     18        RemoteImageBuffer inherits DisplayList::ImageBuffer so these methods
     19        need to be exported.
     20
     21        * platform/graphics/displaylists/DisplayListImageBuffer.h:
     22        (WebCore::DisplayList::ImageBuffer::ImageBuffer):
     23        Make it possible for RemoteImageBuffer to be created with no backend. It
     24        will be created later when RemoteImageBufferProxy shares its backend with
     25        RemoteImageBuffer.
     26
    1272020-03-02  Rob Buis  <rbuis@igalia.com>
    228
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r257697 r257730  
    17481748                5576A5651D88A70800CCC04C /* ImageFrame.h in Headers */ = {isa = PBXBuildFile; fileRef = 5576A5631D88A70800CCC04C /* ImageFrame.h */; settings = {ATTRIBUTES = (Private, ); }; };
    17491749                55A336F91D821E3C0022C4C7 /* ImageBackingStore.h in Headers */ = {isa = PBXBuildFile; fileRef = 55A336F81D821E3C0022C4C7 /* ImageBackingStore.h */; settings = {ATTRIBUTES = (Private, ); }; };
     1750                55AD093E2408963500DE4D2F /* DisplayListImageBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 72EA09F723FCCB3D008504A5 /* DisplayListImageBuffer.h */; settings = {ATTRIBUTES = (Private, ); }; };
     1751                55AD09402408964000DE4D2F /* DisplayListDrawingContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 72EA09F923FCCC6A008504A5 /* DisplayListDrawingContext.h */; settings = {ATTRIBUTES = (Private, ); }; };
     1752                55AD09412408964A00DE4D2F /* ConcreteImageBuffer.h in Headers */ = {isa = PBXBuildFile; fileRef = 72BAC3A723E17328008D741C /* ConcreteImageBuffer.h */; settings = {ATTRIBUTES = (Private, ); }; };
    17501753                55AF14E61EAAC59B0026EEAA /* UTIRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 55AF14E41EAAC59B0026EEAA /* UTIRegistry.h */; settings = {ATTRIBUTES = (Private, ); }; };
    17511754                55DCC52822407B2000C26E32 /* SVGPrimitiveList.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DCC5252240749E00C26E32 /* SVGPrimitiveList.h */; settings = {ATTRIBUTES = (Private, ); }; };
     
    2937329376                                2DD5A7271EBEE47D009BA597 /* CompositionUnderline.h in Headers */,
    2937429377                                7116E2CC1FED75DC00C06FDE /* ComputedEffectTiming.h in Headers */,
     29378                                55AD09412408964A00DE4D2F /* ConcreteImageBuffer.h in Headers */,
    2937529379                                FD31608F12B026F700C1A359 /* Cone.h in Headers */,
    2937629380                                65C97AF308EA908800ACD273 /* config.h in Headers */,
     
    2971829722                                6FB47E632277425A00C7BCB0 /* DisplayLineBox.h in Headers */,
    2971929723                                0FE5FBD31C3DD51E0007A2CA /* DisplayList.h in Headers */,
     29724                                55AD09402408964000DE4D2F /* DisplayListDrawingContext.h in Headers */,
     29725                                55AD093E2408963500DE4D2F /* DisplayListImageBuffer.h in Headers */,
    2972029726                                0FE5FBD51C3DD51E0007A2CA /* DisplayListItems.h in Headers */,
    2972129727                                0FE5FBD71C3DD51E0007A2CA /* DisplayListRecorder.h in Headers */,
  • trunk/Source/WebCore/platform/graphics/ConcreteImageBuffer.h

    r257156 r257730  
    3535public:
    3636    template<typename ImageBufferType = ConcreteImageBuffer, typename... Arguments>
    37     static std::unique_ptr<ImageBuffer> create(const FloatSize& size, float resolutionScale, ColorSpace colorSpace, const HostWindow* hostWindow, Arguments&&... arguments)
     37    static std::unique_ptr<ImageBufferType> create(const FloatSize& size, float resolutionScale, ColorSpace colorSpace, const HostWindow* hostWindow, Arguments&&... arguments)
    3838    {
    3939        auto backend = BackendType::create(size, resolutionScale, colorSpace, hostWindow);
     
    4444
    4545    template<typename ImageBufferType = ConcreteImageBuffer, typename... Arguments>
    46     static std::unique_ptr<ImageBuffer> create(const FloatSize& size, const GraphicsContext& context, Arguments&&... arguments)
     46    static std::unique_ptr<ImageBufferType> create(const FloatSize& size, const GraphicsContext& context, Arguments&&... arguments)
    4747    {
    4848        auto backend = BackendType::create(size, context);
  • trunk/Source/WebCore/platform/graphics/displaylists/DisplayList.h

    r253417 r257730  
    178178    }
    179179
    180     void clear();
     180    WEBCORE_EXPORT void clear();
    181181    void removeItemsFromIndex(size_t);
    182182
     
    252252
    253253} // WebCore
    254 
    255 using WebCore::DisplayList::DisplayList;
    256 
  • trunk/Source/WebCore/platform/graphics/displaylists/DisplayListDrawingContext.h

    r257156 r257730  
    3434class DrawingContext {
    3535public:
    36     DrawingContext(const FloatSize& logicalSize);
     36    WEBCORE_EXPORT DrawingContext(const FloatSize& logicalSize);
    3737
    3838    GraphicsContext& context() const { return const_cast<DrawingContext&>(*this).m_context; }
     
    4141    const DisplayList* replayedDisplayList() const { return m_replayedDisplayList.get(); }
    4242
    43     void setTracksDisplayListReplay(bool);
    44     void replayDisplayList(GraphicsContext&);
     43    WEBCORE_EXPORT void setTracksDisplayListReplay(bool);
     44    WEBCORE_EXPORT void replayDisplayList(GraphicsContext&);
    4545
    4646protected:
  • trunk/Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h

    r257156 r257730  
    5353    }
    5454
     55    ImageBuffer(const FloatSize& size)
     56        : m_drawingContext(size)
     57    {
     58    }
     59
    5560    ~ImageBuffer()
    5661    {
  • trunk/Source/WebKit/ChangeLog

    r257726 r257730  
     12020-03-02  Said Abou-Hallawa  <sabouhallawa@apple.com>
     2
     3        Implement the remote ImageBuffer
     4        https://bugs.webkit.org/show_bug.cgi?id=207221
     5
     6        Reviewed by Jon Lee.
     7
     8        RemoteImageBuffer and RemoteImageBufferProxy represent a single remote
     9        ImageBuffer. The back end should be created by RemoteImageBufferProxy in
     10        GPUProcess and shared with the RemoteImageBuffer in the WebProcess.
     11        Flushing the DrawingContext will be done in GPUProcess. But creating the
     12        native image out of the back end will be in GPUProcess.
     13
     14        RemoteRenderingBackend and RemoteRenderingBackendProxy are central points
     15        for receiving and sending all the messages of the RemoteImageBuffer and
     16        RemoteImageBufferProxy.
     17
     18        * GPUProcess/graphics/PlatformRemoteImageBufferProxy.h: Added.
     19        Defines the platform types of RemoteImageBufferProxy.
     20
     21        * GPUProcess/graphics/RemoteImageBufferMessageHandlerProxy.cpp: Added.
     22        (WebKit::RemoteImageBufferMessageHandlerProxy::RemoteImageBufferMessageHandlerProxy):
     23        (WebKit::RemoteImageBufferMessageHandlerProxy::createBackend):
     24        (WebKit::RemoteImageBufferMessageHandlerProxy::commitFlushContext):
     25        * GPUProcess/graphics/RemoteImageBufferMessageHandlerProxy.h: Added.
     26        Manages sending and receiving the messages of RemoteImageBufferProxy
     27
     28        * GPUProcess/graphics/RemoteImageBufferProxy.h: Added.
     29        (WebKit::RemoteImageBufferProxy::create):
     30        (WebKit::RemoteImageBufferProxy::RemoteImageBufferProxy):
     31        It is responsible for creating a shared back end and replaying back drawing
     32        commands.
     33
     34        * GPUProcess/graphics/RemoteRenderingBackendProxy.cpp:
     35        (WebKit::RemoteRenderingBackendProxy::createImageBuffer):
     36        (WebKit::RemoteRenderingBackendProxy::releaseImageBuffer):
     37        (WebKit::RemoteRenderingBackendProxy::flushImageBufferDrawingContext):
     38        * GPUProcess/graphics/RemoteRenderingBackendProxy.h:
     39        (WebKit::RemoteRenderingBackendProxy::renderingBackendIdentifier const):
     40        * GPUProcess/graphics/RemoteRenderingBackendProxy.messages.in:
     41        Handle or dispatch messages received from RemoteRenderingBackend.
     42
     43        * Scripts/webkit/messages.py:
     44        * Sources.txt:
     45        * WebKit.xcodeproj/project.pbxproj:
     46        * WebProcess/GPU/graphics/ImageBufferFlushIdentifier.h: Added.
     47
     48        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp:
     49        (WebKit::ImageBufferShareableBitmapBackend::create):
     50        * WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.h:
     51        Although hostWindow isn't used, this is what ConcreteImageBuffer::create
     52        expects from the creator of the backend.
     53
     54        * WebProcess/GPU/graphics/PlatformRemoteImageBuffer.h: Added.
     55        Defines the platform types of RemoteImageBuffer.
     56
     57        * WebProcess/GPU/graphics/RemoteImageBuffer.h: Added.
     58        (WebKit::RemoteImageBuffer::create):
     59        (WebKit::RemoteImageBuffer::RemoteImageBuffer):
     60        It is responsible for creating RemoteImageBufferProxy and performing the
     61        drawing commands in the GPUProcess.
     62
     63        * WebProcess/GPU/graphics/RemoteImageBufferMessageHandler.cpp: Added.
     64        (WebKit::RemoteImageBufferMessageHandler::RemoteImageBufferMessageHandler):
     65        (WebKit::RemoteImageBufferMessageHandler::~RemoteImageBufferMessageHandler):
     66        (WebKit::RemoteImageBufferMessageHandler::flushDrawingContext):
     67        (WebKit::RemoteImageBufferMessageHandler::commitFlushContext):
     68        * WebProcess/GPU/graphics/RemoteImageBufferMessageHandler.h: Added.
     69        (WebKit::RemoteImageBufferMessageHandler::imageBufferIdentifier const):
     70        Manages sending and receiving the messages of RemoteImageBuffer.
     71
     72        * WebProcess/GPU/graphics/RemoteRenderingBackend.cpp:
     73        (WebKit::RemoteRenderingBackend::createImageBuffer):
     74        (WebKit::RemoteRenderingBackend::releaseImageBuffer):
     75        (WebKit::RemoteRenderingBackend::createImageBufferBackend):
     76        (WebKit::RemoteRenderingBackend::commitImageBufferFlushContext):
     77        * WebProcess/GPU/graphics/RemoteRenderingBackend.h:
     78        (WebKit::RemoteRenderingBackend::renderingBackendIdentifier const):
     79        * WebProcess/GPU/graphics/RemoteRenderingBackend.messages.in:
     80        Handle or dispatch messages received from RemoteRenderingBackendProxy.
     81
     82        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.cpp:
     83        (WebKit::ImageBufferShareableIOSurfaceBackend::create):
     84        * WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.h:
     85        Although hostWindow isn't used, this is what ConcreteImageBuffer::create
     86        expects from the creator of the backend.
     87
    1882020-03-02  John Wilander  <wilander@apple.com>
    289
  • trunk/Source/WebKit/GPUProcess/graphics/PlatformRemoteImageBufferProxy.h

    r257729 r257730  
    11/*
    2  * Copyright (C) 2020 Apple Inc. All rights reserved.
     2 * Copyright (C) 2020 Apple Inc.  All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2626#pragma once
    2727
    28 #include "DisplayList.h"
    29 #include "GraphicsContext.h"
     28#if ENABLE(GPU_PROCESS)
    3029
    31 namespace WebCore {
    32 namespace DisplayList {
     30#include "PlatformImageBufferShareableBackend.h"
     31#include "RemoteImageBufferProxy.h"
    3332
    34 class DrawingContext {
    35 public:
    36     DrawingContext(const FloatSize& logicalSize);
     33namespace WebKit {
    3734
    38     GraphicsContext& context() const { return const_cast<DrawingContext&>(*this).m_context; }
    39     DisplayList& displayList() { return m_displayList; }
    40     const DisplayList& displayList() const { return m_displayList; }
    41     const DisplayList* replayedDisplayList() const { return m_replayedDisplayList.get(); }
     35using UnacceleratedRemoteImageBufferProxy = RemoteImageBufferProxy<UnacceleratedImageBufferShareableBackend>;
     36using AcceleratedRemoteImageBufferProxy = RemoteImageBufferProxy<AcceleratedImageBufferShareableBackend>;
    4237
    43     void setTracksDisplayListReplay(bool);
    44     void replayDisplayList(GraphicsContext&);
     38} // namespace WebKit
    4539
    46 protected:
    47     GraphicsContext m_context;
    48     DisplayList m_displayList;
    49     std::unique_ptr<DisplayList> m_replayedDisplayList;
    50     bool m_tracksDisplayListReplay { false };
    51 };
    52 
    53 } // DisplayList
    54 } // WebCore
     40#endif // ENABLE(GPU_PROCESS)
  • trunk/Source/WebKit/GPUProcess/graphics/RemoteImageBufferMessageHandlerProxy.h

    r257729 r257730  
    2727
    2828#if ENABLE(GPU_PROCESS)
    29 #if HAVE(IOSURFACE)
    3029
    3130#include "ImageBufferBackendHandle.h"
    32 #include <WebCore/ImageBufferIOSurfaceBackend.h>
    33 #include <wtf/IsoMalloc.h>
     31#include "ImageBufferIdentifier.h"
     32#include <WebCore/ColorSpace.h>
     33#include <WebCore/DisplayList.h>
     34#include <WebCore/FloatSize.h>
    3435
    3536namespace WebKit {
    3637
    37 class ShareableBitmap;
     38class RemoteRenderingBackendProxy;
    3839
    39 class ImageBufferShareableIOSurfaceBackend : public WebCore::ImageBufferIOSurfaceBackend {
    40     WTF_MAKE_ISO_ALLOCATED(ImageBufferShareableIOSurfaceBackend);
    41     WTF_MAKE_NONCOPYABLE(ImageBufferShareableIOSurfaceBackend);
     40class RemoteImageBufferMessageHandlerProxy {
    4241public:
    43     static std::unique_ptr<ImageBufferShareableIOSurfaceBackend> create(const WebCore::FloatSize& logicalSize, const float resolutionScale, WebCore::ColorSpace);
    44     static std::unique_ptr<ImageBufferShareableIOSurfaceBackend> create(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& internalSize, float resolutionScale, WebCore::ColorSpace, ImageBufferBackendHandle);
     42    virtual ~RemoteImageBufferMessageHandlerProxy() = default;
    4543
    46     using WebCore::ImageBufferIOSurfaceBackend::ImageBufferIOSurfaceBackend;
     44    // Messages to be received. See RemoteRenderingBackendProxy.messages.in.
     45    virtual void flushDrawingContext(const WebCore::DisplayList::DisplayList&, ImageBufferFlushIdentifier) = 0;
    4746
    48     ImageBufferBackendHandle createImageBufferBackendHandle() const;
     47protected:
     48    RemoteImageBufferMessageHandlerProxy(RemoteRenderingBackendProxy&, ImageBufferIdentifier);
     49
     50    // Messages to be sent. See RemoteRenderingBackend.messages.in.
     51    void createBackend(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace, ImageBufferBackendHandle);
     52    void commitFlushContext(ImageBufferFlushIdentifier);
     53
     54private:
     55    RemoteRenderingBackendProxy& m_remoteRenderingBackendProxy;
     56    ImageBufferIdentifier m_imageBufferIdentifier;
    4957};
    5058
    5159} // namespace WebKit
    5260
    53 #endif // HAVE(IOSURFACE)
    5461#endif // ENABLE(GPU_PROCESS)
  • trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackendProxy.cpp

    r257542 r257730  
    2929#if ENABLE(GPU_PROCESS)
    3030
     31#include "PlatformRemoteImageBufferProxy.h"
    3132#include "RemoteRenderingBackendProxyMessages.h"
    3233
     
    7172        return;
    7273
    73     if (m_imageBufferMap.contains(imageBufferIdentifier)) {
     74    if (m_imageBufferMessageHandlerMap.contains(imageBufferIdentifier)) {
    7475        ASSERT_NOT_REACHED();
    7576        return;
    7677    }
    7778
    78     std::unique_ptr<ImageBuffer> imageBuffer;
    79 
    80     switch (renderingMode) {
    81     case RenderingMode::RemoteAccelerated:
    82     case RenderingMode::RemoteUnaccelerated:
    83         // FIXME: create the remote ImageBuffer proxy.
    84     default:
    85         ASSERT_NOT_REACHED();
     79    if (renderingMode == RenderingMode::RemoteAccelerated) {
     80        if (auto imageBuffer = AcceleratedRemoteImageBufferProxy::create(logicalSize, resolutionScale, colorSpace, *this, imageBufferIdentifier)) {
     81            m_imageBufferMessageHandlerMap.add(imageBufferIdentifier, WTFMove(imageBuffer));
     82            return;
     83        }
    8684    }
    8785
    88     if (!imageBuffer)
    89         return;
     86    if (renderingMode == RenderingMode::RemoteAccelerated || renderingMode == RenderingMode::RemoteUnaccelerated) {
     87        if (auto imageBuffer = UnacceleratedRemoteImageBufferProxy::create(logicalSize, resolutionScale, colorSpace, *this, imageBufferIdentifier)) {
     88            m_imageBufferMessageHandlerMap.add(imageBufferIdentifier, WTFMove(imageBuffer));
     89            return;
     90        }
     91    }
    9092
    91     m_imageBufferMap.add(imageBufferIdentifier, WTFMove(imageBuffer));
     93    ASSERT_NOT_REACHED();
    9294}
    9395
     
    9597{
    9698    // CreateImageBuffer message should have been received before this one.
    97     bool found = m_imageBufferMap.remove(imageBufferIdentifier);
     99    bool found = m_imageBufferMessageHandlerMap.remove(imageBufferIdentifier);
    98100    ASSERT_UNUSED(found, found);
     101}
     102
     103void RemoteRenderingBackendProxy::flushImageBufferDrawingContext(const WebCore::DisplayList::DisplayList& displayList, ImageBufferFlushIdentifier flushIdentifier, ImageBufferIdentifier imageBufferIdentifier)
     104{
     105    if (auto imageBuffer = m_imageBufferMessageHandlerMap.get(imageBufferIdentifier))
     106        imageBuffer->flushDrawingContext(displayList, flushIdentifier);
    99107}
    100108
  • trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackendProxy.h

    r257583 r257730  
    2929
    3030#include "Connection.h"
     31#include "ImageBufferFlushIdentifier.h"
    3132#include "ImageBufferIdentifier.h"
    3233#include "MessageReceiver.h"
    3334#include "MessageSender.h"
     35#include "RemoteImageBufferMessageHandlerProxy.h"
    3436#include "RenderingBackendIdentifier.h"
    3537#include <WebCore/ColorSpace.h>
     38#include <WebCore/DisplayListItems.h>
    3639#include <WebCore/FloatSize.h>
    37 #include <WebCore/ImageBuffer.h>
    3840#include <WebCore/RenderingMode.h>
    3941#include <wtf/HashMap.h>
     
    4547
    4648class RemoteRenderingBackendProxy
    47     : private IPC::MessageSender
     49    : public IPC::MessageSender
    4850    , private IPC::MessageReceiver {
    4951public:
    5052    static std::unique_ptr<RemoteRenderingBackendProxy> create(GPUConnectionToWebProcess&, RenderingBackendIdentifier);
    5153    virtual ~RemoteRenderingBackendProxy();
     54
     55    RenderingBackendIdentifier renderingBackendIdentifier() const { return m_renderingBackendIdentifier; }
    5256
    5357private:
     
    6165    void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
    6266
     67    // Messages to be received.
    6368    void createImageBuffer(const WebCore::FloatSize& logicalSize, WebCore::RenderingMode, float resolutionScale, WebCore::ColorSpace, ImageBufferIdentifier);
    6469    void releaseImageBuffer(ImageBufferIdentifier);
     70    void flushImageBufferDrawingContext(const WebCore::DisplayList::DisplayList&, ImageBufferFlushIdentifier, ImageBufferIdentifier);
    6571
    66     using ImageBufferMap = HashMap<ImageBufferIdentifier, std::unique_ptr<WebCore::ImageBuffer>>;
    67     ImageBufferMap m_imageBufferMap;
     72    using ImageBufferMessageHandlerMap = HashMap<ImageBufferIdentifier, std::unique_ptr<RemoteImageBufferMessageHandlerProxy>>;
     73    ImageBufferMessageHandlerMap m_imageBufferMessageHandlerMap;
    6874    WeakPtr<GPUConnectionToWebProcess> m_gpuConnectionToWebProcess;
    6975    RenderingBackendIdentifier m_renderingBackendIdentifier;
  • trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackendProxy.messages.in

    r257542 r257730  
    2626    void CreateImageBuffer(WebCore::FloatSize logicalSize, WebCore::RenderingMode renderingMode, float resolutionScale, WebCore::ColorSpace colorSpace, WebKit::ImageBufferIdentifier imageBufferIdentifier)
    2727    void ReleaseImageBuffer(WebKit::ImageBufferIdentifier imageBufferIdentifier)
     28    void FlushImageBufferDrawingContext(WebCore::DisplayList::DisplayList displayList, WebKit::ImageBufferFlushIdentifier flushIdentifier, WebKit::ImageBufferIdentifier imageBufferIdentifier)
    2829}
    2930
  • trunk/Source/WebKit/Scripts/webkit/messages.py

    r257612 r257730  
    226226        'WebKit::AudioMediaStreamTrackRendererIdentifier',
    227227        'WebKit::ContentWorldIdentifier',
     228        'WebKit::ImageBufferBackendHandle',
     229        'WebKit::ImageBufferFlushIdentifier',
    228230        'WebKit::ImageBufferIdentifier',
    229231        'WebKit::LayerHostingContextID',
  • trunk/Source/WebKit/Sources.txt

    r257606 r257730  
    2525GPUProcess/GPUConnectionToWebProcess.cpp
    2626GPUProcess/GPUProcessCreationParameters.cpp
     27GPUProcess/graphics/RemoteImageBufferMessageHandlerProxy.cpp
    2728GPUProcess/graphics/RemoteRenderingBackendProxy.cpp
    2829GPUProcess/media/RemoteAudioTrackProxy.cpp
     
    536537WebProcess/GPU/GPUProcessConnection.cpp
    537538WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp
     539WebProcess/GPU/graphics/RemoteImageBufferMessageHandler.cpp
    538540WebProcess/GPU/graphics/RemoteRenderingBackend.cpp
    539541WebProcess/GPU/media/AudioTrackPrivateRemote.cpp
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r257680 r257730  
    38193819                550640A424071C2100AAE045 /* RemoteRenderingBackendProxy.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = RemoteRenderingBackendProxy.messages.in; sourceTree = "<group>"; };
    38203820                550640A524071CC000AAE045 /* ImageBufferIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageBufferIdentifier.h; sourceTree = "<group>"; };
     3821                55AD09422408A02E00DE4D2F /* RemoteImageBufferProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteImageBufferProxy.h; sourceTree = "<group>"; };
     3822                55AD09432408A0E600DE4D2F /* PlatformRemoteImageBufferProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PlatformRemoteImageBufferProxy.h; sourceTree = "<group>"; };
     3823                55AD09442408ABB300DE4D2F /* ImageBufferFlushIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageBufferFlushIdentifier.h; sourceTree = "<group>"; };
    38213824                570AB8F220AE3BD700B8BE87 /* SecKeyProxyStore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SecKeyProxyStore.h; sourceTree = "<group>"; };
    38223825                570AB90020B2517400B8BE87 /* AuthenticationChallengeProxyCocoa.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AuthenticationChallengeProxyCocoa.mm; sourceTree = "<group>"; };
     
    40824085                71A676A522C62318007D6295 /* WKTouchActionGestureRecognizer.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = WKTouchActionGestureRecognizer.mm; path = ios/WKTouchActionGestureRecognizer.mm; sourceTree = "<group>"; };
    40834086                71FB810A2260627A00323677 /* WebsiteSimulatedMouseEventsDispatchPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebsiteSimulatedMouseEventsDispatchPolicy.h; sourceTree = "<group>"; };
     4087                7227800B2408BD7D007D376B /* PlatformRemoteImageBuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PlatformRemoteImageBuffer.h; sourceTree = "<group>"; };
     4088                7227800C24097A02007D376B /* RemoteImageBufferMessageHandler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteImageBufferMessageHandler.cpp; sourceTree = "<group>"; };
     4089                7227800D24097A02007D376B /* RemoteImageBufferMessageHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteImageBufferMessageHandler.h; sourceTree = "<group>"; };
     4090                722780112409906E007D376B /* RemoteImageBufferMessageHandlerProxy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteImageBufferMessageHandlerProxy.cpp; sourceTree = "<group>"; };
     4091                722780122409906E007D376B /* RemoteImageBufferMessageHandlerProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteImageBufferMessageHandlerProxy.h; sourceTree = "<group>"; };
    40844092                727A7F342407857D004D2931 /* ImageBufferShareableIOSurfaceBackend.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ImageBufferShareableIOSurfaceBackend.cpp; sourceTree = "<group>"; };
    40854093                727A7F352407857F004D2931 /* ImageBufferShareableIOSurfaceBackend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageBufferShareableIOSurfaceBackend.h; sourceTree = "<group>"; };
     
    40884096                727A7F38240788F0004D2931 /* PlatformImageBufferShareableBackend.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PlatformImageBufferShareableBackend.h; sourceTree = "<group>"; };
    40894097                727A7F39240788F1004D2931 /* ImageBufferBackendHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ImageBufferBackendHandle.h; sourceTree = "<group>"; };
     4098                727A7F492408AEE6004D2931 /* RemoteImageBuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteImageBuffer.h; sourceTree = "<group>"; };
    40904099                728E86EF1795188C0087879E /* WebColorPickerMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebColorPickerMac.h; sourceTree = "<group>"; };
    40914100                728E86F01795188C0087879E /* WebColorPickerMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebColorPickerMac.mm; sourceTree = "<group>"; };
     
    77467755                                727A7F3324078527004D2931 /* cocoa */,
    77477756                                727A7F39240788F1004D2931 /* ImageBufferBackendHandle.h */,
     7757                                55AD09442408ABB300DE4D2F /* ImageBufferFlushIdentifier.h */,
    77487758                                550640A524071CC000AAE045 /* ImageBufferIdentifier.h */,
    77497759                                727A7F37240788F0004D2931 /* ImageBufferShareableBitmapBackend.cpp */,
    77507760                                727A7F36240788F0004D2931 /* ImageBufferShareableBitmapBackend.h */,
    77517761                                727A7F38240788F0004D2931 /* PlatformImageBufferShareableBackend.h */,
     7762                                7227800B2408BD7D007D376B /* PlatformRemoteImageBuffer.h */,
     7763                                727A7F492408AEE6004D2931 /* RemoteImageBuffer.h */,
     7764                                7227800C24097A02007D376B /* RemoteImageBufferMessageHandler.cpp */,
     7765                                7227800D24097A02007D376B /* RemoteImageBufferMessageHandler.h */,
    77527766                                5506409D2407160900AAE045 /* RemoteRenderingBackend.cpp */,
    77537767                                5506409E2407160900AAE045 /* RemoteRenderingBackend.h */,
     
    77617775                        isa = PBXGroup;
    77627776                        children = (
     7777                                55AD09432408A0E600DE4D2F /* PlatformRemoteImageBufferProxy.h */,
     7778                                722780112409906E007D376B /* RemoteImageBufferMessageHandlerProxy.cpp */,
     7779                                722780122409906E007D376B /* RemoteImageBufferMessageHandlerProxy.h */,
     7780                                55AD09422408A02E00DE4D2F /* RemoteImageBufferProxy.h */,
    77637781                                550640A224071A6100AAE045 /* RemoteRenderingBackendProxy.cpp */,
    77647782                                550640A324071A6100AAE045 /* RemoteRenderingBackendProxy.h */,
  • trunk/Source/WebKit/WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.cpp

    r257606 r257730  
    4343WTF_MAKE_ISO_ALLOCATED_IMPL(ImageBufferShareableBitmapBackend);
    4444
    45 std::unique_ptr<ImageBufferShareableBitmapBackend> ImageBufferShareableBitmapBackend::create(const FloatSize& size, float resolutionScale, ColorSpace colorSpace)
     45std::unique_ptr<ImageBufferShareableBitmapBackend> ImageBufferShareableBitmapBackend::create(const FloatSize& size, float resolutionScale, ColorSpace colorSpace, const HostWindow*)
    4646{
    4747    IntSize backendSize = calculateBackendSize(size, resolutionScale);
  • trunk/Source/WebKit/WebProcess/GPU/graphics/ImageBufferShareableBitmapBackend.h

    r257606 r257730  
    4040    WTF_MAKE_NONCOPYABLE(ImageBufferShareableBitmapBackend);
    4141public:
    42     static std::unique_ptr<ImageBufferShareableBitmapBackend> create(const WebCore::FloatSize& logicalSize, const float resolutionScale, WebCore::ColorSpace);
     42    static std::unique_ptr<ImageBufferShareableBitmapBackend> create(const WebCore::FloatSize& logicalSize, const float resolutionScale, WebCore::ColorSpace, const WebCore::HostWindow*);
    4343    static std::unique_ptr<ImageBufferShareableBitmapBackend> create(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& internalSize, float resolutionScale, WebCore::ColorSpace, ImageBufferBackendHandle);
    4444
  • trunk/Source/WebKit/WebProcess/GPU/graphics/PlatformRemoteImageBuffer.h

    r257729 r257730  
    11/*
    2  * Copyright (C) 2020 Apple Inc. All rights reserved.
     2 * Copyright (C) 2020 Apple Inc.  All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2626#pragma once
    2727
    28 #include "DisplayList.h"
    29 #include "GraphicsContext.h"
     28#if ENABLE(GPU_PROCESS)
    3029
    31 namespace WebCore {
    32 namespace DisplayList {
     30#include "PlatformImageBufferShareableBackend.h"
     31#include "RemoteImageBuffer.h"
    3332
    34 class DrawingContext {
    35 public:
    36     DrawingContext(const FloatSize& logicalSize);
     33namespace WebKit {
    3734
    38     GraphicsContext& context() const { return const_cast<DrawingContext&>(*this).m_context; }
    39     DisplayList& displayList() { return m_displayList; }
    40     const DisplayList& displayList() const { return m_displayList; }
    41     const DisplayList* replayedDisplayList() const { return m_replayedDisplayList.get(); }
     35using UnacceleratedRemoteImageBuffer = RemoteImageBuffer<UnacceleratedImageBufferShareableBackend>;
     36using AcceleratedRemoteImageBuffer = RemoteImageBuffer<AcceleratedImageBufferShareableBackend>;
    4237
    43     void setTracksDisplayListReplay(bool);
    44     void replayDisplayList(GraphicsContext&);
     38} // namespace WebKit
    4539
    46 protected:
    47     GraphicsContext m_context;
    48     DisplayList m_displayList;
    49     std::unique_ptr<DisplayList> m_replayedDisplayList;
    50     bool m_tracksDisplayListReplay { false };
    51 };
    52 
    53 } // DisplayList
    54 } // WebCore
     40#endif // ENABLE(GPU_PROCESS)
  • trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferMessageHandler.h

    r257729 r257730  
    11/*
    2  * Copyright (C) 2020 Apple Inc. All rights reserved.
     2 * Copyright (C) 2020 Apple Inc.  All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2828#if ENABLE(GPU_PROCESS)
    2929
     30#include "ImageBufferFlushIdentifier.h"
    3031#include "ImageBufferIdentifier.h"
    31 #include "MessageReceiver.h"
    32 #include "MessageSender.h"
    33 #include "RenderingBackendIdentifier.h"
    3432#include <WebCore/ColorSpace.h>
     33#include <WebCore/DisplayList.h>
    3534#include <WebCore/FloatSize.h>
    36 #include <WebCore/ImageBuffer.h>
    3735#include <WebCore/RenderingMode.h>
    38 #include <wtf/HashMap.h>
    3936
    4037namespace WebKit {
    4138
    42 class RemoteRenderingBackend
    43     : private IPC::MessageSender
    44     , private IPC::MessageReceiver {
     39class RemoteRenderingBackend;
     40
     41class RemoteImageBufferMessageHandler {
    4542public:
    46     static std::unique_ptr<RemoteRenderingBackend> create();
     43    virtual ~RemoteImageBufferMessageHandler();
    4744
    48     ~RemoteRenderingBackend();
     45    ImageBufferIdentifier imageBufferIdentifier() const { return m_imageBufferIdentifier; }
    4946
    50     // IPC::MessageSender.
    51     IPC::Connection* messageSenderConnection() const override;
    52     uint64_t messageSenderDestinationID() const override;
     47    // Messages to be received. See RemoteRenderingBackend.messages.in.
     48    virtual void createBackend(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace, ImageBufferBackendHandle) = 0;
    5349
    54     std::unique_ptr<WebCore::ImageBuffer> createImageBuffer(const WebCore::FloatSize&, WebCore::RenderingMode, float resolutionScale, WebCore::ColorSpace);
    55     void releaseImageBuffer(ImageBufferIdentifier);
     50    void commitFlushContext(ImageBufferFlushIdentifier);
     51
     52protected:
     53    RemoteImageBufferMessageHandler(const WebCore::FloatSize&, WebCore::RenderingMode, float resolutionScale, WebCore::ColorSpace, RemoteRenderingBackend&);
     54
     55    // Messages to be sent. See RemoteRenderingBackendProxy.messages.in.
     56    void flushDrawingContext(const WebCore::DisplayList::DisplayList&);
    5657
    5758private:
    58     RemoteRenderingBackend();
    59        
    60     using ImageBufferMap = HashMap<ImageBufferIdentifier, WebCore::ImageBuffer*>;
    61     ImageBufferMap m_imageBufferMap;
    62     RenderingBackendIdentifier m_renderingBackendIdentifier { RenderingBackendIdentifier::generate() };
     59    WeakPtr<RemoteRenderingBackend> m_remoteRenderingBackend;
     60    ImageBufferIdentifier m_imageBufferIdentifier { ImageBufferIdentifier::generate() };
     61
     62    ImageBufferFlushIdentifier m_sentFlushIdentifier;
     63    ImageBufferFlushIdentifier m_receivedFlushIdentifier;
    6364};
    6465
  • trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.cpp

    r257542 r257730  
    3030
    3131#include "GPUProcessConnection.h"
     32#include "PlatformRemoteImageBuffer.h"
    3233#include "RemoteRenderingBackendMessages.h"
    3334#include "RemoteRenderingBackendProxyMessages.h"
     
    7273}
    7374
    74 std::unique_ptr<ImageBuffer> RemoteRenderingBackend::createImageBuffer(const FloatSize&, RenderingMode renderingMode, float, ColorSpace)
     75std::unique_ptr<ImageBuffer> RemoteRenderingBackend::createImageBuffer(const FloatSize& size, RenderingMode renderingMode, float resolutionScale, ColorSpace colorSpace)
    7576{
    76     switch (renderingMode) {
    77     case RenderingMode::RemoteAccelerated:
    78     case RenderingMode::RemoteUnaccelerated:
    79         // FIXME: Create the remote ImageBuffer
    80         return nullptr;
     77    if (renderingMode == RenderingMode::RemoteAccelerated) {
     78        if (auto imageBuffer = AcceleratedRemoteImageBuffer::create(size, renderingMode, resolutionScale, colorSpace, *this)) {
     79            m_imageBufferMessageHandlerMap.add(imageBuffer->imageBufferIdentifier(), imageBuffer.get());
     80            return imageBuffer;
     81        }
     82    }
    8183
    82     default:
    83         ASSERT_NOT_REACHED();
     84    if (renderingMode == RenderingMode::RemoteAccelerated || renderingMode == RenderingMode::RemoteUnaccelerated) {
     85        if (auto imageBuffer = UnacceleratedRemoteImageBuffer::create(size, renderingMode, resolutionScale, colorSpace, *this)) {
     86            m_imageBufferMessageHandlerMap.add(imageBuffer->imageBufferIdentifier(), imageBuffer.get());
     87            return imageBuffer;
     88        }
    8489    }
    8590
     
    9095{
    9196    // CreateImageBuffer message should have been received before this one.
    92     bool found = m_imageBufferMap.remove(imageBufferIdentifier);
     97    bool found = m_imageBufferMessageHandlerMap.remove(imageBufferIdentifier);
    9398    ASSERT_UNUSED(found, found);
     99}
    94100
    95     send(Messages::RemoteRenderingBackendProxy::ReleaseImageBuffer(imageBufferIdentifier), m_renderingBackendIdentifier);
     101void RemoteRenderingBackend::createImageBufferBackend(const FloatSize& logicalSize, const IntSize& backendSize, float resolutionScale, ColorSpace colorSpace, ImageBufferBackendHandle handle, ImageBufferIdentifier imageBufferIdentifier)
     102{
     103    if (auto imageBuffer = m_imageBufferMessageHandlerMap.get(imageBufferIdentifier))
     104        imageBuffer->createBackend(logicalSize, backendSize, resolutionScale, colorSpace, WTFMove(handle));
     105}
     106
     107void RemoteRenderingBackend::commitImageBufferFlushContext(ImageBufferFlushIdentifier flushIdentifier, ImageBufferIdentifier imageBufferIdentifier)
     108{
     109    if (auto imageBuffer = m_imageBufferMessageHandlerMap.get(imageBufferIdentifier))
     110        imageBuffer->commitFlushContext(flushIdentifier);
    96111}
    97112
  • trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.h

    r257583 r257730  
    2828#if ENABLE(GPU_PROCESS)
    2929
     30#include "ImageBufferBackendHandle.h"
     31#include "ImageBufferFlushIdentifier.h"
    3032#include "ImageBufferIdentifier.h"
    3133#include "MessageReceiver.h"
    3234#include "MessageSender.h"
     35#include "RemoteImageBufferMessageHandler.h"
    3336#include "RenderingBackendIdentifier.h"
    3437#include <WebCore/ColorSpace.h>
     38#include <WebCore/DisplayList.h>
    3539#include <WebCore/FloatSize.h>
    36 #include <WebCore/ImageBuffer.h>
    3740#include <WebCore/RenderingMode.h>
    3841#include <wtf/HashMap.h>
     42#include <wtf/WeakPtr.h>
    3943
    4044namespace WebKit {
    4145
    4246class RemoteRenderingBackend
    43     : private IPC::MessageSender
    44     , private IPC::MessageReceiver {
     47    : public IPC::MessageSender
     48    , private IPC::MessageReceiver
     49    , public CanMakeWeakPtr<RemoteRenderingBackend> {
    4550public:
    4651    static std::unique_ptr<RemoteRenderingBackend> create();
     
    4853    ~RemoteRenderingBackend();
    4954
     55    RenderingBackendIdentifier renderingBackendIdentifier() const { return m_renderingBackendIdentifier; }
     56
    5057    // IPC::MessageSender.
    5158    IPC::Connection* messageSenderConnection() const override;
    5259    uint64_t messageSenderDestinationID() const override;
     60
     61    // IPC::MessageReceiver
     62    void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
    5363
    5464    std::unique_ptr<WebCore::ImageBuffer> createImageBuffer(const WebCore::FloatSize&, WebCore::RenderingMode, float resolutionScale, WebCore::ColorSpace);
     
    5767private:
    5868    RemoteRenderingBackend();
    59        
    60     using ImageBufferMap = HashMap<ImageBufferIdentifier, WebCore::ImageBuffer*>;
    61     ImageBufferMap m_imageBufferMap;
     69
     70    // Messages to be received.
     71    void createImageBufferBackend(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& backendSize, float resolutionScale, WebCore::ColorSpace, ImageBufferBackendHandle, ImageBufferIdentifier);
     72    void commitImageBufferFlushContext(ImageBufferFlushIdentifier, ImageBufferIdentifier);
     73
     74    using ImageBufferMessageHandlerMap = HashMap<ImageBufferIdentifier, RemoteImageBufferMessageHandler*>;
     75    ImageBufferMessageHandlerMap m_imageBufferMessageHandlerMap;
    6276    RenderingBackendIdentifier m_renderingBackendIdentifier { RenderingBackendIdentifier::generate() };
    6377};
  • trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.messages.in

    r257542 r257730  
    2424
    2525messages -> RemoteRenderingBackend NotRefCounted {
    26 
     26    void CreateImageBufferBackend(WebCore::FloatSize logicalSize, WebCore::IntSize backendSize, float resolutionScale, WebCore::ColorSpace colorSpace, WebKit::ImageBufferBackendHandle handle, WebKit::ImageBufferIdentifier imageBufferIdentifier)
     27    void CommitImageBufferFlushContext(WebKit::ImageBufferFlushIdentifier flushIdentifier, WebKit::ImageBufferIdentifier imageBufferIdentifier)
    2728}
    2829
  • trunk/Source/WebKit/WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.cpp

    r257606 r257730  
    3838WTF_MAKE_ISO_ALLOCATED_IMPL(ImageBufferShareableIOSurfaceBackend);
    3939
    40 std::unique_ptr<ImageBufferShareableIOSurfaceBackend> ImageBufferShareableIOSurfaceBackend::create(const FloatSize& size, float resolutionScale, ColorSpace colorSpace)
     40std::unique_ptr<ImageBufferShareableIOSurfaceBackend> ImageBufferShareableIOSurfaceBackend::create(const FloatSize& size, float resolutionScale, ColorSpace colorSpace, const HostWindow*)
    4141{
    4242    IntSize backendSize = calculateBackendSize(size, resolutionScale);
  • trunk/Source/WebKit/WebProcess/GPU/graphics/cocoa/ImageBufferShareableIOSurfaceBackend.h

    r257606 r257730  
    4141    WTF_MAKE_NONCOPYABLE(ImageBufferShareableIOSurfaceBackend);
    4242public:
    43     static std::unique_ptr<ImageBufferShareableIOSurfaceBackend> create(const WebCore::FloatSize& logicalSize, const float resolutionScale, WebCore::ColorSpace);
     43    static std::unique_ptr<ImageBufferShareableIOSurfaceBackend> create(const WebCore::FloatSize& logicalSize, const float resolutionScale, WebCore::ColorSpace, const WebCore::HostWindow*);
    4444    static std::unique_ptr<ImageBufferShareableIOSurfaceBackend> create(const WebCore::FloatSize& logicalSize, const WebCore::IntSize& internalSize, float resolutionScale, WebCore::ColorSpace, ImageBufferBackendHandle);
    4545
  • trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp

    r257693 r257730  
    892892#if ENABLE(GPU_PROCESS)
    893893
    894 std::unique_ptr<ImageBuffer> WebChromeClient::createImageBuffer(const FloatSize& size, RenderingMode renderingMode, float resolutionScale, ColorSpace colorSpace) const
    895 {
    896     if (renderingMode != RenderingMode::RemoteAccelerated && renderingMode != RenderingMode::RemoteUnaccelerated)
    897         return nullptr;
    898 
     894RemoteRenderingBackend& WebChromeClient::ensureRemoteRenderingBackend() const
     895{
    899896    if (!m_remoteRenderingBackend)
    900897        m_remoteRenderingBackend = RemoteRenderingBackend::create();
    901     return m_remoteRenderingBackend->createImageBuffer(size, renderingMode, resolutionScale, colorSpace);
     898    return *m_remoteRenderingBackend;
    902899}
    903900
     
    911908    else
    912909        mode = shouldAccelerate == ShouldAccelerate::Yes ? RenderingMode::Accelerated : RenderingMode::Unaccelerated;
    913     return createImageBuffer(size, mode, resolutionScale, colorSpace);
     910    return ensureRemoteRenderingBackend().createImageBuffer(size, mode, resolutionScale, colorSpace);
    914911}
    915912
  • trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h

    r257677 r257730  
    235235
    236236#if ENABLE(GPU_PROCESS)
     237    RemoteRenderingBackend& ensureRemoteRenderingBackend() const;
    237238    std::unique_ptr<WebCore::ImageBuffer> createImageBuffer(const WebCore::FloatSize&, WebCore::ShouldAccelerate, WebCore::ShouldUseDisplayList, WebCore::RenderingPurpose, float resolutionScale, WebCore::ColorSpace) const final;
    238     std::unique_ptr<WebCore::ImageBuffer> createImageBuffer(const WebCore::FloatSize&, WebCore::RenderingMode, float resolutionScale, WebCore::ColorSpace) const final;
    239239#endif
    240240
Note: See TracChangeset for help on using the changeset viewer.