tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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:
Mdom/webgpu/ipc/WebGPUParent.cpp | 22+++++++++++-----------
Mdom/webgpu/ipc/WebGPUParent.h | 4++--
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,