// Copyright 2019 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #include "BlobManager.h" #include using android::base::ManagedDescriptor; namespace gfxstream { static BlobManager* sMapping() { static BlobManager* s = new BlobManager; return s; } // static BlobManager* BlobManager::get() { return sMapping(); } void BlobManager::addMapping(uint32_t ctxId, uint64_t blobId, void* addr, uint32_t caching) { struct HostMemInfo info = { .addr = addr, .caching = caching, }; auto key = std::make_pair(ctxId, blobId); std::lock_guard lock(mLock); mHostMemInfos.insert(std::make_pair(key, info)); } std::optional BlobManager::removeMapping(uint32_t ctxId, uint64_t blobId) { auto key = std::make_pair(ctxId, blobId); std::lock_guard lock(mLock); auto found = mHostMemInfos.find(key); if (found != mHostMemInfos.end()) { std::optional ret = found->second; mHostMemInfos.erase(found); return ret; } return std::nullopt; } void BlobManager::addDescriptorInfo(uint32_t ctxId, uint64_t blobId, ManagedDescriptor descriptor, uint32_t handleType, uint32_t caching, std::optional vulkanInfoOpt) { struct ManagedDescriptorInfo info = { .descriptor = std::move(descriptor), .handleType = handleType, .caching = caching, .vulkanInfoOpt = vulkanInfoOpt, }; auto key = std::make_pair(ctxId, blobId); std::lock_guard lock(mLock); mDescriptorInfos.insert(std::make_pair(key, std::move(info))); } std::optional BlobManager::removeDescriptorInfo(uint32_t ctxId, uint64_t blobId) { auto key = std::make_pair(ctxId, blobId); std::lock_guard lock(mLock); auto found = mDescriptorInfos.find(key); if (found != mDescriptorInfos.end()) { std::optional ret = std::move(found->second); mDescriptorInfos.erase(found); return ret; } return std::nullopt; } } // namespace gfxstream