Title: [257542] trunk/Source
Revision
257542
Author
[email protected]
Date
2020-02-26 17:51:57 -0800 (Wed, 26 Feb 2020)

Log Message

Implement the remote RenderingBackend
https://bugs.webkit.org/show_bug.cgi?id=207198

Patch by Said Abou-Hallawa <[email protected]> on 2020-02-26
Reviewed by Simon Fraser.

Source/WebCore:

* html/HTMLCanvasElement.cpp:
(WebCore::HTMLCanvasElement::createImageBuffer const):
Make HTMLCanvasElement be able to create a remote ImageBuffer.

Source/WebKit:

RemoteRenderingBackend and RemoteRenderingBackendProxy will be responsible
for  creating the two parts of the ImageBuffer: RemoteImageBuffer and
RemoteImageBufferProxy. They will also be responsible for sending and
receiving the messages for the remote the ImageBuffers.

* CMakeLists.txt:
* DerivedSources-input.xcfilelist:
* DerivedSources-output.xcfilelist:
* DerivedSources.make:

* GPUProcess/GPUConnectionToWebProcess.cpp:
(WebKit::GPUConnectionToWebProcess::createRenderingBackend):
(WebKit::GPUConnectionToWebProcess::releaseRenderingBackend):
(WebKit::GPUConnectionToWebProcess::dispatchMessage):
(WebKit::GPUConnectionToWebProcess::dispatchSyncMessage):
(WebKit::GPUConnectionToWebProcess::didReceiveMessage): Deleted.
(WebKit::GPUConnectionToWebProcess::didReceiveSyncMessage): Deleted.
* GPUProcess/GPUConnectionToWebProcess.h:
(WebKit::GPUConnectionToWebProcess::messageReceiverMap):
(WebKit::GPUConnectionToWebProcess::webProcessIdentifier const):
GPUConnectionToWebProcess dispatches messages to RemoteRenderingBackendProxy.

* GPUProcess/GPUConnectionToWebProcess.messages.in:
Adding the 'WantsDispatchMessage' attribute will force the messages.py
to generate code which calls dispatchMessage() and didReceiveSyncMessage()
when messages are received.

* GPUProcess/graphics: Added.
* GPUProcess/graphics/RemoteRenderingBackendProxy.cpp: Added.
(WebKit::RemoteRenderingBackendProxy::create):
(WebKit::RemoteRenderingBackendProxy::RemoteRenderingBackendProxy):
(WebKit::RemoteRenderingBackendProxy::~RemoteRenderingBackendProxy):
(WebKit::RemoteRenderingBackendProxy::messageSenderConnection const):
(WebKit::RemoteRenderingBackendProxy::messageSenderDestinationID const):
(WebKit::RemoteRenderingBackendProxy::createImageBuffer):
(WebKit::RemoteRenderingBackendProxy::releaseImageBuffer):
* GPUProcess/graphics/RemoteRenderingBackendProxy.h: Added.
* GPUProcess/graphics/RemoteRenderingBackendProxy.messages.in: Added.
RemoteRenderingBackendProxy is responsible for creating the remote
ImageBuffer proxy in the GPUProcess side. It holds it in a HashMap of
std::unique_ptr<ImageBuffer> indexed by the ImageBufferIdentifier.

* GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp:
* GPUProcess/webrtc/RemoteMediaRecorder.cpp:
* GPUProcess/webrtc/RemoteMediaRecorderManager.cpp:
* GPUProcess/webrtc/RemoteSampleBufferDisplayLayer.cpp:
Unified sources gardening.

* Scripts/webkit/messages.py:
Handle 'WantsDispatchMessage' attribute.

* Shared/WebCoreArgumentCoders.h:
* Sources.txt:
* SourcesCocoa.txt:
* WebKit.xcodeproj/project.pbxproj:

* WebProcess/GPU/GPUProcessConnection.cpp:
(WebKit::GPUProcessConnection::dispatchMessage):
(WebKit::GPUProcessConnection::dispatchSyncMessage):
(WebKit::GPUProcessConnection::didReceiveMessage): Deleted.
* WebProcess/GPU/GPUProcessConnection.h:
(WebKit::GPUProcessConnection::messageReceiverMap):
* WebProcess/GPU/GPUProcessConnection.messages.in:
GPUConnection dispatches messages to RemoteRenderingBackend.

* WebProcess/GPU/graphics: Added.
* WebProcess/GPU/graphics/ImageBufferIdentifier.h: Added.
* WebProcess/GPU/graphics/RemoteRenderingBackend.cpp: Added.
(WebKit::RemoteRenderingBackend::create):
(WebKit::RemoteRenderingBackend::RemoteRenderingBackend):
(WebKit::RemoteRenderingBackend::~RemoteRenderingBackend):
(WebKit::RemoteRenderingBackend::messageSenderConnection const):
(WebKit::RemoteRenderingBackend::messageSenderDestinationID const):
(WebKit::RemoteRenderingBackend::createImageBuffer):
(WebKit::RemoteRenderingBackend::releaseImageBuffer):
* WebProcess/GPU/graphics/RemoteRenderingBackend.h: Added.
* WebProcess/GPU/graphics/RemoteRenderingBackend.messages.in: Added.
* WebProcess/GPU/graphics/RenderingBackendIdentifier.h: Added.
RemoteRenderingBackend is responsible for creating the remote ImageBuffer
in the WebProcess side. It holds it in a HashMap of ImageBuffer* indexed
by the ImageBufferIdentifier.

* WebProcess/GPU/media/TextTrackPrivateRemote.cpp:
* WebProcess/GPU/media/TextTrackPrivateRemote.h:
* WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
* WebProcess/GPU/webrtc/MediaRecorderProvider.cpp:
* WebProcess/GPU/webrtc/SampleBufferDisplayLayer.cpp:
* WebProcess/GPU/webrtc/SampleBufferDisplayLayerManager.cpp:
Unified sources gardening.

* WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::createDisplayRefreshMonitor const):
(WebKit::WebChromeClient::createImageBuffer const):
* WebProcess/WebCoreSupport/WebChromeClient.h:
Create the remote ImageBuffer.

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (257541 => 257542)


--- trunk/Source/WebCore/ChangeLog	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebCore/ChangeLog	2020-02-27 01:51:57 UTC (rev 257542)
@@ -1,3 +1,14 @@
+2020-02-26  Said Abou-Hallawa  <[email protected]>
+
+        Implement the remote RenderingBackend
+        https://bugs.webkit.org/show_bug.cgi?id=207198
+
+        Reviewed by Simon Fraser.
+
+        * html/HTMLCanvasElement.cpp:
+        (WebCore::HTMLCanvasElement::createImageBuffer const):
+        Make HTMLCanvasElement be able to create a remote ImageBuffer.
+
 2020-02-26  Fujii Hironori  <[email protected]>
 
         Unreviewed unified source builds fix.

Modified: trunk/Source/WebCore/html/HTMLCanvasElement.cpp (257541 => 257542)


--- trunk/Source/WebCore/html/HTMLCanvasElement.cpp	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebCore/html/HTMLCanvasElement.cpp	2020-02-27 01:51:57 UTC (rev 257542)
@@ -895,8 +895,13 @@
     // FIXME: Add a new setting for DisplayList drawing on canvas.
     bool usesDisplayListDrawing = m_usesDisplayListDrawing.valueOr(document().settings().displayListDrawingEnabled());
 
+    // FIXME: Add a new setting for remote drawing on canvas.
+    bool usesRemoteDrawing = false;
+
     RenderingMode renderingMode;
-    if (usesDisplayListDrawing)
+    if (usesRemoteDrawing)
+        renderingMode = shouldAccelerate(size()) ? RenderingMode::RemoteAccelerated : RenderingMode::RemoteUnaccelerated;
+    else if (usesDisplayListDrawing)
         renderingMode = shouldAccelerate(size()) ? RenderingMode::DisplayListAccelerated : RenderingMode::DisplayListUnaccelerated;
     else
         renderingMode = shouldAccelerate(size()) ? RenderingMode::Accelerated : RenderingMode::Unaccelerated;

Modified: trunk/Source/WebKit/CMakeLists.txt (257541 => 257542)


--- trunk/Source/WebKit/CMakeLists.txt	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/CMakeLists.txt	2020-02-27 01:51:57 UTC (rev 257542)
@@ -80,6 +80,7 @@
     "${WEBKIT_DIR}/WebProcess/Gamepad"
     "${WEBKIT_DIR}/WebProcess/Geolocation"
     "${WEBKIT_DIR}/WebProcess/GPU"
+    "${WEBKIT_DIR}/WebProcess/GPU/graphics"
     "${WEBKIT_DIR}/WebProcess/GPU/media"
     "${WEBKIT_DIR}/WebProcess/GPU/webrtc"
     "${WEBKIT_DIR}/WebProcess/IconDatabase"

Modified: trunk/Source/WebKit/ChangeLog (257541 => 257542)


