Diff
Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaResourceManager.cpp (295419 => 295420)
--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaResourceManager.cpp 2022-06-09 14:08:40 UTC (rev 295419)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaResourceManager.cpp 2022-06-09 15:07:15 UTC (rev 295420)
@@ -31,8 +31,10 @@
#include "Connection.h"
#include "RemoteMediaResource.h"
#include "RemoteMediaResourceIdentifier.h"
+#include "SharedBufferReference.h"
#include "WebCoreArgumentCoders.h"
#include <WebCore/ResourceRequest.h>
+#include <wtf/Scope.h>
namespace WebKit {
@@ -89,16 +91,24 @@
resource->dataSent(bytesSent, totalBytesToBeSent);
}
-void RemoteMediaResourceManager::dataReceived(RemoteMediaResourceIdentifier identifier, const SharedMemory::IPCHandle& bufferHandle)
+void RemoteMediaResourceManager::dataReceived(RemoteMediaResourceIdentifier identifier, IPC::SharedBufferReference&& buffer, CompletionHandler<void(SharedMemory::IPCHandle&&)>&& completionHandler)
{
+ SharedMemory::Handle handle;
+
+ auto invokeCallbackAtScopeExit = makeScopeExit([&] {
+ completionHandler(SharedMemory::IPCHandle { WTFMove(handle), buffer.size() });
+ });
+
auto* resource = m_remoteMediaResources.get(identifier);
if (!resource)
return;
- auto sharedMemory = SharedMemory::map(bufferHandle.handle, SharedMemory::Protection::ReadOnly);
+ auto sharedMemory = buffer.sharedCopy();
if (!sharedMemory)
return;
- resource->dataReceived(sharedMemory->createSharedBuffer(bufferHandle.dataSize));
+ sharedMemory->createHandle(handle, SharedMemory::Protection::ReadOnly);
+
+ resource->dataReceived(sharedMemory->createSharedBuffer(buffer.size()));
}
void RemoteMediaResourceManager::accessControlCheckFailed(RemoteMediaResourceIdentifier identifier, const ResourceError& error)
Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaResourceManager.h (295419 => 295420)
--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaResourceManager.h 2022-06-09 14:08:40 UTC (rev 295419)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaResourceManager.h 2022-06-09 15:07:15 UTC (rev 295420)
@@ -38,6 +38,7 @@
namespace IPC {
class Connection;
class Decoder;
+class SharedBufferReference;
}
namespace WebCore {
@@ -66,7 +67,7 @@
void responseReceived(RemoteMediaResourceIdentifier, const WebCore::ResourceResponse&, bool, CompletionHandler<void(WebCore::ShouldContinuePolicyCheck)>&&);
void redirectReceived(RemoteMediaResourceIdentifier, WebCore::ResourceRequest&&, const WebCore::ResourceResponse&, CompletionHandler<void(WebCore::ResourceRequest&&)>&&);
void dataSent(RemoteMediaResourceIdentifier, uint64_t, uint64_t);
- void dataReceived(RemoteMediaResourceIdentifier, const SharedMemory::IPCHandle& bufferHandle);
+ void dataReceived(RemoteMediaResourceIdentifier, IPC::SharedBufferReference&&, CompletionHandler<void(WebKit::SharedMemory::IPCHandle&&)>&&);
void accessControlCheckFailed(RemoteMediaResourceIdentifier, const WebCore::ResourceError&);
void loadFailed(RemoteMediaResourceIdentifier, const WebCore::ResourceError&);
void loadFinished(RemoteMediaResourceIdentifier, const WebCore::NetworkLoadMetrics&);
Modified: trunk/Source/WebKit/GPUProcess/media/RemoteMediaResourceManager.messages.in (295419 => 295420)
--- trunk/Source/WebKit/GPUProcess/media/RemoteMediaResourceManager.messages.in 2022-06-09 14:08:40 UTC (rev 295419)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteMediaResourceManager.messages.in 2022-06-09 15:07:15 UTC (rev 295420)
@@ -29,7 +29,7 @@
ResponseReceived(WebKit::RemoteMediaResourceIdentifier identifier, WebCore::ResourceResponse response, bool didPassAccessControlCheck) -> (enum:bool WebCore::ShouldContinuePolicyCheck shouldContinue)
RedirectReceived(WebKit::RemoteMediaResourceIdentifier identifier, WebCore::ResourceRequest request, WebCore::ResourceResponse response) -> (WebCore::ResourceRequest returnRequest)
DataSent(WebKit::RemoteMediaResourceIdentifier identifier, uint64_t bytesSent, uint64_t totalBytesToBeSent)
- DataReceived(WebKit::RemoteMediaResourceIdentifier identifier, WebKit::SharedMemory::IPCHandle data)
+ DataReceived(WebKit::RemoteMediaResourceIdentifier identifier, IPC::SharedBufferReference data) -> (WebKit::SharedMemory::IPCHandle remoteData)
AccessControlCheckFailed(WebKit::RemoteMediaResourceIdentifier identifier, WebCore::ResourceError error)
LoadFailed(WebKit::RemoteMediaResourceIdentifier identifier, WebCore::ResourceError error)
LoadFinished(WebKit::RemoteMediaResourceIdentifier identifier, WebCore::NetworkLoadMetrics metrics)
Modified: trunk/Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.cpp (295419 => 295420)
--- trunk/Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.cpp 2022-06-09 14:08:40 UTC (rev 295419)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.cpp 2022-06-09 15:07:15 UTC (rev 295420)
@@ -32,6 +32,7 @@
#include "InitializationSegmentInfo.h"
#include "RemoteMediaPlayerProxy.h"
#include "RemoteSourceBufferProxyMessages.h"
+#include "SharedBufferReference.h"
#include "SourceBufferPrivateRemoteMessages.h"
#include <WebCore/AudioTrackPrivate.h>
#include <WebCore/ContentType.h>
@@ -38,6 +39,7 @@
#include <WebCore/MediaDescription.h>
#include <WebCore/PlatformTimeRanges.h>
#include <WebCore/VideoTrackPrivate.h>
+#include <wtf/Scope.h>
namespace WebKit {
@@ -192,13 +194,20 @@
m_connectionToWebProcess->connection().send(Messages::SourceBufferPrivateRemote::SourceBufferPrivateBufferedDirtyChanged(flag), m_identifier);
}
-void RemoteSourceBufferProxy::append(const SharedMemory::IPCHandle& bufferHandle)
+void RemoteSourceBufferProxy::append(IPC::SharedBufferReference&& buffer, CompletionHandler<void(SharedMemory::IPCHandle&&)>&& completionHandler)
{
- auto sharedMemory = SharedMemory::map(bufferHandle.handle, SharedMemory::Protection::ReadOnly);
+ SharedMemory::Handle handle;
+
+ auto invokeCallbackAtScopeExit = makeScopeExit([&] {
+ completionHandler(SharedMemory::IPCHandle { WTFMove(handle), buffer.size() });
+ });
+
+ auto sharedMemory = buffer.sharedCopy();
if (!sharedMemory)
return;
+ m_sourceBufferPrivate->append(sharedMemory->createSharedBuffer(buffer.size()));
- m_sourceBufferPrivate->append(sharedMemory->createSharedBuffer(bufferHandle.dataSize));
+ sharedMemory->createHandle(handle, SharedMemory::Protection::ReadOnly);
}
void RemoteSourceBufferProxy::abort()
Modified: trunk/Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.h (295419 => 295420)
--- trunk/Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.h 2022-06-09 14:08:40 UTC (rev 295419)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.h 2022-06-09 15:07:15 UTC (rev 295420)
@@ -43,6 +43,7 @@
namespace IPC {
class Connection;
class Decoder;
+class SharedBufferReference;
}
namespace WebCore {
@@ -88,7 +89,7 @@
void setActive(bool);
void canSwitchToType(const WebCore::ContentType&, CompletionHandler<void(bool)>&&);
void setMode(WebCore::SourceBufferAppendMode);
- void append(const SharedMemory::IPCHandle&);
+ void append(IPC::SharedBufferReference&&, CompletionHandler<void(WebKit::SharedMemory::IPCHandle&&)>&&);
void abort();
void resetParserState();
void removedFromMediaSource();
Modified: trunk/Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.messages.in (295419 => 295420)
--- trunk/Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.messages.in 2022-06-09 14:08:40 UTC (rev 295419)
+++ trunk/Source/WebKit/GPUProcess/media/RemoteSourceBufferProxy.messages.in 2022-06-09 15:07:15 UTC (rev 295420)
@@ -29,7 +29,7 @@
SetActive(bool active)
CanSwitchToType(WebCore::ContentType contentType) -> (bool canSwitch) Synchronous
SetMode(WebCore::SourceBufferAppendMode appendMode)
- Append(WebKit::SharedMemory::IPCHandle data)
+ Append(IPC::SharedBufferReference data) -> (WebKit::SharedMemory::IPCHandle remoteData)
Abort()
ResetParserState()
RemovedFromMediaSource()
Modified: trunk/Source/WebKit/Platform/IPC/SharedBufferReference.cpp (295419 => 295420)
--- trunk/Source/WebKit/Platform/IPC/SharedBufferReference.cpp 2022-06-09 14:08:40 UTC (rev 295419)
+++ trunk/Source/WebKit/Platform/IPC/SharedBufferReference.cpp 2022-06-09 15:07:15 UTC (rev 295420)
@@ -123,4 +123,11 @@
return downcast<SharedBuffer>(m_buffer.get())->data();
}
+RefPtr<WebKit::SharedMemory> SharedBufferReference::sharedCopy() const
+{
+ if (!m_size)
+ return nullptr;
+ return SharedMemory::copyBuffer(*unsafeBuffer());
+}
+
} // namespace IPC
Modified: trunk/Source/WebKit/Platform/IPC/SharedBufferReference.h (295419 => 295420)
--- trunk/Source/WebKit/Platform/IPC/SharedBufferReference.h 2022-06-09 14:08:40 UTC (rev 295419)
+++ trunk/Source/WebKit/Platform/IPC/SharedBufferReference.h 2022-06-09 15:07:15 UTC (rev 295420)
@@ -33,10 +33,6 @@
#include <WebCore/SharedBuffer.h>
#include <optional>
-namespace WebKit {
-class SharedMemory;
-}
-
namespace IPC {
class Decoder;
@@ -76,6 +72,7 @@
// once it's deserialised over IPC.
RefPtr<WebCore::SharedBuffer> unsafeBuffer() const;
const uint8_t* data() const;
+ RefPtr<WebKit::SharedMemory> sharedCopy() const;
void encode(Encoder&) const;
static WARN_UNUSED_RETURN std::optional<SharedBufferReference> decode(Decoder&);
Modified: trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaResourceProxy.cpp (295419 => 295420)
--- trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaResourceProxy.cpp 2022-06-09 14:08:40 UTC (rev 295419)
+++ trunk/Source/WebKit/WebProcess/GPU/media/RemoteMediaResourceProxy.cpp 2022-06-09 15:07:15 UTC (rev 295420)
@@ -30,7 +30,7 @@
#include "DataReference.h"
#include "RemoteMediaResourceManagerMessages.h"
-#include "SharedMemory.h"
+#include "SharedBufferReference.h"
#include "WebCoreArgumentCoders.h"
#include <wtf/CompletionHandler.h>
@@ -74,16 +74,11 @@
void RemoteMediaResourceProxy::dataReceived(WebCore::PlatformMediaResource&, const WebCore::SharedBuffer& buffer)
{
- SharedMemory::Handle handle;
- {
- auto sharedMemory = SharedMemory::copyBuffer(buffer);
- if (!sharedMemory)
- return;
- sharedMemory->createHandle(handle, SharedMemory::Protection::ReadOnly);
- }
- // Take ownership of shared memory and mark it as media-related memory.
- handle.takeOwnershipOfMemory(MemoryLedger::Media);
- m_connection->send(Messages::RemoteMediaResourceManager::DataReceived(m_id, SharedMemory::IPCHandle { WTFMove(handle), buffer.size() }), 0);
+ m_connection->sendWithAsyncReply(Messages::RemoteMediaResourceManager::DataReceived(m_id, IPC::SharedBufferReference { buffer }), [] (auto&& bufferHandle) {
+ // Take ownership of shared memory and mark it as media-related memory.
+ if (!bufferHandle.handle.isNull())
+ bufferHandle.handle.takeOwnershipOfMemory(MemoryLedger::Media);
+ }, 0);
}
void RemoteMediaResourceProxy::accessControlCheckFailed(WebCore::PlatformMediaResource&, const WebCore::ResourceError& error)
Modified: trunk/Source/WebKit/WebProcess/GPU/media/SourceBufferPrivateRemote.cpp (295419 => 295420)
--- trunk/Source/WebKit/WebProcess/GPU/media/SourceBufferPrivateRemote.cpp 2022-06-09 14:08:40 UTC (rev 295419)
+++ trunk/Source/WebKit/WebProcess/GPU/media/SourceBufferPrivateRemote.cpp 2022-06-09 15:07:15 UTC (rev 295420)
@@ -33,6 +33,7 @@
#include "MediaPlayerPrivateRemote.h"
#include "MediaSourcePrivateRemote.h"
#include "RemoteSourceBufferProxyMessages.h"
+#include "SharedBufferReference.h"
#include "SourceBufferPrivateRemoteMessages.h"
#include <WebCore/PlatformTimeRanges.h>
#include <WebCore/SourceBufferPrivateClient.h>
@@ -83,17 +84,11 @@
if (!m_gpuProcessConnection)
return;
- SharedMemory::Handle handle;
- {
- auto sharedData = SharedMemory::copyBuffer(data);
- if (!sharedData)
- return;
- sharedData->createHandle(handle, SharedMemory::Protection::ReadOnly);
- }
- // Take ownership of shared memory and mark it as media-related memory.
- handle.takeOwnershipOfMemory(MemoryLedger::Media);
-
- m_gpuProcessConnection->connection().send(Messages::RemoteSourceBufferProxy::Append(SharedMemory::IPCHandle { WTFMove(handle), data->size() }), m_remoteSourceBufferIdentifier);
+ m_gpuProcessConnection->connection().sendWithAsyncReply(Messages::RemoteSourceBufferProxy::Append(IPC::SharedBufferReference { WTFMove(data) }), [] (auto&& bufferHandle) {
+ // Take ownership of shared memory and mark it as media-related memory.
+ if (!bufferHandle.handle.isNull())
+ bufferHandle.handle.takeOwnershipOfMemory(MemoryLedger::Media);
+ }, m_remoteSourceBufferIdentifier);
}
void SourceBufferPrivateRemote::abort()