Do not pass std::shared_ptr when not transfering ownership
This goes against Google's C++ primer [1] and the Core C++ guidelines
[2]. It incurs additional runtime overhead to increase and
subsequently decrease the reference count without providing value,
since the parent function maintains the a reference to the object
through the duration of the function.
1: go/cpp-primer#unique_ptr - "In general, if you find yourself
wanting to use a pointer or reference to a unique_ptr, you're probably
not transferring ownership, so you should usually just pass a raw
pointer or reference to the underlying object, and keep unique_ptr out
of it."
2: http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#f7-for-general-use-take-t-or-t-arguments-rather-than-smart-pointers
Test: play games
Change-Id: I04b376b74e904e1c08eb645d5c0dd8ec76566be8
diff --git a/guest/GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp b/guest/GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp
index 51e7972..7f6023e 100644
--- a/guest/GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp
+++ b/guest/GoldfishAddressSpace/VirtioGpuAddressSpaceStream.cpp
@@ -112,7 +112,7 @@
exec.command = static_cast<void*>(&contextCreate);
exec.command_size = sizeof(contextCreate);
- ret = instance->execBuffer(exec, blob);
+ ret = instance->execBuffer(exec, blob.get());
if (ret)
return nullptr;
diff --git a/guest/platform/fuchsia/FuchsiaVirtGpu.h b/guest/platform/fuchsia/FuchsiaVirtGpu.h
index bf3089c..10f6d40 100644
--- a/guest/platform/fuchsia/FuchsiaVirtGpu.h
+++ b/guest/platform/fuchsia/FuchsiaVirtGpu.h
@@ -25,9 +25,9 @@
uint64_t size);
~FuchsiaVirtGpuBlob();
- uint32_t getResourceHandle(void) override;
- uint32_t getBlobHandle(void) override;
- int wait(void) override;
+ uint32_t getResourceHandle() const override;
+ uint32_t getBlobHandle() const override;
+ int wait() override;
int exportBlob(struct VirtGpuExternalHandle& handle) override;
int transferFromHost(uint32_t offset, uint32_t size) override;
@@ -57,5 +57,5 @@
VirtGpuBlobPtr createVirglBlob(uint32_t width, uint32_t height, uint32_t format) override;
VirtGpuBlobPtr importBlob(const struct VirtGpuExternalHandle& handle) override;
- int execBuffer(struct VirtGpuExecBuffer& execbuffer, VirtGpuBlobPtr blob) override;
+ int execBuffer(struct VirtGpuExecBuffer& execbuffer, const VirtGpuBlob* blob) override;
};
diff --git a/guest/platform/fuchsia/FuchsiaVirtGpuBlob.cpp b/guest/platform/fuchsia/FuchsiaVirtGpuBlob.cpp
index a300f61..8e512a7 100644
--- a/guest/platform/fuchsia/FuchsiaVirtGpuBlob.cpp
+++ b/guest/platform/fuchsia/FuchsiaVirtGpuBlob.cpp
@@ -23,12 +23,12 @@
FuchsiaVirtGpuBlob::~FuchsiaVirtGpuBlob(void) {}
-uint32_t FuchsiaVirtGpuBlob::getBlobHandle(void) {
+uint32_t FuchsiaVirtGpuBlob::getBlobHandle() const {
ALOGE("%s: unimplemented", __func__);
return 0;
}
-uint32_t FuchsiaVirtGpuBlob::getResourceHandle(void) {
+uint32_t FuchsiaVirtGpuBlob::getResourceHandle() const {
ALOGE("%s: unimplemented", __func__);
return 0;
}
diff --git a/guest/platform/fuchsia/FuchsiaVirtGpuDevice.cpp b/guest/platform/fuchsia/FuchsiaVirtGpuDevice.cpp
index 37ad69b..0c97d2f 100644
--- a/guest/platform/fuchsia/FuchsiaVirtGpuDevice.cpp
+++ b/guest/platform/fuchsia/FuchsiaVirtGpuDevice.cpp
@@ -43,7 +43,8 @@
return nullptr;
}
-int FuchsiaVirtGpuDevice::execBuffer(struct VirtGpuExecBuffer& execbuffer, VirtGpuBlobPtr blob) {
+int FuchsiaVirtGpuDevice::execBuffer(struct VirtGpuExecBuffer& execbuffer,
+ const VirtGpuBlob* blob) {
ALOGE("%s: unimplemented", __func__);
return 0;
}
diff --git a/guest/platform/include/VirtGpu.h b/guest/platform/include/VirtGpu.h
index 3f1b489..db5e2af 100644
--- a/guest/platform/include/VirtGpu.h
+++ b/guest/platform/include/VirtGpu.h
@@ -134,9 +134,9 @@
public:
virtual ~VirtGpuBlob() {}
- virtual uint32_t getResourceHandle(void) = 0;
- virtual uint32_t getBlobHandle(void) = 0;
- virtual int wait(void) = 0;
+ virtual uint32_t getResourceHandle() const = 0;
+ virtual uint32_t getBlobHandle() const = 0;
+ virtual int wait() = 0;
virtual VirtGpuBlobMappingPtr createMapping(void) = 0;
virtual int exportBlob(struct VirtGpuExternalHandle& handle) = 0;
@@ -172,9 +172,9 @@
virtual VirtGpuBlobPtr createVirglBlob(uint32_t width, uint32_t height, uint32_t virglFormat) = 0;
virtual VirtGpuBlobPtr importBlob(const struct VirtGpuExternalHandle& handle) = 0;
- virtual int execBuffer(struct VirtGpuExecBuffer& execbuffer, VirtGpuBlobPtr blob) = 0;
+ virtual int execBuffer(struct VirtGpuExecBuffer& execbuffer, const VirtGpuBlob* blob) = 0;
- private:
+ private:
enum VirtGpuCapset mCapset;
};
diff --git a/guest/platform/linux/LinuxVirtGpu.h b/guest/platform/linux/LinuxVirtGpu.h
index 8cccb0a..6515728 100644
--- a/guest/platform/linux/LinuxVirtGpu.h
+++ b/guest/platform/linux/LinuxVirtGpu.h
@@ -24,9 +24,9 @@
uint64_t size);
~LinuxVirtGpuBlob();
- uint32_t getResourceHandle(void) override;
- uint32_t getBlobHandle(void) override;
- int wait(void) override;
+ uint32_t getResourceHandle() const override;
+ uint32_t getBlobHandle() const override;
+ int wait() override;
VirtGpuBlobMappingPtr createMapping(void) override;
int exportBlob(struct VirtGpuExternalHandle& handle) override;
@@ -70,7 +70,7 @@
VirtGpuBlobPtr createVirglBlob(uint32_t width, uint32_t height, uint32_t virglFormat) override;
virtual VirtGpuBlobPtr importBlob(const struct VirtGpuExternalHandle& handle);
- virtual int execBuffer(struct VirtGpuExecBuffer& execbuffer, VirtGpuBlobPtr blob);
+ virtual int execBuffer(struct VirtGpuExecBuffer& execbuffer, const VirtGpuBlob* blob);
private:
int64_t mDeviceHandle;
diff --git a/guest/platform/linux/LinuxVirtGpuBlob.cpp b/guest/platform/linux/LinuxVirtGpuBlob.cpp
index 0d5035f..9ba1adc 100644
--- a/guest/platform/linux/LinuxVirtGpuBlob.cpp
+++ b/guest/platform/linux/LinuxVirtGpuBlob.cpp
@@ -33,7 +33,7 @@
mResourceHandle(resourceHandle),
mSize(size) {}
-LinuxVirtGpuBlob::~LinuxVirtGpuBlob(void) {
+LinuxVirtGpuBlob::~LinuxVirtGpuBlob() {
struct drm_gem_close gem_close {
.handle = mBlobHandle, .pad = 0,
};
@@ -45,11 +45,11 @@
}
}
-uint32_t LinuxVirtGpuBlob::getBlobHandle(void) { return mBlobHandle; }
+uint32_t LinuxVirtGpuBlob::getBlobHandle() const { return mBlobHandle; }
-uint32_t LinuxVirtGpuBlob::getResourceHandle(void) { return mResourceHandle; }
+uint32_t LinuxVirtGpuBlob::getResourceHandle() const { return mResourceHandle; }
-VirtGpuBlobMappingPtr LinuxVirtGpuBlob::createMapping(void) {
+VirtGpuBlobMappingPtr LinuxVirtGpuBlob::createMapping() {
int ret;
struct drm_virtgpu_map map {
.handle = mBlobHandle, .pad = 0,
diff --git a/guest/platform/linux/LinuxVirtGpuDevice.cpp b/guest/platform/linux/LinuxVirtGpuDevice.cpp
index 9e35cdb..a54abfc 100644
--- a/guest/platform/linux/LinuxVirtGpuDevice.cpp
+++ b/guest/platform/linux/LinuxVirtGpuDevice.cpp
@@ -245,7 +245,7 @@
static_cast<uint64_t>(info.size));
}
-int LinuxVirtGpuDevice::execBuffer(struct VirtGpuExecBuffer& execbuffer, VirtGpuBlobPtr blob) {
+int LinuxVirtGpuDevice::execBuffer(struct VirtGpuExecBuffer& execbuffer, const VirtGpuBlob* blob) {
int ret;
struct drm_virtgpu_execbuffer exec = {0};
uint32_t blobHandle;
diff --git a/guest/platform/rutabaga/RutabagaVirtGpu.h b/guest/platform/rutabaga/RutabagaVirtGpu.h
index 0abea2b..8cf07f5 100644
--- a/guest/platform/rutabaga/RutabagaVirtGpu.h
+++ b/guest/platform/rutabaga/RutabagaVirtGpu.h
@@ -44,8 +44,8 @@
VirtGpuBlobMappingPtr createMapping(void) override;
- uint32_t getResourceHandle() override;
- uint32_t getBlobHandle() override;
+ uint32_t getResourceHandle() const override;
+ uint32_t getBlobHandle() const override;
int exportBlob(VirtGpuExternalHandle& handle) override;
int wait() override;
@@ -86,9 +86,9 @@
VirtGpuBlobPtr importBlob(const struct VirtGpuExternalHandle& handle) override;
- int execBuffer(struct VirtGpuExecBuffer& execbuffer, VirtGpuBlobPtr blob) override;
+ int execBuffer(struct VirtGpuExecBuffer& execbuffer, const VirtGpuBlob* blob) override;
- private:
+ private:
const uint32_t mContextId;
const VirtGpuCapset mCapset;
diff --git a/guest/platform/rutabaga/RutabagaVirtGpuBlob.cpp b/guest/platform/rutabaga/RutabagaVirtGpuBlob.cpp
index 2799b74..0b7db44 100644
--- a/guest/platform/rutabaga/RutabagaVirtGpuBlob.cpp
+++ b/guest/platform/rutabaga/RutabagaVirtGpuBlob.cpp
@@ -34,9 +34,9 @@
return std::make_shared<RutabagaVirtGpuBlobMapping>(shared_from_this(), mapped);
}
-uint32_t RutabagaVirtGpuResource::getResourceHandle() { return mResourceId; }
+uint32_t RutabagaVirtGpuResource::getResourceHandle() const { return mResourceId; }
-uint32_t RutabagaVirtGpuResource::getBlobHandle() {
+uint32_t RutabagaVirtGpuResource::getBlobHandle() const {
if (mResourceType != ResourceType::kBlob) {
ALOGE("Attempting to get blob handle for non-blob resource");
return -1;
diff --git a/guest/platform/rutabaga/RutabagaVirtGpuDevice.cpp b/guest/platform/rutabaga/RutabagaVirtGpuDevice.cpp
index 4263288..999ac2f 100644
--- a/guest/platform/rutabaga/RutabagaVirtGpuDevice.cpp
+++ b/guest/platform/rutabaga/RutabagaVirtGpuDevice.cpp
@@ -55,7 +55,8 @@
*resourceIdOpt, RutabagaVirtGpuResource::ResourceType::kPipe, mContextId));
}
-int RutabagaVirtGpuDevice::execBuffer(struct VirtGpuExecBuffer& execbuffer, VirtGpuBlobPtr blob) {
+int RutabagaVirtGpuDevice::execBuffer(struct VirtGpuExecBuffer& execbuffer,
+ const VirtGpuBlob* blob) {
std::optional<uint32_t> blobResourceId;
if (blob) {
blobResourceId = blob->getResourceHandle();
diff --git a/guest/platform/stub/StubVirtGpu.h b/guest/platform/stub/StubVirtGpu.h
index 35773ec..7466cb5 100644
--- a/guest/platform/stub/StubVirtGpu.h
+++ b/guest/platform/stub/StubVirtGpu.h
@@ -23,8 +23,8 @@
StubVirtGpuBlob(int64_t deviceHandle, uint32_t blobHandle, uint32_t resourceHandle, uint64_t size);
~StubVirtGpuBlob();
- uint32_t getResourceHandle(void) override;
- uint32_t getBlobHandle(void) override;
+ uint32_t getResourceHandle() const override;
+ uint32_t getBlobHandle() const override;
int wait(void) override;
VirtGpuBlobMappingPtr createMapping(void) override;
@@ -69,7 +69,7 @@
VirtGpuBlobPtr createVirglBlob(uint32_t width, uint32_t height, uint32_t virglFormat);
VirtGpuBlobPtr importBlob(const struct VirtGpuExternalHandle& handle) override;
- int execBuffer(struct VirtGpuExecBuffer& execbuffer, VirtGpuBlobPtr blob) override;
+ int execBuffer(struct VirtGpuExecBuffer& execbuffer, const VirtGpuBlob* blob) override;
virtual VirtGpuBlobPtr createColorBuffer(int width, int height, uint32_t glFormat);
virtual VirtGpuBlobPtr createColorBuffer(int size);
diff --git a/guest/platform/stub/StubVirtGpuBlob.cpp b/guest/platform/stub/StubVirtGpuBlob.cpp
index 4e4b982..4e8c23c 100644
--- a/guest/platform/stub/StubVirtGpuBlob.cpp
+++ b/guest/platform/stub/StubVirtGpuBlob.cpp
@@ -23,21 +23,15 @@
mResourceHandle(resourceHandle),
mSize(size) {}
-StubVirtGpuBlob::~StubVirtGpuBlob(void) {
+StubVirtGpuBlob::~StubVirtGpuBlob() {
// Unimplemented stub
}
-uint32_t StubVirtGpuBlob::getBlobHandle(void) {
- return 0;
-}
+uint32_t StubVirtGpuBlob::getBlobHandle() const { return 0; }
-uint32_t StubVirtGpuBlob::getResourceHandle(void) {
- return 0;
-}
+uint32_t StubVirtGpuBlob::getResourceHandle() const { return 0; }
-VirtGpuBlobMappingPtr StubVirtGpuBlob::createMapping(void) {
- return nullptr;
-}
+VirtGpuBlobMappingPtr StubVirtGpuBlob::createMapping() { return nullptr; }
int StubVirtGpuBlob::wait() {
return -1;
diff --git a/guest/platform/stub/StubVirtGpuDevice.cpp b/guest/platform/stub/StubVirtGpuDevice.cpp
index c3a6c70..7908c85 100644
--- a/guest/platform/stub/StubVirtGpuDevice.cpp
+++ b/guest/platform/stub/StubVirtGpuDevice.cpp
@@ -41,9 +41,7 @@
return nullptr;
}
-int StubVirtGpuDevice::execBuffer(struct VirtGpuExecBuffer&, VirtGpuBlobPtr) {
- return -1;
-}
+int StubVirtGpuDevice::execBuffer(struct VirtGpuExecBuffer&, const VirtGpuBlob*) { return -1; }
VirtGpuBlobPtr createColorBuffer(int, int, uint32_t) {
return nullptr;
diff --git a/guest/vulkan_enc/ResourceTracker.cpp b/guest/vulkan_enc/ResourceTracker.cpp
index 202090a..6368b38 100644
--- a/guest/vulkan_enc/ResourceTracker.cpp
+++ b/guest/vulkan_enc/ResourceTracker.cpp
@@ -3068,7 +3068,7 @@
exec.command_size = sizeof(placeholderCmd);
exec.flags = kRingIdx;
exec.ring_idx = 1;
- if (instance->execBuffer(exec, guestBlob)) {
+ if (instance->execBuffer(exec, guestBlob.get())) {
ALOGE("Failed to allocate coherent memory: failed to execbuffer for wait.");
return VK_ERROR_OUT_OF_HOST_MEMORY;
}