--- trunk/Source/WebKit/ChangeLog	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/ChangeLog	2020-02-27 01:51:57 UTC (rev 257542)
@@ -1,3 +1,106 @@
+2020-02-26  Said Abou-Hallawa  <[email protected]>
+
+        Implement the remote RenderingBackend
+        https://bugs.webkit.org/show_bug.cgi?id=207198
+
+        Reviewed by Simon Fraser.
+
+        RemoteRenderingBackend and RemoteRenderingBackendProxy will be responsible
+        for  creating the two parts of the ImageBuffer: RemoteImageBuffer and
+        RemoteImageBufferProxy. They will also be responsible for sending and
+        receiving the messages for the remote the ImageBuffers.
+
+        * CMakeLists.txt:
+        * DerivedSources-input.xcfilelist:
+        * DerivedSources-output.xcfilelist:
+        * DerivedSources.make:
+
+        * GPUProcess/GPUConnectionToWebProcess.cpp:
+        (WebKit::GPUConnectionToWebProcess::createRenderingBackend):
+        (WebKit::GPUConnectionToWebProcess::releaseRenderingBackend):
+        (WebKit::GPUConnectionToWebProcess::dispatchMessage):
+        (WebKit::GPUConnectionToWebProcess::dispatchSyncMessage):
+        (WebKit::GPUConnectionToWebProcess::didReceiveMessage): Deleted.
+        (WebKit::GPUConnectionToWebProcess::didReceiveSyncMessage): Deleted.
+        * GPUProcess/GPUConnectionToWebProcess.h:
+        (WebKit::GPUConnectionToWebProcess::messageReceiverMap):
+        (WebKit::GPUConnectionToWebProcess::webProcessIdentifier const):
+        GPUConnectionToWebProcess dispatches messages to RemoteRenderingBackendProxy.
+
+        * GPUProcess/GPUConnectionToWebProcess.messages.in:
+        Adding the 'WantsDispatchMessage' attribute will force the messages.py
+        to generate code which calls dispatchMessage() and didReceiveSyncMessage()
+        when messages are received.
+
+        * GPUProcess/graphics: Added.
+        * GPUProcess/graphics/RemoteRenderingBackendProxy.cpp: Added.
+        (WebKit::RemoteRenderingBackendProxy::create):
+        (WebKit::RemoteRenderingBackendProxy::RemoteRenderingBackendProxy):
+        (WebKit::RemoteRenderingBackendProxy::~RemoteRenderingBackendProxy):
+        (WebKit::RemoteRenderingBackendProxy::messageSenderConnection const):
+        (WebKit::RemoteRenderingBackendProxy::messageSenderDestinationID const):
+        (WebKit::RemoteRenderingBackendProxy::createImageBuffer):
+        (WebKit::RemoteRenderingBackendProxy::releaseImageBuffer):
+        * GPUProcess/graphics/RemoteRenderingBackendProxy.h: Added.
+        * GPUProcess/graphics/RemoteRenderingBackendProxy.messages.in: Added.
+        RemoteRenderingBackendProxy is responsible for creating the remote
+        ImageBuffer proxy in the GPUProcess side. It holds it in a HashMap of
+        std::unique_ptr<ImageBuffer> indexed by the ImageBufferIdentifier.
+
+        * GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp:
+        * GPUProcess/webrtc/RemoteMediaRecorder.cpp:
+        * GPUProcess/webrtc/RemoteMediaRecorderManager.cpp:
+        * GPUProcess/webrtc/RemoteSampleBufferDisplayLayer.cpp:
+        Unified sources gardening.
+
+        * Scripts/webkit/messages.py:
+        Handle 'WantsDispatchMessage' attribute.
+
+        * Shared/WebCoreArgumentCoders.h:
+        * Sources.txt:
+        * SourcesCocoa.txt:
+        * WebKit.xcodeproj/project.pbxproj:
+
+        * WebProcess/GPU/GPUProcessConnection.cpp:
+        (WebKit::GPUProcessConnection::dispatchMessage):
+        (WebKit::GPUProcessConnection::dispatchSyncMessage):
+        (WebKit::GPUProcessConnection::didReceiveMessage): Deleted.
+        * WebProcess/GPU/GPUProcessConnection.h:
+        (WebKit::GPUProcessConnection::messageReceiverMap):
+        * WebProcess/GPU/GPUProcessConnection.messages.in:
+        GPUConnection dispatches messages to RemoteRenderingBackend.
+
+        * WebProcess/GPU/graphics: Added.
+        * WebProcess/GPU/graphics/ImageBufferIdentifier.h: Added.
+        * WebProcess/GPU/graphics/RemoteRenderingBackend.cpp: Added.
+        (WebKit::RemoteRenderingBackend::create):
+        (WebKit::RemoteRenderingBackend::RemoteRenderingBackend):
+        (WebKit::RemoteRenderingBackend::~RemoteRenderingBackend):
+        (WebKit::RemoteRenderingBackend::messageSenderConnection const):
+        (WebKit::RemoteRenderingBackend::messageSenderDestinationID const):
+        (WebKit::RemoteRenderingBackend::createImageBuffer):
+        (WebKit::RemoteRenderingBackend::releaseImageBuffer):
+        * WebProcess/GPU/graphics/RemoteRenderingBackend.h: Added.
+        * WebProcess/GPU/graphics/RemoteRenderingBackend.messages.in: Added.
+        * WebProcess/GPU/graphics/RenderingBackendIdentifier.h: Added.
+        RemoteRenderingBackend is responsible for creating the remote ImageBuffer
+        in the WebProcess side. It holds it in a HashMap of ImageBuffer* indexed
+        by the ImageBufferIdentifier.
+
+        * WebProcess/GPU/media/TextTrackPrivateRemote.cpp:
+        * WebProcess/GPU/media/TextTrackPrivateRemote.h:
+        * WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp:
+        * WebProcess/GPU/webrtc/MediaRecorderProvider.cpp:
+        * WebProcess/GPU/webrtc/SampleBufferDisplayLayer.cpp:
+        * WebProcess/GPU/webrtc/SampleBufferDisplayLayerManager.cpp:
+        Unified sources gardening.
+
+        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+        (WebKit::WebChromeClient::createDisplayRefreshMonitor const):
+        (WebKit::WebChromeClient::createImageBuffer const):
+        * WebProcess/WebCoreSupport/WebChromeClient.h:
+        Create the remote ImageBuffer.
+
 2020-02-26  Alex Christensen  <[email protected]>
 
         Remove WebsiteDataStore::setSourceApplicationSecondaryIdentifier

Modified: trunk/Source/WebKit/DerivedSources-input.xcfilelist (257541 => 257542)


--- trunk/Source/WebKit/DerivedSources-input.xcfilelist	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/DerivedSources-input.xcfilelist	2020-02-27 01:51:57 UTC (rev 257542)
@@ -15,6 +15,7 @@
 $(_javascript_CORE_PRIVATE_HEADERS_DIR)/xxd.pl
 $(PROJECT_DIR)/GPUProcess/GPUConnectionToWebProcess.messages.in
 $(PROJECT_DIR)/GPUProcess/GPUProcess.messages.in
+$(PROJECT_DIR)/GPUProcess/graphics/RemoteRenderingBackendProxy.messages.in
 $(PROJECT_DIR)/GPUProcess/mac/com.apple.WebKit.GPUProcess.sb.in
 $(PROJECT_DIR)/GPUProcess/media/RemoteMediaPlayerManagerProxy.messages.in
 $(PROJECT_DIR)/GPUProcess/media/RemoteMediaPlayerProxy.messages.in
@@ -107,6 +108,7 @@
 $(PROJECT_DIR)/WebProcess/Databases/IndexedDB/WebIDBConnectionToServer.messages.in
 $(PROJECT_DIR)/WebProcess/FullScreen/WebFullScreenManager.messages.in
 $(PROJECT_DIR)/WebProcess/GPU/GPUProcessConnection.messages.in
+$(PROJECT_DIR)/WebProcess/GPU/graphics/RemoteRenderingBackend.messages.in
 $(PROJECT_DIR)/WebProcess/GPU/media/MediaPlayerPrivateRemote.messages.in
 $(PROJECT_DIR)/WebProcess/GPU/media/RemoteMediaPlayerManager.messages.in
 $(PROJECT_DIR)/WebProcess/GPU/media/TextTrackPrivateRemote.messages.in

Modified: trunk/Source/WebKit/DerivedSources-output.xcfilelist (257541 => 257542)


--- trunk/Source/WebKit/DerivedSources-output.xcfilelist	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/DerivedSources-output.xcfilelist	2020-02-27 01:51:57 UTC (rev 257542)
@@ -154,6 +154,12 @@
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteObjectRegistryMessageReceiver.cpp
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteObjectRegistryMessages.h
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteObjectRegistryMessagesReplies.h
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteRenderingBackendMessageReceiver.cpp
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteRenderingBackendMessages.h
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteRenderingBackendMessagesReplies.h
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteRenderingBackendProxyMessageReceiver.cpp
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteRenderingBackendProxyMessages.h
+$(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteRenderingBackendProxyMessagesReplies.h
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteSampleBufferDisplayLayerManagerMessageReceiver.cpp
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteSampleBufferDisplayLayerManagerMessages.h
 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit2/RemoteSampleBufferDisplayLayerManagerMessagesReplies.h

Modified: trunk/Source/WebKit/DerivedSources.make (257541 => 257542)


--- trunk/Source/WebKit/DerivedSources.make	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/DerivedSources.make	2020-02-27 01:51:57 UTC (rev 257542)
@@ -23,6 +23,7 @@
 VPATH = \
     $(WebKit2) \
     $(WebKit2)/GPUProcess \
+    $(WebKit2)/GPUProcess/graphics \
     $(WebKit2)/GPUProcess/mac \
     $(WebKit2)/GPUProcess/media \
     $(WebKit2)/GPUProcess/webrtc \
@@ -51,6 +52,7 @@
     $(WebKit2)/WebProcess/FullScreen \
     $(WebKit2)/WebProcess/Geolocation \
     $(WebKit2)/WebProcess/GPU \
+    $(WebKit2)/WebProcess/GPU/graphics \
     $(WebKit2)/WebProcess/GPU/media \
     $(WebKit2)/WebProcess/GPU/webrtc \
     $(WebKit2)/WebProcess/IconDatabase \
@@ -154,6 +156,8 @@
     RemoteMediaRecorderManager \
     RemoteMediaResourceManager \
     RemoteObjectRegistry \
+    RemoteRenderingBackend \
+    RemoteRenderingBackendProxy \
     RemoteSampleBufferDisplayLayer \
     RemoteSampleBufferDisplayLayerManager \
     RemoteScrollingCoordinator \

Modified: trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp (257541 => 257542)


--- trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.cpp	2020-02-27 01:51:57 UTC (rev 257542)
@@ -189,47 +189,63 @@
 }
 #endif
 
