Change NNAPI Memory to ref-counted SharedMemory -- hal
Bug: 179906132
Test: mma
Test: NeuralNetworksTest_static
Test: presubmit
Change-Id: I6435db906a2efe4938da18149a1fcd6d24730a95
Merged-In: I6435db906a2efe4938da18149a1fcd6d24730a95
(cherry picked from commit 79a16ebb6f42c21a21202f7b63ce372f2df15137)
diff --git a/neuralnetworks/aidl/utils/src/Conversions.cpp b/neuralnetworks/aidl/utils/src/Conversions.cpp
index 0e93b02..486d01b 100644
--- a/neuralnetworks/aidl/utils/src/Conversions.cpp
+++ b/neuralnetworks/aidl/utils/src/Conversions.cpp
@@ -53,6 +53,8 @@
namespace android::nn {
namespace {
+using ::aidl::android::hardware::common::NativeHandle;
+
constexpr auto validOperandType(nn::OperandType operandType) {
switch (operandType) {
case nn::OperandType::FLOAT32:
@@ -316,13 +318,13 @@
return measureTiming ? MeasureTiming::YES : MeasureTiming::NO;
}
-GeneralResult<Memory> unvalidatedConvert(const aidl_hal::Memory& memory) {
+GeneralResult<SharedMemory> unvalidatedConvert(const aidl_hal::Memory& memory) {
VERIFY_NON_NEGATIVE(memory.size) << "Memory size must not be negative";
- return Memory{
+ return std::make_shared<const Memory>(Memory{
.handle = NN_TRY(unvalidatedConvert(memory.handle)),
.size = static_cast<uint32_t>(memory.size),
.name = memory.name,
- };
+ });
}
GeneralResult<Model::OperandValues> unvalidatedConvert(const std::vector<uint8_t>& operandValues) {
@@ -397,8 +399,7 @@
return static_cast<ExecutionPreference>(executionPreference);
}
-GeneralResult<SharedHandle> unvalidatedConvert(
- const ::aidl::android::hardware::common::NativeHandle& aidlNativeHandle) {
+GeneralResult<SharedHandle> unvalidatedConvert(const NativeHandle& aidlNativeHandle) {
std::vector<base::unique_fd> fds;
fds.reserve(aidlNativeHandle.fds.size());
for (const auto& fd : aidlNativeHandle.fds) {
@@ -422,7 +423,7 @@
return validatedConvert(executionPreference);
}
-GeneralResult<Memory> convert(const aidl_hal::Memory& operand) {
+GeneralResult<SharedMemory> convert(const aidl_hal::Memory& operand) {
return validatedConvert(operand);
}
@@ -454,7 +455,7 @@
return unvalidatedConvert(operations);
}
-GeneralResult<std::vector<Memory>> convert(const std::vector<aidl_hal::Memory>& memories) {
+GeneralResult<std::vector<SharedMemory>> convert(const std::vector<aidl_hal::Memory>& memories) {
return validatedConvert(memories);
}
@@ -525,14 +526,15 @@
return aidlNativeHandle;
}
-nn::GeneralResult<Memory> unvalidatedConvert(const nn::Memory& memory) {
- if (memory.size > std::numeric_limits<int64_t>::max()) {
+nn::GeneralResult<Memory> unvalidatedConvert(const nn::SharedMemory& memory) {
+ CHECK(memory != nullptr);
+ if (memory->size > std::numeric_limits<int64_t>::max()) {
return NN_ERROR() << "Memory size doesn't fit into int64_t.";
}
return Memory{
- .handle = NN_TRY(unvalidatedConvert(memory.handle)),
- .size = static_cast<int64_t>(memory.size),
- .name = memory.name,
+ .handle = NN_TRY(unvalidatedConvert(memory->handle)),
+ .size = static_cast<int64_t>(memory->size),
+ .name = memory->name,
};
}
@@ -558,7 +560,7 @@
.isSufficient = outputShape.isSufficient};
}
-nn::GeneralResult<Memory> convert(const nn::Memory& memory) {
+nn::GeneralResult<Memory> convert(const nn::SharedMemory& memory) {
return validatedConvert(memory);
}