commit 132a4cb3cf93b917664e15a83251e1b0967e0fe5
parent 3043aa65d91a2c287c44a748a5ba56c49af6abd7
Author: Teodor Tanasoaia <ttanasoaia@mozilla.com>
Date: Tue, 14 Oct 2025 17:13:19 +0000
Bug 1993113. r=webgpu-reviewers,jimb
Differential Revision: https://phabricator.services.mozilla.com/D268125
Diffstat:
2 files changed, 11 insertions(+), 10 deletions(-)
diff --git a/dom/webgpu/ipc/WebGPUParent.cpp b/dom/webgpu/ipc/WebGPUParent.cpp
@@ -216,11 +216,11 @@ extern void wgpu_server_set_buffer_map_data(
uintptr_t aShmemIndex) {
auto* parent = static_cast<WebGPUParent*>(aParent);
- auto mapping = std::move(parent->mTempMappings.ElementAt(aShmemIndex));
- MOZ_ASSERT(mapping.isSome());
+ auto mapping = parent->mTempMappings.ElementAt(aShmemIndex);
+ MOZ_ASSERT(mapping);
auto data = WebGPUParent::BufferMapData{
- std::move(*mapping), aHasMapFlags, aMappedOffset, aMappedSize, aDeviceId,
+ mapping, aHasMapFlags, aMappedOffset, aMappedSize, aDeviceId,
};
parent->mSharedMemoryMap.insert({aBufferId, std::move(data)});
@@ -737,9 +737,9 @@ void WebGPUParent::MapCallback(uint8_t* aUserData,
MOZ_RELEASE_ASSERT(!error.GetError());
- MOZ_RELEASE_ASSERT(mapData->mShmem.Size() >= offset + size);
+ MOZ_RELEASE_ASSERT(mapData->mShmem->Size() >= offset + size);
if (src.ptr != nullptr && src.length >= size) {
- auto dst = mapData->mShmem.DataAsSpan<uint8_t>().Subspan(offset, size);
+ auto dst = mapData->mShmem->DataAsSpan<uint8_t>().Subspan(offset, size);
memcpy(dst.data(), src.ptr, size);
}
}
@@ -774,11 +774,11 @@ void WebGPUParent::BufferUnmap(RawId aDeviceId, RawId aBufferId, bool aFlush) {
ForwardError(getRangeError);
if (mapped.ptr != nullptr && mapped.length >= size) {
- auto shmSize = mapData->mShmem.Size();
+ auto shmSize = mapData->mShmem->Size();
MOZ_RELEASE_ASSERT(offset <= shmSize);
MOZ_RELEASE_ASSERT(size <= shmSize - offset);
- auto src = mapData->mShmem.DataAsSpan<uint8_t>().Subspan(offset, size);
+ auto src = mapData->mShmem->DataAsSpan<uint8_t>().Subspan(offset, size);
memcpy(mapped.ptr, src.data(), size);
}
@@ -1584,7 +1584,8 @@ ipc::IPCResult WebGPUParent::RecvMessages(
// `aShmem` may be an invalid handle, however this will simply result in an
// invalid mapping with 0 size, which we use safely.
- mTempMappings.AppendElement(Some(std::move(mapping)));
+ mTempMappings.AppendElement(
+ std::make_shared<ipc::SharedMemoryMapping>(std::move(mapping)));
}
ffi::WGPUFfiSlice_ByteBuf data_buffers{ToFFI(aDataBuffers.Elements()),
diff --git a/dom/webgpu/ipc/WebGPUParent.h b/dom/webgpu/ipc/WebGPUParent.h
@@ -135,7 +135,7 @@ class WebGPUParent final : public PWebGPUParent, public SupportsWeakPtr {
void ActorDestroy(ActorDestroyReason aWhy) override;
struct BufferMapData {
- ipc::SharedMemoryMapping mShmem;
+ std::shared_ptr<ipc::SharedMemoryMapping> mShmem;
// True if buffer's usage has MAP_READ or MAP_WRITE set.
bool mHasMapFlags;
uint64_t mMappedOffset;
@@ -219,7 +219,7 @@ class WebGPUParent final : public PWebGPUParent, public SupportsWeakPtr {
void ReportError(RawId aDeviceId, GPUErrorFilter, const nsCString& message);
- nsTArray<Maybe<ipc::shared_memory::MutableMapping>> mTempMappings;
+ nsTArray<std::shared_ptr<ipc::SharedMemoryMapping>> mTempMappings;
/// A map from wgpu buffer ids to data about their shared memory segments.
/// Includes entries about mappedAtCreation, MAP_READ and MAP_WRITE buffers,