-void GPUConnectionToWebProcess::didReceiveMessage(IPC::Connection& connection, IPC::Decoder& decoder)
+void GPUConnectionToWebProcess::createRenderingBackend(RenderingBackendIdentifier renderingBackendIdentifier)
 {
+    auto addResult = m_remoteRenderingBackendProxyMap.ensure(renderingBackendIdentifier, [&]() {
+        return RemoteRenderingBackendProxy::create(*this, renderingBackendIdentifier);
+    });
+    ASSERT_UNUSED(addResult, addResult.isNewEntry);
+}
+
+void GPUConnectionToWebProcess::releaseRenderingBackend(RenderingBackendIdentifier renderingBackendIdentifier)
+{
+    bool found = m_remoteRenderingBackendProxyMap.remove(renderingBackendIdentifier);
+    ASSERT_UNUSED(found, found);
+}
+
+bool GPUConnectionToWebProcess::dispatchMessage(IPC::Connection& connection, IPC::Decoder& decoder)
+{
     if (decoder.messageReceiverName() == Messages::RemoteMediaPlayerManagerProxy::messageReceiverName()) {
         remoteMediaPlayerManagerProxy().didReceiveMessageFromWebProcess(connection, decoder);
-        return;
-    } else if (decoder.messageReceiverName() == Messages::RemoteMediaPlayerProxy::messageReceiverName()) {
+        return true;
+    }
+    if (decoder.messageReceiverName() == Messages::RemoteMediaPlayerProxy::messageReceiverName()) {
         remoteMediaPlayerManagerProxy().didReceivePlayerMessage(connection, decoder);
-        return;
-    } else if (decoder.messageReceiverName() == Messages::RemoteMediaResourceManager::messageReceiverName()) {
+        return true;
+    }
+    if (decoder.messageReceiverName() == Messages::RemoteMediaResourceManager::messageReceiverName()) {
         remoteMediaResourceManager().didReceiveMessage(connection, decoder);
-        return;
+        return true;
     }
 #if ENABLE(MEDIA_STREAM)
     if (decoder.messageReceiverName() == Messages::UserMediaCaptureManagerProxy::messageReceiverName()) {
         userMediaCaptureManagerProxy().didReceiveMessageFromGPUProcess(connection, decoder);
-        return;
+        return true;
     }
     if (decoder.messageReceiverName() == Messages::RemoteMediaRecorderManager::messageReceiverName()) {
         mediaRecorderManager().didReceiveMessageFromWebProcess(connection, decoder);
-        return;
+        return true;
     }
     if (decoder.messageReceiverName() == Messages::RemoteMediaRecorder::messageReceiverName()) {
         mediaRecorderManager().didReceiveRemoteMediaRecorderMessage(connection, decoder);
-        return;
+        return true;
     }
 #if PLATFORM(COCOA) && ENABLE(VIDEO_TRACK)
     if (decoder.messageReceiverName() == Messages::RemoteAudioMediaStreamTrackRendererManager::messageReceiverName()) {
         audioTrackRendererManager().didReceiveMessageFromWebProcess(connection, decoder);
-        return;
+        return true;
     }
     if (decoder.messageReceiverName() == Messages::RemoteAudioMediaStreamTrackRenderer::messageReceiverName()) {
         audioTrackRendererManager().didReceiveRendererMessage(connection, decoder);
-        return;
+        return true;
     }
     if (decoder.messageReceiverName() == Messages::RemoteSampleBufferDisplayLayerManager::messageReceiverName()) {
         sampleBufferDisplayLayerManager().didReceiveMessageFromWebProcess(connection, decoder);
-        return;
+        return true;
     }
     if (decoder.messageReceiverName() == Messages::RemoteSampleBufferDisplayLayer::messageReceiverName()) {
         sampleBufferDisplayLayerManager().didReceiveLayerMessage(connection, decoder);
-        return;
+        return true;
     }
 #endif
 #endif
@@ -236,32 +252,31 @@
 #if PLATFORM(COCOA) && USE(LIBWEBRTC)
     if (decoder.messageReceiverName() == Messages::LibWebRTCCodecsProxy::messageReceiverName()) {
         libWebRTCCodecsProxy().didReceiveMessageFromWebProcess(connection, decoder);
-        return;
+        return true;
     }
 #endif
+    return messageReceiverMap().dispatchMessage(connection, decoder);
 }
 
-void GPUConnectionToWebProcess::didReceiveSyncMessage(IPC::Connection& connection, IPC::Decoder& decoder, std::unique_ptr<IPC::Encoder>& replyEncoder)
+bool GPUConnectionToWebProcess::dispatchSyncMessage(IPC::Connection& connection, IPC::Decoder& decoder, std::unique_ptr<IPC::Encoder>& replyEncoder)
 {
     if (decoder.messageReceiverName() == Messages::RemoteMediaPlayerManagerProxy::messageReceiverName()) {
         remoteMediaPlayerManagerProxy().didReceiveSyncMessageFromWebProcess(connection, decoder, replyEncoder);
-        return;
+        return true;
     }
-
 #if ENABLE(MEDIA_STREAM)
     if (decoder.messageReceiverName() == Messages::UserMediaCaptureManagerProxy::messageReceiverName()) {
         userMediaCaptureManagerProxy().didReceiveSyncMessageFromGPUProcess(connection, decoder, replyEncoder);
-        return;
+        return true;
     }
 #if PLATFORM(COCOA) && ENABLE(VIDEO_TRACK)
     if (decoder.messageReceiverName() == Messages::RemoteSampleBufferDisplayLayerManager::messageReceiverName()) {
         sampleBufferDisplayLayerManager().didReceiveSyncMessageFromWebProcess(connection, decoder, replyEncoder);
-        return;
+        return true;
     }
 #endif
 #endif
-
-    ASSERT_NOT_REACHED();
+    return messageReceiverMap().dispatchSyncMessage(connection, decoder, replyEncoder);
 }
 
 const String& GPUConnectionToWebProcess::mediaCacheDirectory() const

Modified: trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h (257541 => 257542)


--- trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.h	2020-02-27 01:51:57 UTC (rev 257542)
@@ -28,13 +28,15 @@
 #if ENABLE(GPU_PROCESS)
 
 #include "Connection.h"
-#include "GPUConnectionToWebProcessMessagesReplies.h"
-#include <WebCore/DisplayListItems.h>
+#include "GPUConnectionToWebProcessMessages.h"
+#include "MessageReceiverMap.h"
+#include "RemoteRenderingBackendProxy.h"
+#include "RenderingBackendIdentifier.h"
 #include <WebCore/ProcessIdentifier.h>
 #include <pal/SessionID.h>
 #include <wtf/Logger.h>
 #include <wtf/RefCounted.h>
-#include <wtf/UniqueRef.h>
+#include <wtf/WeakPtr.h>
 
 namespace WebCore {
 class PlatformMediaSessionManager;
@@ -53,6 +55,7 @@
 
 class GPUConnectionToWebProcess
     : public RefCounted<GPUConnectionToWebProcess>
+    , public CanMakeWeakPtr<GPUConnectionToWebProcess>
     , IPC::Connection::Client {
 public:
     static Ref<GPUConnectionToWebProcess> create(GPUProcess&, WebCore::ProcessIdentifier, IPC::Connection::Identifier, PAL::SessionID);
@@ -59,12 +62,13 @@
     virtual ~GPUConnectionToWebProcess();
 
     IPC::Connection& connection() { return m_connection.get(); }
+    IPC::MessageReceiverMap& messageReceiverMap() { return m_messageReceiverMap; }
     GPUProcess& gpuProcess() { return m_gpuProcess.get(); }
+    WebCore::ProcessIdentifier webProcessIdentifier() const { return m_webProcessIdentifier; }
 
     void cleanupForSuspension(Function<void()>&&);
     void endSuspension();
 
-    WebCore::ProcessIdentifier webProcessIdentifier() const { return m_webProcessIdentifier; }
     RemoteMediaResourceManager& remoteMediaResourceManager();
 
     Logger& logger();
@@ -95,6 +99,8 @@
     RemoteSampleBufferDisplayLayerManager& sampleBufferDisplayLayerManager();
 #endif
 #endif
+    void createRenderingBackend(RenderingBackendIdentifier);
+    void releaseRenderingBackend(RenderingBackendIdentifier);
 
     // IPC::Connection::Client
     void didClose(IPC::Connection&) final;
@@ -102,9 +108,13 @@
     void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final;
     void didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&) final;
 
+    bool dispatchMessage(IPC::Connection&, IPC::Decoder&);
+    bool dispatchSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&);
+
     RefPtr<Logger> m_logger;
 
     Ref<IPC::Connection> m_connection;
