vulkan-cereal: Use ctx_id when working with blobs
Having a single, host wide blob id namespace creates
a few problems. One problem is when using guest
generated blob ids, it's not possible to know which
client generated it. Guest generated IDs enable a
few features, such as deferred mapping.
BUG=280064176
TEST=launch_cvd --gpu_mode=gfxstream_guest_angle
Change-Id: I9ba2d9846256b2b3758e727b29486c034be54646
diff --git a/stream-servers/virtio-gpu-gfxstream-renderer.cpp b/stream-servers/virtio-gpu-gfxstream-renderer.cpp
index 855fd4e..c646afa 100644
--- a/stream-servers/virtio-gpu-gfxstream-renderer.cpp
+++ b/stream-servers/virtio-gpu-gfxstream-renderer.cpp
@@ -17,6 +17,7 @@
#include <type_traits>
#include <unordered_map>
+#include "BlobManager.h"
#include "FrameBuffer.h"
#include "GfxStreamAgents.h"
#include "VirtioGpuTimelines.h"
@@ -29,7 +30,6 @@
#include "aemu/base/synchronization/Lock.h"
#include "host-common/AddressSpaceService.h"
#include "host-common/GfxstreamFatalError.h"
-#include "host-common/HostmemIdMapping.h"
#include "host-common/address_space_device.h"
#include "host-common/android_pipe_common.h"
#include "host-common/android_pipe_device.h"
@@ -163,10 +163,10 @@
using android::base::MetricsLogger;
using android::base::SharedMemory;
-using android::emulation::HostmemIdMapping;
-using android::emulation::ManagedDescriptorInfo;
using emugl::ABORT_REASON_OTHER;
using emugl::FatalError;
+using gfxstream::BlobManager;
+using gfxstream::ManagedDescriptorInfo;
using VirtioGpuResId = uint32_t;
@@ -1467,9 +1467,9 @@
(create_blob->blob_flags & STREAM_BLOB_FLAG_CREATE_GUEST_HANDLE)) {
#if defined(__linux__) || defined(__QNX__)
ManagedDescriptor managedHandle(handle->os_handle);
- HostmemIdMapping::get()->addDescriptorInfo(create_blob->blob_id,
- std::move(managedHandle),
- handle->handle_type, 0, std::nullopt);
+ BlobManager::get()->addDescriptorInfo(ctx_id, create_blob->blob_id,
+ std::move(managedHandle), handle->handle_type,
+ 0, std::nullopt);
e.caching = STREAM_RENDERER_MAP_CACHE_CACHED;
#else
@@ -1477,7 +1477,7 @@
#endif
} else {
auto descriptorInfoOpt =
- HostmemIdMapping::get()->removeDescriptorInfo(create_blob->blob_id);
+ BlobManager::get()->removeDescriptorInfo(ctx_id, create_blob->blob_id);
if (descriptorInfoOpt) {
e.descriptorInfo =
std::make_shared<ManagedDescriptorInfo>(std::move(*descriptorInfoOpt));
@@ -1488,11 +1488,14 @@
e.caching = e.descriptorInfo->caching;
}
} else {
- auto entry = HostmemIdMapping::get()->get(create_blob->blob_id);
- e.hva = entry.hva;
- e.hvaSize = entry.size;
- e.args.width = entry.size;
- e.caching = entry.caching;
+ auto entryOpt = BlobManager::get()->removeMapping(ctx_id, create_blob->blob_id);
+ if (entryOpt) {
+ e.hva = entryOpt->addr;
+ e.caching = entryOpt->caching;
+ e.hvaSize = create_blob->size;
+ } else {
+ return -EINVAL;
+ }
}
e.blobId = create_blob->blob_id;