commit a1dc8c233340b7689b28b4731c5951ad58ce0da3
parent 00f3f3d03562c5d86f967acf1ac46e4f25ebf5fc
Author: Teodor Tanasoaia <ttanasoaia@mozilla.com>
Date: Wed, 15 Oct 2025 15:56:23 +0000
Bug 1993113. r=webgpu-reviewers,jimb
Differential Revision: https://phabricator.services.mozilla.com/D268125
Diffstat:
2 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/dom/webgpu/ipc/WebGPUParent.cpp b/dom/webgpu/ipc/WebGPUParent.cpp
@@ -216,11 +216,10 @@ 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.at(aShmemIndex);
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 +736,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 +773,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);
}
@@ -1568,9 +1567,9 @@ ipc::IPCResult WebGPUParent::RecvMessages(
uint32_t nrOfMessages, ipc::ByteBuf&& aSerializedMessages,
nsTArray<ipc::ByteBuf>&& aDataBuffers,
nsTArray<MutableSharedMemoryHandle>&& aShmems) {
- MOZ_ASSERT(mTempMappings.IsEmpty());
+ MOZ_ASSERT(mTempMappings.empty());
- mTempMappings.SetCapacity(aShmems.Length());
+ mTempMappings.reserve(aShmems.Length());
nsTArray<ffi::WGPUFfiSlice_u8> shmem_mappings(aShmems.Length());
@@ -1584,7 +1583,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.push_back(
+ std::make_shared<ipc::SharedMemoryMapping>(std::move(mapping)));
}
ffi::WGPUFfiSlice_ByteBuf data_buffers{ToFFI(aDataBuffers.Elements()),
@@ -1597,7 +1597,7 @@ ipc::IPCResult WebGPUParent::RecvMessages(
ToFFI(&aSerializedMessages), data_buffers,
shmem_mapping_slices);
- mTempMappings.Clear();
+ mTempMappings.clear();
return IPC_OK();
}
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;
+ std::vector<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,