+    IPC::MessageReceiverMap m_messageReceiverMap;
     Ref<GPUProcess> m_gpuProcess;
     const WebCore::ProcessIdentifier m_webProcessIdentifier;
     std::unique_ptr<RemoteMediaResourceManager> m_remoteMediaResourceManager;
@@ -122,6 +132,9 @@
     std::unique_ptr<LibWebRTCCodecsProxy> m_libWebRTCCodecsProxy;
 #endif
     std::unique_ptr<WebCore::PlatformMediaSessionManager> m_sessionManager;
+    
+    using RemoteRenderingBackendProxyMap = HashMap<RenderingBackendIdentifier, std::unique_ptr<RemoteRenderingBackendProxy>>;
+    RemoteRenderingBackendProxyMap m_remoteRenderingBackendProxyMap;
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in (257541 => 257542)


--- trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in	2020-02-27 01:51:57 UTC (rev 257542)
@@ -22,7 +22,9 @@
 
 #if ENABLE(GPU_PROCESS)
 
-messages -> GPUConnectionToWebProcess {
+messages -> GPUConnectionToWebProcess WantsDispatchMessage {
+    void CreateRenderingBackend(WebKit::RenderingBackendIdentifier renderingBackendIdentifier)
+    void ReleaseRenderingBackend(WebKit::RenderingBackendIdentifier renderingBackendIdentifier)
 }
 
 #endif // ENABLE(GPU_PROCESS)

Added: trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackendProxy.cpp (0 => 257542)


--- trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackendProxy.cpp	                        (rev 0)
+++ trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackendProxy.cpp	2020-02-27 01:51:57 UTC (rev 257542)
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "RemoteRenderingBackendProxy.h"
+
+#if ENABLE(GPU_PROCESS)
+
+#include "RemoteRenderingBackendProxyMessages.h"
+
+namespace WebKit {
+using namespace WebCore;
+
+std::unique_ptr<RemoteRenderingBackendProxy> RemoteRenderingBackendProxy::create(GPUConnectionToWebProcess& gpuConnectionToWebProcess, RenderingBackendIdentifier renderingBackendIdentifier)
+{
+    return std::unique_ptr<RemoteRenderingBackendProxy>(new RemoteRenderingBackendProxy(gpuConnectionToWebProcess, renderingBackendIdentifier));
+}
+
+RemoteRenderingBackendProxy::RemoteRenderingBackendProxy(GPUConnectionToWebProcess& gpuConnectionToWebProcess, RenderingBackendIdentifier renderingBackendIdentifier)
+    : m_gpuConnectionToWebProcess(makeWeakPtr(gpuConnectionToWebProcess))
+    , m_renderingBackendIdentifier(renderingBackendIdentifier)
+{
+    if (auto* gpuConnectionToWebProcess = m_gpuConnectionToWebProcess.get())
+        gpuConnectionToWebProcess->messageReceiverMap().addMessageReceiver(Messages::RemoteRenderingBackendProxy::messageReceiverName(), renderingBackendIdentifier.toUInt64(), *this);
+}
+
+RemoteRenderingBackendProxy::~RemoteRenderingBackendProxy()
+{
+    if (auto* gpuConnectionToWebProcess = m_gpuConnectionToWebProcess.get())
+        gpuConnectionToWebProcess->messageReceiverMap().removeMessageReceiver(Messages::RemoteRenderingBackendProxy::messageReceiverName(), m_renderingBackendIdentifier.toUInt64());
+}
+
+IPC::Connection* RemoteRenderingBackendProxy::messageSenderConnection() const
+{
+    if (auto* gpuConnectionToWebProcess = m_gpuConnectionToWebProcess.get())
+        return &gpuConnectionToWebProcess->connection();
+    return nullptr;
+}
+
+uint64_t RemoteRenderingBackendProxy::messageSenderDestinationID() const
+{
+    return m_renderingBackendIdentifier.toUInt64();
+}
+
+void RemoteRenderingBackendProxy::createImageBuffer(const FloatSize& logicalSize, RenderingMode renderingMode, float resolutionScale, ColorSpace colorSpace, ImageBufferIdentifier imageBufferIdentifier)
+{
+    auto* gpuConnectionToWebProcess = m_gpuConnectionToWebProcess.get();
+    if (!gpuConnectionToWebProcess)
+        return;
+
+    if (m_imageBufferMap.contains(imageBufferIdentifier)) {
+        ASSERT_NOT_REACHED();
+        return;
+    }
+
+    std::unique_ptr<ImageBuffer> imageBuffer;
+
+    switch (renderingMode) {
+    case RenderingMode::RemoteAccelerated:
+    case RenderingMode::RemoteUnaccelerated:
+        // FIXME: create the remote ImageBuffer proxy.
+    default:
+        ASSERT_NOT_REACHED();
+    }
+
+    if (!imageBuffer)
+        return;
+
+    m_imageBufferMap.add(imageBufferIdentifier, WTFMove(imageBuffer));
+}
+
+void RemoteRenderingBackendProxy::releaseImageBuffer(ImageBufferIdentifier imageBufferIdentifier)
+{
+    // CreateImageBuffer message should have been received before this one.
+    bool found = m_imageBufferMap.remove(imageBufferIdentifier);
+    ASSERT_UNUSED(found, found);
+}
+
+} // namespace WebKit
+
+#endif // ENABLE(GPU_PROCESS)

Added: trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackendProxy.h (0 => 257542)


--- trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackendProxy.h	                        (rev 0)
+++ trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackendProxy.h	2020-02-27 01:51:57 UTC (rev 257542)
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(GPU_PROCESS)
+
+#include "Connection.h"
+#include "ImageBufferIdentifier.h"
+#include "MessageReceiver.h"
+#include "MessageSender.h"
+#include "RenderingBackendIdentifier.h"
+#include <WebCore/ColorSpace.h>
+#include <WebCore/ImageBuffer.h>
+#include <wtf/WeakPtr.h>
+
+namespace WebKit {
+
+class GPUConnectionToWebProcess;
+
+class RemoteRenderingBackendProxy
+    : private IPC::MessageSender
+    , private IPC::MessageReceiver {
+public:
+    static std::unique_ptr<RemoteRenderingBackendProxy> create(GPUConnectionToWebProcess&, RenderingBackendIdentifier);
+    virtual ~RemoteRenderingBackendProxy();
+
+private:
+    RemoteRenderingBackendProxy(GPUConnectionToWebProcess&, RenderingBackendIdentifier);
+
+    // IPC::MessageSender.
+    IPC::Connection* messageSenderConnection() const override;
+    uint64_t messageSenderDestinationID() const override;
+
+    // IPC::MessageReceiver
+    void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
+
+    void createImageBuffer(const WebCore::FloatSize& logicalSize, WebCore::RenderingMode, float resolutionScale, WebCore::ColorSpace, ImageBufferIdentifier);
+    void releaseImageBuffer(ImageBufferIdentifier);
+
+    using ImageBufferMap = HashMap<ImageBufferIdentifier, std::unique_ptr<WebCore::ImageBuffer>>;
+    ImageBufferMap m_imageBufferMap;
+    WeakPtr<GPUConnectionToWebProcess> m_gpuConnectionToWebProcess;
+    RenderingBackendIdentifier m_renderingBackendIdentifier;
+};
+
+} // namespace WebKit
+
+#endif // ENABLE(GPU_PROCESS)

Copied: trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackendProxy.messages.in (from rev 257540, trunk/Source/WebKit/GPUProcess/GPUConnectionToWebProcess.messages.in) (0 => 257542)


--- trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackendProxy.messages.in	                        (rev 0)
+++ trunk/Source/WebKit/GPUProcess/graphics/RemoteRenderingBackendProxy.messages.in	2020-02-27 01:51:57 UTC (rev 257542)
@@ -0,0 +1,30 @@
+# Copyright (C) 2020 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
+# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#if ENABLE(GPU_PROCESS)
+
+messages -> RemoteRenderingBackendProxy NotRefCounted {
+    void CreateImageBuffer(WebCore::FloatSize logicalSize, WebCore::RenderingMode renderingMode, float resolutionScale, WebCore::ColorSpace colorSpace, WebKit::ImageBufferIdentifier imageBufferIdentifier)
+    void ReleaseImageBuffer(WebKit::ImageBufferIdentifier imageBufferIdentifier)
+}
+
+#endif // ENABLE(GPU_PROCESS)

Modified: trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp (257541 => 257542)


--- trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp	2020-02-27 01:51:57 UTC (rev 257542)
@@ -33,10 +33,9 @@
 #include <WebCore/CARingBuffer.h>
 #include <WebCore/WebAudioBufferList.h>
 
+namespace WebKit {
 using namespace WebCore;
 
-namespace WebKit {
-
 #if !RELEASE_LOG_DISABLED
 static const void* nextLogIdentifier()
 {

Modified: trunk/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorder.cpp (257541 => 257542)


--- trunk/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorder.cpp	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorder.cpp	2020-02-27 01:51:57 UTC (rev 257542)
@@ -35,10 +35,9 @@
 #include <WebCore/WebAudioBufferList.h>
 #include <wtf/CompletionHandler.h>
 
+namespace WebKit {
 using namespace WebCore;
 
-namespace WebKit {
-
 std::unique_ptr<RemoteMediaRecorder> RemoteMediaRecorder::create(GPUConnectionToWebProcess& gpuConnectionToWebProcess, MediaRecorderIdentifier identifier, bool recordAudio, int width, int height)
 {
     auto writer = MediaRecorderPrivateWriter::create(recordAudio, width, height);

Modified: trunk/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorderManager.cpp (257541 => 257542)


--- trunk/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorderManager.cpp	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/GPUProcess/webrtc/RemoteMediaRecorderManager.cpp	2020-02-27 01:51:57 UTC (rev 257542)
@@ -34,6 +34,7 @@
 #include <WebCore/ExceptionData.h>
 
 namespace WebKit {
+using namespace WebCore;
 
 RemoteMediaRecorderManager::RemoteMediaRecorderManager(GPUConnectionToWebProcess& gpuConnectionToWebProcess)
     : m_gpuConnectionToWebProcess(gpuConnectionToWebProcess)

Modified: trunk/Source/WebKit/GPUProcess/webrtc/RemoteSampleBufferDisplayLayer.cpp (257541 => 257542)


--- trunk/Source/WebKit/GPUProcess/webrtc/RemoteSampleBufferDisplayLayer.cpp	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/GPUProcess/webrtc/RemoteSampleBufferDisplayLayer.cpp	2020-02-27 01:51:57 UTC (rev 257542)
@@ -34,10 +34,9 @@
 #include <WebCore/MediaSampleAVFObjC.h>
 #include <WebCore/RemoteVideoSample.h>
 
+namespace WebKit {
 using namespace WebCore;
 
-namespace WebKit {
-
 std::unique_ptr<RemoteSampleBufferDisplayLayer> RemoteSampleBufferDisplayLayer::create(SampleBufferDisplayLayerIdentifier identifier, Ref<IPC::Connection>&& connection, bool hideRootLayer, IntSize size)
 {
     auto layer = std::unique_ptr<RemoteSampleBufferDisplayLayer>(new RemoteSampleBufferDisplayLayer(identifier, WTFMove(connection), hideRootLayer, size));

Modified: trunk/Source/WebKit/Scripts/webkit/messages.py (257541 => 257542)


--- trunk/Source/WebKit/Scripts/webkit/messages.py	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/Scripts/webkit/messages.py	2020-02-27 01:51:57 UTC (rev 257542)
@@ -27,6 +27,7 @@
 from webkit import parser
 
 WANTS_CONNECTION_ATTRIBUTE = 'WantsConnection'
+WANTS_DISPATCH_MESSAGE_ATTRIBUTE = 'WantsDispatchMessage'
 LEGACY_RECEIVER_ATTRIBUTE = 'LegacyReceiver'
 NOT_REFCOUNTED_RECEIVER_ATTRIBUTE = 'NotRefCounted'
 SYNCHRONOUS_ATTRIBUTE = 'Synchronous'
@@ -204,6 +205,7 @@
     return frozenset([
         'MachSendRight',
         'String',
+        'WebCore::ColorSpace',
         'WebCore::DocumentIdentifier',
         'WebCore::DocumentOrWorkerIdentifier',
         'WebCore::FetchIdentifier',
@@ -213,6 +215,7 @@
         'WebCore::PointerID',
         'WebCore::ProcessIdentifier',
         'WebCore::RealtimeMediaSourceIdentifier',
+        'WebCore::RenderingMode',
         'WebCore::ServiceWorkerIdentifier',
         'WebCore::ServiceWorkerJobIdentifier',
         'WebCore::ServiceWorkerOrClientData',
@@ -222,6 +225,7 @@
         'WebKit::ActivityStateChangeID',
         'WebKit::AudioMediaStreamTrackRendererIdentifier',
         'WebKit::ContentWorldIdentifier',
+        'WebKit::ImageBufferIdentifier',
         'WebKit::LayerHostingContextID',
         'WebKit::LibWebRTCResolverIdentifier',
         'WebKit::MDNSRegisterIdentifier',
@@ -228,6 +232,7 @@
         'WebKit::MediaPlayerPrivateRemoteIdentifier',
         'WebKit::MediaRecorderIdentifier',
         'WebKit::RemoteMediaResourceIdentifier',
+        'WebKit::RenderingBackendIdentifier',
         'WebKit::RTCDecoderIdentifier',
         'WebKit::RTCEncoderIdentifier',
         'WebKit::SampleBufferDisplayLayerIdentifier',
@@ -779,7 +784,7 @@
         else:
             async_messages.append(message)
 
-    if async_messages:
+    if async_messages or receiver.has_attribute(WANTS_DISPATCH_MESSAGE_ATTRIBUTE):
         result.append('void %s::didReceive%sMessage(IPC::Connection& connection, IPC::Decoder& decoder)\n' % (receiver.name, receiver.name if receiver.has_attribute(LEGACY_RECEIVER_ATTRIBUTE) else ''))
         result.append('{\n')
         if not receiver.has_attribute(NOT_REFCOUNTED_RECEIVER_ATTRIBUTE):
@@ -786,6 +791,9 @@
             result.append('    auto protectedThis = makeRef(*this);\n')
 
         result += [async_message_statement(receiver, message) for message in async_messages]
+        if receiver.has_attribute(WANTS_DISPATCH_MESSAGE_ATTRIBUTE):
+            result.append('    if (dispatchMessage(connection, decoder))\n')
+            result.append('        return;\n')
         if (receiver.superclass):
             result.append('    %s::didReceiveMessage(connection, decoder);\n' % (receiver.superclass))
         else:
@@ -794,7 +802,7 @@
             result.append('    ASSERT_NOT_REACHED();\n')
         result.append('}\n')
 
-    if sync_messages:
+    if sync_messages or receiver.has_attribute(WANTS_DISPATCH_MESSAGE_ATTRIBUTE):
         result.append('\n')
         result.append('void %s::didReceiveSync%sMessage(IPC::Connection& connection, IPC::Decoder& decoder, std::unique_ptr<IPC::Encoder>& replyEncoder)\n' % (receiver.name, receiver.name if receiver.has_attribute(LEGACY_RECEIVER_ATTRIBUTE) else ''))
         result.append('{\n')
@@ -801,6 +809,9 @@
         if not receiver.has_attribute(NOT_REFCOUNTED_RECEIVER_ATTRIBUTE):
             result.append('    auto protectedThis = makeRef(*this);\n')
         result += [sync_message_statement(receiver, message) for message in sync_messages]
+        if receiver.has_attribute(WANTS_DISPATCH_MESSAGE_ATTRIBUTE):
+            result.append('    if (dispatchSyncMessage(connection, decoder, replyEncoder))\n')
+            result.append('        return;\n')
         result.append('    UNUSED_PARAM(connection);\n')
         result.append('    UNUSED_PARAM(decoder);\n')
         result.append('    UNUSED_PARAM(replyEncoder);\n')

Modified: trunk/Source/WebKit/Shared/WebCoreArgumentCoders.h (257541 => 257542)


--- trunk/Source/WebKit/Shared/WebCoreArgumentCoders.h	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/Shared/WebCoreArgumentCoders.h	2020-02-27 01:51:57 UTC (rev 257542)
@@ -36,6 +36,7 @@
 #include <WebCore/NetworkLoadMetrics.h>
 #include <WebCore/NotificationDirection.h>
 #include <WebCore/RealtimeMediaSource.h>
+#include <WebCore/RenderingMode.h>
 #include <WebCore/ScrollSnapOffsetsInfo.h>
 #include <WebCore/SerializedPlatformDataCueValue.h>
 #include <WebCore/ServiceWorkerTypes.h>
@@ -842,6 +843,18 @@
     >;
 };
 
+template<> struct EnumTraits<WebCore::RenderingMode> {
+    using values = EnumValues<
+    WebCore::RenderingMode,
+    WebCore::RenderingMode::Accelerated,
+    WebCore::RenderingMode::Unaccelerated,
+    WebCore::RenderingMode::DisplayListAccelerated,
+    WebCore::RenderingMode::DisplayListUnaccelerated,
+    WebCore::RenderingMode::RemoteAccelerated,
+    WebCore::RenderingMode::RemoteUnaccelerated
+    >;
+};
+
 template<> struct EnumTraits<WebCore::AutoplayEvent> {
     using values = EnumValues<
         WebCore::AutoplayEvent,

Modified: trunk/Source/WebKit/Sources.txt (257541 => 257542)


--- trunk/Source/WebKit/Sources.txt	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/Sources.txt	2020-02-27 01:51:57 UTC (rev 257542)
@@ -24,12 +24,7 @@
 GPUProcess/GPUProcess.cpp
 GPUProcess/GPUConnectionToWebProcess.cpp
 GPUProcess/GPUProcessCreationParameters.cpp
-GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp
-GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.cpp
-GPUProcess/webrtc/RemoteMediaRecorder.cpp
-GPUProcess/webrtc/RemoteMediaRecorderManager.cpp
-GPUProcess/webrtc/RemoteSampleBufferDisplayLayer.cpp
-GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.cpp
+GPUProcess/graphics/RemoteRenderingBackendProxy.cpp
 GPUProcess/media/RemoteAudioTrackProxy.cpp
 GPUProcess/media/RemoteMediaPlayerManagerProxy.cpp
 GPUProcess/media/RemoteMediaPlayerProxy.cpp
@@ -38,6 +33,12 @@
 GPUProcess/media/RemoteMediaResourceManager.cpp
 GPUProcess/media/RemoteTextTrackProxy.cpp
 GPUProcess/media/RemoteVideoTrackProxy.cpp
+GPUProcess/webrtc/RemoteAudioMediaStreamTrackRenderer.cpp
+GPUProcess/webrtc/RemoteAudioMediaStreamTrackRendererManager.cpp
+GPUProcess/webrtc/RemoteMediaRecorder.cpp
+GPUProcess/webrtc/RemoteMediaRecorderManager.cpp
+GPUProcess/webrtc/RemoteSampleBufferDisplayLayer.cpp
+GPUProcess/webrtc/RemoteSampleBufferDisplayLayerManager.cpp
 
 NetworkProcess/AdClickAttributionManager.cpp
 NetworkProcess/NetworkActivityTracker.cpp
@@ -534,6 +535,7 @@
 WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp
 
 WebProcess/GPU/GPUProcessConnection.cpp
+WebProcess/GPU/graphics/RemoteRenderingBackend.cpp
 WebProcess/GPU/media/AudioTrackPrivateRemote.cpp
 WebProcess/GPU/media/MediaPlayerPrivateRemote.cpp
 WebProcess/GPU/media/RemoteMediaPlayerManager.cpp

Modified: trunk/Source/WebKit/SourcesCocoa.txt (257541 => 257542)


--- trunk/Source/WebKit/SourcesCocoa.txt	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/SourcesCocoa.txt	2020-02-27 01:51:57 UTC (rev 257542)
@@ -645,6 +645,7 @@
 // Derived Sources
 EditableImageControllerMessageReceiver.cpp
 GPUConnectionToWebProcessMessageReceiver.cpp
+GPUProcessConnectionMessageReceiver.cpp
 GPUProcessProxyMessageReceiver.cpp
 GPUProcessMessageReceiver.cpp
 LibWebRTCCodecsProxyMessageReceiver.cpp
@@ -653,6 +654,8 @@
 RemoteAudioMediaStreamTrackRendererMessageReceiver.cpp
 RemoteMediaRecorderMessageReceiver.cpp
 RemoteMediaRecorderManagerMessageReceiver.cpp
+RemoteRenderingBackendMessageReceiver.cpp
+RemoteRenderingBackendProxyMessageReceiver.cpp
 RemoteSampleBufferDisplayLayerManagerMessageReceiver.cpp
 RemoteSampleBufferDisplayLayerMessageReceiver.cpp
 SampleBufferDisplayLayerMessageReceiver.cpp

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (257541 => 257542)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2020-02-27 01:51:57 UTC (rev 257542)
@@ -3803,6 +3803,14 @@
 		53CFBBC62224D1B000266546 /* TextCheckerCompletion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextCheckerCompletion.cpp; sourceTree = "<group>"; };
 		53CFBBC72224D1B000266546 /* TextCheckerCompletion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextCheckerCompletion.h; sourceTree = "<group>"; };
 		53F3CAA5206C443E0086490E /* NetworkActivityTracker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkActivityTracker.cpp; sourceTree = "<group>"; };
+		5506409D2407160900AAE045 /* RemoteRenderingBackend.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteRenderingBackend.cpp; sourceTree = "<group>"; };
+		5506409E2407160900AAE045 /* RemoteRenderingBackend.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteRenderingBackend.h; sourceTree = "<group>"; };
+		5506409F2407196A00AAE045 /* RenderingBackendIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RenderingBackendIdentifier.h; sourceTree = "<group>"; };
+		550640A0240719E100AAE045 /* RemoteRenderingBackend.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = RemoteRenderingBackend.messages.in; sourceTree = "<group>"; };
+		550640A224071A6100AAE045 /* RemoteRenderingBackendProxy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteRenderingBackendProxy.cpp; sourceTree = "<group>"; };
+		550640A324071A6100AAE045 /* RemoteRenderingBackendProxy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteRenderingBackendProxy.h; sourceTree = "<group>"; };
+		550640A424071C2100AAE045 /* RemoteRenderingBackendProxy.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = RemoteRenderingBackendProxy.messages.in; sourceTree = "<group>"; };
+		550640A524071CC000AAE045 /* ImageBufferIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImageBufferIdentifier.h; sourceTree = "<group>"; };
 		570AB8F220AE3BD700B8BE87 /* SecKeyProxyStore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SecKeyProxyStore.h; sourceTree = "<group>"; };
 		570AB90020B2517400B8BE87 /* AuthenticationChallengeProxyCocoa.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AuthenticationChallengeProxyCocoa.mm; sourceTree = "<group>"; };
 		570AB90320B2541C00B8BE87 /* SecKeyProxyStore.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = SecKeyProxyStore.mm; sourceTree = "<group>"; };
@@ -6552,6 +6560,7 @@
 		2D7E43BF23752CD900EA5CA0 /* GPU */ = {
 			isa = PBXGroup;
 			children = (
+				5506409C240715AA00AAE045 /* graphics */,
 				0792312F239B3B0C009598E2 /* media */,
 				4172198823B6126100AE5686 /* webrtc */,
 				2D7E43C023752CD900EA5CA0 /* GPUProcessConnection.cpp */,
@@ -6566,6 +6575,7 @@
 			isa = PBXGroup;
 			children = (
 				2D9FB20D2375209D0049F936 /* EntryPoint */,
+				550640A124071A2900AAE045 /* graphics */,
 				2D9FB2042375209D0049F936 /* ios */,
 				2D9FB2062375209D0049F936 /* mac */,
 				07C75C172399A3DB0088E65B /* media */,
@@ -7698,6 +7708,28 @@
 			path = ios;
 			sourceTree = "<group>";
 		};
+		5506409C240715AA00AAE045 /* graphics */ = {
+			isa = PBXGroup;
+			children = (
+				550640A524071CC000AAE045 /* ImageBufferIdentifier.h */,
+				5506409D2407160900AAE045 /* RemoteRenderingBackend.cpp */,
+				5506409E2407160900AAE045 /* RemoteRenderingBackend.h */,
+				550640A0240719E100AAE045 /* RemoteRenderingBackend.messages.in */,
+				5506409F2407196A00AAE045 /* RenderingBackendIdentifier.h */,
+			);
+			path = graphics;
+			sourceTree = "<group>";
+		};
+		550640A124071A2900AAE045 /* graphics */ = {
+			isa = PBXGroup;
+			children = (
+				550640A224071A6100AAE045 /* RemoteRenderingBackendProxy.cpp */,
+				550640A324071A6100AAE045 /* RemoteRenderingBackendProxy.h */,
+				550640A424071C2100AAE045 /* RemoteRenderingBackendProxy.messages.in */,
+			);
+			path = graphics;
+			sourceTree = "<group>";
+		};
 		570AB8F620AE81AB00B8BE87 /* cocoa */ = {
 			isa = PBXGroup;
 			children = (

Modified: trunk/Source/WebKit/WebProcess/GPU/GPUProcessConnection.cpp (257541 => 257542)


--- trunk/Source/WebKit/WebProcess/GPU/GPUProcessConnection.cpp	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/WebProcess/GPU/GPUProcessConnection.cpp	2020-02-27 01:51:57 UTC (rev 257542)
@@ -75,11 +75,11 @@
 }
 #endif
 
-void GPUProcessConnection::didReceiveMessage(IPC::Connection& connection, IPC::Decoder& decoder)
+bool GPUProcessConnection::dispatchMessage(IPC::Connection& connection, IPC::Decoder& decoder)
 {
     if (decoder.messageReceiverName() == Messages::MediaPlayerPrivateRemote::messageReceiverName()) {
         WebProcess::singleton().supplement<RemoteMediaPlayerManager>()->didReceivePlayerMessage(connection, decoder);
-        return;
+        return true;
     }
 
 #if ENABLE(MEDIA_STREAM)
@@ -86,12 +86,12 @@
     if (decoder.messageReceiverName() == Messages::UserMediaCaptureManager::messageReceiverName()) {
         if (auto* captureManager = WebProcess::singleton().supplement<UserMediaCaptureManager>())
             captureManager->didReceiveMessageFromGPUProcess(connection, decoder);
-        return;
+        return true;
     }
 #if PLATFORM(COCOA) && ENABLE(VIDEO_TRACK)
     if (decoder.messageReceiverName() == Messages::SampleBufferDisplayLayer::messageReceiverName()) {
         sampleBufferDisplayLayerManager().didReceiveLayerMessage(connection, decoder);
-        return;
+        return true;
     }
 #endif // PLATFORM(COCOA) && ENABLE(VIDEO_TRACK)
 #endif // ENABLE(MEDIA_STREAM)
@@ -98,11 +98,17 @@
 #if USE(LIBWEBRTC) && PLATFORM(COCOA)
     if (decoder.messageReceiverName() == Messages::LibWebRTCCodecs::messageReceiverName()) {
         WebProcess::singleton().libWebRTCCodecs().didReceiveMessage(connection, decoder);
-        return;
+        return true;
     }
 #endif
+    return messageReceiverMap().dispatchMessage(connection, decoder);
 }
 
+bool GPUProcessConnection::dispatchSyncMessage(IPC::Connection& connection, IPC::Decoder& decoder, std::unique_ptr<IPC::Encoder>& replyEncoder)
+{
+    return messageReceiverMap().dispatchSyncMessage(connection, decoder, replyEncoder);
+}
+
 } // namespace WebKit
 
 #endif // ENABLE(GPU_PROCESS)

Modified: trunk/Source/WebKit/WebProcess/GPU/GPUProcessConnection.h (257541 => 257542)


--- trunk/Source/WebKit/WebProcess/GPU/GPUProcessConnection.h	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/WebProcess/GPU/GPUProcessConnection.h	2020-02-27 01:51:57 UTC (rev 257542)
@@ -28,6 +28,7 @@
 #if ENABLE(GPU_PROCESS)
 
 #include "Connection.h"
+#include "MessageReceiverMap.h"
 #include "SampleBufferDisplayLayerManager.h"
 #include <wtf/RefCounted.h>
 #include <wtf/text/WTFString.h>
@@ -47,6 +48,7 @@
     ~GPUProcessConnection();
     
     IPC::Connection& connection() { return m_connection.get(); }
+    IPC::MessageReceiverMap& messageReceiverMap() { return m_messageReceiverMap; }
 
 #if HAVE(AUDIT_TOKEN)
     void setAuditToken(Optional<audit_token_t> auditToken) { m_auditToken = auditToken; }
@@ -62,10 +64,15 @@
     // IPC::Connection::Client
     void didClose(IPC::Connection&) override;
     void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final;
+    void didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&) final;
     void didReceiveInvalidMessage(IPC::Connection&, IPC::StringReference messageReceiverName, IPC::StringReference messageName) override;
 
+    bool dispatchMessage(IPC::Connection&, IPC::Decoder&);
+    bool dispatchSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>&);
+
     // The connection from the web process to the GPU process.
     Ref<IPC::Connection> m_connection;
+    IPC::MessageReceiverMap m_messageReceiverMap;
 
 #if HAVE(AUDIT_TOKEN)
     Optional<audit_token_t> m_auditToken;

Modified: trunk/Source/WebKit/WebProcess/GPU/GPUProcessConnection.messages.in (257541 => 257542)


--- trunk/Source/WebKit/WebProcess/GPU/GPUProcessConnection.messages.in	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/WebProcess/GPU/GPUProcessConnection.messages.in	2020-02-27 01:51:57 UTC (rev 257542)
@@ -22,7 +22,7 @@
 
 #if ENABLE(GPU_PROCESS)
 
-messages -> GPUProcessConnection {
+messages -> GPUProcessConnection WantsDispatchMessage {
 
 }
 

Copied: trunk/Source/WebKit/WebProcess/GPU/graphics/ImageBufferIdentifier.h (from rev 257540, trunk/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderProvider.cpp) (0 => 257542)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/ImageBufferIdentifier.h	                        (rev 0)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/ImageBufferIdentifier.h	2020-02-27 01:51:57 UTC (rev 257542)
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(GPU_PROCESS)
+
+#include <wtf/ObjectIdentifier.h>
+
+namespace WebKit {
+
+enum ImageBufferIdentifierType { };
+using ImageBufferIdentifier = ObjectIdentifier<ImageBufferIdentifierType>;
+
+} // namespace WebKit
+
+#endif // ENABLE(GPU_PROCESS)

Added: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.cpp (0 => 257542)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.cpp	                        (rev 0)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.cpp	2020-02-27 01:51:57 UTC (rev 257542)
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "RemoteRenderingBackend.h"
+
+#if ENABLE(GPU_PROCESS)
+
+#include "GPUProcessConnection.h"
+#include "RemoteRenderingBackendMessages.h"
+#include "RemoteRenderingBackendProxyMessages.h"
+
+namespace WebKit {
+
+using namespace WebCore;
+
+std::unique_ptr<RemoteRenderingBackend> RemoteRenderingBackend::create()
+{
+    return std::unique_ptr<RemoteRenderingBackend>(new RemoteRenderingBackend());
+}
+
+RemoteRenderingBackend::RemoteRenderingBackend()
+{
+    // Register itself as a MessageReceiver in the GPUProcessConnection.
+    IPC::MessageReceiverMap& messageReceiverMap = WebProcess::singleton().ensureGPUProcessConnection().messageReceiverMap();
+    messageReceiverMap.addMessageReceiver(Messages::RemoteRenderingBackend::messageReceiverName(), m_renderingBackendIdentifier.toUInt64(), *this);
+
+    // Create the RemoteRenderingBackendProxy.
+    send(Messages::GPUConnectionToWebProcess::CreateRenderingBackend(m_renderingBackendIdentifier), 0);
+}
+
+RemoteRenderingBackend::~RemoteRenderingBackend()
+{
+    // Un-register itself as a MessageReceiver.
+    IPC::MessageReceiverMap& messageReceiverMap = WebProcess::singleton().ensureGPUProcessConnection().messageReceiverMap();
+    messageReceiverMap.removeMessageReceiver(*this);
+
+    // Release the RemoteRenderingBackendProxy.
+    send(Messages::GPUConnectionToWebProcess::ReleaseRenderingBackend(m_renderingBackendIdentifier), 0);
+}
+
+IPC::Connection* RemoteRenderingBackend::messageSenderConnection() const
+{
+    return &WebProcess::singleton().ensureGPUProcessConnection().connection();
+}
+
+uint64_t RemoteRenderingBackend::messageSenderDestinationID() const
+{
+    return m_renderingBackendIdentifier.toUInt64();
+}
+
+std::unique_ptr<ImageBuffer> RemoteRenderingBackend::createImageBuffer(const FloatSize&, RenderingMode renderingMode, float, ColorSpace)
+{
+    switch (renderingMode) {
+    case RenderingMode::RemoteAccelerated:
+    case RenderingMode::RemoteUnaccelerated:
+        // FIXME: Create the remote ImageBuffer
+        return nullptr;
+
+    default:
+        ASSERT_NOT_REACHED();
+    }
+
+    return nullptr;
+}
+
+void RemoteRenderingBackend::releaseImageBuffer(ImageBufferIdentifier imageBufferIdentifier)
+{
+    // CreateImageBuffer message should have been received before this one.
+    bool found = m_imageBufferMap.remove(imageBufferIdentifier);
+    ASSERT_UNUSED(found, found);
+
+    send(Messages::RemoteRenderingBackendProxy::ReleaseImageBuffer(imageBufferIdentifier), m_renderingBackendIdentifier);
+}
+
+} // namespace WebKit
+
+#endif // ENABLE(GPU_PROCESS)

Added: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.h (0 => 257542)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.h	                        (rev 0)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.h	2020-02-27 01:51:57 UTC (rev 257542)
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(GPU_PROCESS)
+
+#include "ImageBufferIdentifier.h"
+#include "MessageReceiver.h"
+#include "MessageSender.h"
+#include "RenderingBackendIdentifier.h"
+#include <WebCore/RenderingMode.h>
+
+namespace WebKit {
+
+class RemoteRenderingBackend
+    : private IPC::MessageSender
+    , private IPC::MessageReceiver {
+public:
+    static std::unique_ptr<RemoteRenderingBackend> create();
+
+    ~RemoteRenderingBackend();
+
+    // IPC::MessageSender.
+    IPC::Connection* messageSenderConnection() const override;
+    uint64_t messageSenderDestinationID() const override;
+
+    std::unique_ptr<WebCore::ImageBuffer> createImageBuffer(const WebCore::FloatSize&, WebCore::RenderingMode, float resolutionScale, WebCore::ColorSpace);
+    void releaseImageBuffer(ImageBufferIdentifier);
+
+private:
+    RemoteRenderingBackend();
+        
+    using ImageBufferMap = HashMap<ImageBufferIdentifier, WebCore::ImageBuffer*>;
+    ImageBufferMap m_imageBufferMap;
+    RenderingBackendIdentifier m_renderingBackendIdentifier { RenderingBackendIdentifier::generate() };
+};
+
+} // namespace WebKit
+
+#endif // ENABLE(GPU_PROCESS)

Copied: trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.messages.in (from rev 257540, trunk/Source/WebKit/WebProcess/GPU/GPUProcessConnection.messages.in) (0 => 257542)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.messages.in	                        (rev 0)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackend.messages.in	2020-02-27 01:51:57 UTC (rev 257542)
@@ -0,0 +1,29 @@
+# Copyright (C) 2020 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1.  Redistributions of source code must retain the above copyright
+#     notice, this list of conditions and the following disclaimer.
+# 2.  Redistributions in binary form must reproduce the above copyright
+#     notice, this list of conditions and the following disclaimer in the
+#     documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
+# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#if ENABLE(GPU_PROCESS)
+
+messages -> RemoteRenderingBackend NotRefCounted {
+
+}
+
+#endif // ENABLE(GPU_PROCESS)

Copied: trunk/Source/WebKit/WebProcess/GPU/graphics/RenderingBackendIdentifier.h (from rev 257540, trunk/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderProvider.cpp) (0 => 257542)


--- trunk/Source/WebKit/WebProcess/GPU/graphics/RenderingBackendIdentifier.h	                        (rev 0)
+++ trunk/Source/WebKit/WebProcess/GPU/graphics/RenderingBackendIdentifier.h	2020-02-27 01:51:57 UTC (rev 257542)
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(GPU_PROCESS)
+
+#include <wtf/ObjectIdentifier.h>
+
+namespace WebKit {
+
+enum RenderingBackendIdentifierType { };
+using RenderingBackendIdentifier = ObjectIdentifier<RenderingBackendIdentifierType>;
+
+} // namespace WebKit
+
+#endif // ENABLE(GPU_PROCESS)

Modified: trunk/Source/WebKit/WebProcess/GPU/media/TextTrackPrivateRemote.cpp (257541 => 257542)


--- trunk/Source/WebKit/WebProcess/GPU/media/TextTrackPrivateRemote.cpp	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/WebProcess/GPU/media/TextTrackPrivateRemote.cpp	2020-02-27 01:51:57 UTC (rev 257542)
@@ -29,11 +29,13 @@
 
 #if ENABLE(GPU_PROCESS)
 
+#include "DataReference.h"
 #include "MediaPlayerPrivateRemote.h"
 #include "RemoteMediaPlayerProxyMessages.h"
 #include <WebCore/NotImplemented.h>
 
 namespace WebKit {
+using namespace WebCore;
 
 TextTrackPrivateRemote::TextTrackPrivateRemote(MediaPlayerPrivateRemote& player, TrackPrivateRemoteIdentifier idendifier, TextTrackPrivateRemoteConfiguration&& configuration)
     : WebCore::InbandTextTrackPrivate(configuration.cueFormat)

Modified: trunk/Source/WebKit/WebProcess/GPU/media/TextTrackPrivateRemote.h (257541 => 257542)


--- trunk/Source/WebKit/WebProcess/GPU/media/TextTrackPrivateRemote.h	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/WebProcess/GPU/media/TextTrackPrivateRemote.h	2020-02-27 01:51:57 UTC (rev 257542)
@@ -32,6 +32,10 @@
 #include "TrackPrivateRemoteIdentifier.h"
 #include <WebCore/InbandTextTrackPrivate.h>
 
+namespace IPC {
+class DataReference;
+}
+
 namespace WebCore {
 class GenericCueData;
 class ISOWebVTTCue;
@@ -52,9 +56,9 @@
     void addDataCue(MediaTime&& start, MediaTime&& end, IPC::DataReference&&);
 
 #if ENABLE(DATACUE_VALUE)
-    void addDataCueWithType(MediaTime&& start, MediaTime&& end, SerializedPlatformDataCueValue&&, String&&);
-    void updateDataCue(MediaTime&& start, MediaTime&& end, SerializedPlatformDataCueValue&&);
-    void removeDataCue(MediaTime&& start, MediaTime&& end, SerializedPlatformDataCueValue&&);
+    void addDataCueWithType(MediaTime&& start, MediaTime&& end, WebCore::SerializedPlatformDataCueValue&&, String&&);
+    void updateDataCue(MediaTime&& start, MediaTime&& end, WebCore::SerializedPlatformDataCueValue&&);
+    void removeDataCue(MediaTime&& start, MediaTime&& end, WebCore::SerializedPlatformDataCueValue&&);
 #endif
 
     void addGenericCue(WebCore::GenericCueData&);

Modified: trunk/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp (257541 => 257542)


--- trunk/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderPrivate.cpp	2020-02-27 01:51:57 UTC (rev 257542)
@@ -39,10 +39,9 @@
 #include <WebCore/SharedBuffer.h>
 #include <WebCore/WebAudioBufferList.h>
 
+namespace WebKit {
 using namespace WebCore;
 
-namespace WebKit {
-
 MediaRecorderPrivate::MediaRecorderPrivate(const MediaStreamPrivate& stream)
     : m_identifier(MediaRecorderIdentifier::generate())
     , m_connection(WebProcess::singleton().ensureGPUProcessConnection().connection())

Modified: trunk/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderProvider.cpp (257541 => 257542)


--- trunk/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderProvider.cpp	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/WebProcess/GPU/webrtc/MediaRecorderProvider.cpp	2020-02-27 01:51:57 UTC (rev 257542)
@@ -31,10 +31,9 @@
 #include "MediaRecorderPrivate.h"
 #include <WebCore/MediaRecorderPrivate.h>
 
+namespace WebKit {
 using namespace WebCore;
 
-namespace WebKit {
-
 std::unique_ptr<WebCore::MediaRecorderPrivate> MediaRecorderProvider::createMediaRecorderPrivate(const MediaStreamPrivate& stream)
 {
 #if ENABLE(GPU_PROCESS)

Modified: trunk/Source/WebKit/WebProcess/GPU/webrtc/SampleBufferDisplayLayer.cpp (257541 => 257542)


--- trunk/Source/WebKit/WebProcess/GPU/webrtc/SampleBufferDisplayLayer.cpp	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/WebProcess/GPU/webrtc/SampleBufferDisplayLayer.cpp	2020-02-27 01:51:57 UTC (rev 257542)
@@ -35,10 +35,9 @@
 #include "SampleBufferDisplayLayerManager.h"
 #include "WebCoreArgumentCoders.h"
 
+namespace WebKit {
 using namespace WebCore;
 
-namespace WebKit {
-
 std::unique_ptr<SampleBufferDisplayLayer> SampleBufferDisplayLayer::create(SampleBufferDisplayLayerManager& manager, Client& client, bool hideRootLayer, IntSize size)
 {
     auto layer = std::unique_ptr<SampleBufferDisplayLayer>(new SampleBufferDisplayLayer(manager, client, hideRootLayer, size));

Modified: trunk/Source/WebKit/WebProcess/GPU/webrtc/SampleBufferDisplayLayerManager.cpp (257541 => 257542)


--- trunk/Source/WebKit/WebProcess/GPU/webrtc/SampleBufferDisplayLayerManager.cpp	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/WebProcess/GPU/webrtc/SampleBufferDisplayLayerManager.cpp	2020-02-27 01:51:57 UTC (rev 257542)
@@ -28,10 +28,9 @@
 
 #if PLATFORM(COCOA) && ENABLE(GPU_PROCESS) && ENABLE(VIDEO_TRACK) && ENABLE(MEDIA_STREAM)
 
+namespace WebKit {
 using namespace WebCore;
 
-namespace WebKit {
-
 void SampleBufferDisplayLayerManager::didReceiveLayerMessage(IPC::Connection& connection, IPC::Decoder& decoder)
 {
     if (auto* layer = m_layers.get(makeObjectIdentifier<SampleBufferDisplayLayerIdentifierType>(decoder.destinationID())).get())

Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp (257541 => 257542)


--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp	2020-02-27 01:51:57 UTC (rev 257542)
@@ -39,6 +39,7 @@
 #include "NetworkConnectionToWebProcessMessages.h"
 #include "NetworkProcessConnection.h"
 #include "PageBanner.h"
+#include "RemoteRenderingBackend.h"
 #include "UserData.h"
 #include "WebColorChooser.h"
 #include "WebCoreArgumentCoders.h"
@@ -880,7 +881,6 @@
 }
 
 #if USE(REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR)
-
 RefPtr<DisplayRefreshMonitor> WebChromeClient::createDisplayRefreshMonitor(PlatformDisplayID displayID) const
 {
     if (auto* drawingArea = m_page.drawingArea())
@@ -887,23 +887,16 @@
         return drawingArea->createDisplayRefreshMonitor(displayID);
     return nullptr;
 }
-
 #endif
 
-std::unique_ptr<ImageBuffer> WebChromeClient::createImageBuffer(const FloatSize&, RenderingMode renderingMode, float, ColorSpace) const
+#if ENABLE(GPU_PROCESS)
+std::unique_ptr<ImageBuffer> WebChromeClient::createImageBuffer(const FloatSize& size, RenderingMode renderingMode, float resolutionScale, ColorSpace colorSpace) const
 {
-    switch (renderingMode) {
-    case RenderingMode::RemoteAccelerated:
-    case RenderingMode::RemoteUnaccelerated:
-        // FIXME: Create the remote ImageBuffer
-        return nullptr;
-
-    default:
-        ASSERT_NOT_REACHED();
-    }
-
-    return nullptr;
+    if (!m_remoteRenderingBackend)
+        m_remoteRenderingBackend = RemoteRenderingBackend::create();
+    return m_remoteRenderingBackend->createImageBuffer(size, renderingMode, resolutionScale, colorSpace);
 }
+#endif
 
 void WebChromeClient::attachRootGraphicsLayer(Frame&, GraphicsLayer* layer)
 {

Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h (257541 => 257542)


--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h	2020-02-27 01:48:42 UTC (rev 257541)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.h	2020-02-27 01:51:57 UTC (rev 257542)
@@ -37,6 +37,7 @@
 
 namespace WebKit {
 
+class RemoteRenderingBackend;
 class WebFrame;
 class WebPage;
 
@@ -123,8 +124,6 @@
     WebCore::IntPoint accessibilityScreenToRootView(const WebCore::IntPoint&) const final;
     WebCore::IntRect rootViewToAccessibilityScreen(const WebCore::IntRect&) const final;
 
-    std::unique_ptr<WebCore::ImageBuffer> createImageBuffer(const WebCore::FloatSize&, WebCore::RenderingMode, float resolutionScale, WebCore::ColorSpace) const final;
-
     void didFinishLoadingImageForElement(WebCore::HTMLImageElement&) final;
 
     PlatformPageClient platformPageClient() const final;
@@ -234,6 +233,10 @@
     RefPtr<WebCore::DisplayRefreshMonitor> createDisplayRefreshMonitor(WebCore::PlatformDisplayID) const final;
 #endif
 
+#if ENABLE(GPU_PROCESS)
+    std::unique_ptr<WebCore::ImageBuffer> createImageBuffer(const WebCore::FloatSize&, WebCore::RenderingMode, float resolutionScale, WebCore::ColorSpace) const final;
+#endif
+
     CompositingTriggerFlags allowedCompositingTriggers() const final
     {
         return static_cast<CompositingTriggerFlags>(
@@ -390,7 +393,9 @@
     mutable RefPtr<WebFrame> m_cachedFrameSetLargestFrame;
     mutable bool m_cachedMainFrameHasHorizontalScrollbar { false };
     mutable bool m_cachedMainFrameHasVerticalScrollbar { false };
-
+#if ENABLE(GPU_PROCESS)
+    mutable std::unique_ptr<RemoteRenderingBackend> m_remoteRenderingBackend;
+#endif
     WebPage& m_page;
 };
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to