Add support for mmaped file descriptor
- create new API to create ANeuralNetworks_Memory from a mmaped fd.
- add the corresponding Memory constructor to NeuralNetworksWrapper.h
- Add unit test TestFd for the new API.
Bug: 63905942
Test: mm
Test: TestFd pass with CPU path.
Test: TestFd pass on sample HIDL driver, with ag/2588539
Change-Id: I1fcb0f0bd01e58bd592e18eff11c27034ee4a4c3
diff --git a/runtime/NeuralNetworks.cpp b/runtime/NeuralNetworks.cpp
index 47535f8..2257dee 100644
--- a/runtime/NeuralNetworks.cpp
+++ b/runtime/NeuralNetworks.cpp
@@ -291,37 +291,18 @@
return ANEURALNETWORKS_NO_ERROR;
}
-/* TODO
-int ANeuralNetworksMemory_createFromHidlMemory(hidl_memory hidlMemory,
- ANeuralNetworksMemory** memory) {
- if (!memory) {
- LOG(ERROR) << "ANeuralNetworksMemory_createFromHidlMemory passed a nullptr";
- return ANEURALNETWORKS_UNEXPECTED_NULL;
- }
- *memory = nullptr;
- std::unique_ptr<Memory> m = std::make_unique<Memory>(Memory());
- if (m == nullptr) {
- return ANEURALNETWORKS_OUT_OF_MEMORY;
- }
- int n = m->setFromHidlMemory(hidlMemory);
- if (n != ANEURALNETWORKS_NO_ERROR) {
- return n;
- }
- *memory = reinterpret_cast<ANeuralNetworksMemory*>(m.release());
- return ANEURALNETWORKS_NO_ERROR;
-}
-
-int ANeuralNetworksMemory_createFromFd(int fd, ANeuralNetworksMemory** memory) {
+int ANeuralNetworksMemory_createFromFd(size_t size, int prot, int fd,
+ ANeuralNetworksMemory** memory) {
if (fd < 0) {
LOG(ERROR) << "ANeuralNetworksMemory_createFromFd invalid fd " << fd;
return ANEURALNETWORKS_UNEXPECTED_NULL;
}
*memory = nullptr;
- std::unique_ptr<Memory> m = std::make_unique<Memory>(Memory());
+ std::unique_ptr<MemoryFd> m = std::make_unique<MemoryFd>();
if (m == nullptr) {
return ANEURALNETWORKS_OUT_OF_MEMORY;
}
- int n = m->setFromFd(fd);
+ int n = m->set(size, prot, fd);
if (n != ANEURALNETWORKS_NO_ERROR) {
return n;
}
@@ -329,21 +310,6 @@
return ANEURALNETWORKS_NO_ERROR;
}
-int ANeuralNetworksMemory_createFromGrallocBuffer(buffer_handle_t buffer,
- ANeuralNetworksMemory** memory) {
- *memory = nullptr;
- // TODO implement
- return ANEURALNETWORKS_NO_ERROR;
-}
-
-int ANeuralNetworksMemory_createFromHardwareBuffer(AHardwareBuffer* buffer,
- ANeuralNetworksMemory** memory) {
- *memory = nullptr;
- // TODO implement
- return ANEURALNETWORKS_NO_ERROR;
-}
-*/
-
int ANeuralNetworksMemory_getPointer(ANeuralNetworksMemory* memory, uint8_t** buffer) {
if (!memory || !buffer) {
LOG(ERROR) << "ANeuralNetworksMemory_getPointer passed a nullptr";