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;
};