From f71f815048a9389d8662463a282a96cba246557b Mon Sep 17 00:00:00 2001 From: "A. Unique TensorFlower" Date: Thu, 8 Aug 2019 10:46:17 -0700 Subject: [PATCH] Mock ASharedMemory_create on non-Android platforms only if NNAPI is loaded This ensures identical behaviour on platforms which use full nnapi_implementation.cc, but don't have libneuralnetworks.so library, and platforms which use nnapi_implementation_disabled.cc stub. PiperOrigin-RevId: 262387219 --- tensorflow/lite/nnapi/nnapi_implementation.cc | 8 +++++++- tensorflow/lite/nnapi/nnapi_implementation_test.cc | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/tensorflow/lite/nnapi/nnapi_implementation.cc b/tensorflow/lite/nnapi/nnapi_implementation.cc index bc5159f6e4a..c30a24afa4f 100644 --- a/tensorflow/lite/nnapi/nnapi_implementation.cc +++ b/tensorflow/lite/nnapi/nnapi_implementation.cc @@ -178,7 +178,13 @@ const NnApi LoadNnApi() { } } #else - nnapi.ASharedMemory_create = ASharedMemory_create; + // Mock ASharedMemory_create only if libneuralnetworks.so was successfully + // loaded. This ensures identical behaviour on platforms which use this + // implementation, but don't have libneuralnetworks.so library, and + // platforms which use nnapi_implementation_disabled.cc stub. + if (libneuralnetworks != nullptr) { + nnapi.ASharedMemory_create = ASharedMemory_create; + } #endif // __ANDROID__ // API 28 (NN 1.1) methods. diff --git a/tensorflow/lite/nnapi/nnapi_implementation_test.cc b/tensorflow/lite/nnapi/nnapi_implementation_test.cc index 9f30b95ec37..0d696aff79e 100644 --- a/tensorflow/lite/nnapi/nnapi_implementation_test.cc +++ b/tensorflow/lite/nnapi/nnapi_implementation_test.cc @@ -116,7 +116,7 @@ TEST(NnapiLibTest, NnApiImplementation) { EXPECT_EQ(nnapi->ANeuralNetworksExecution_startCompute, nullptr); EXPECT_EQ(nnapi->ANeuralNetworksEvent_wait, nullptr); EXPECT_EQ(nnapi->ANeuralNetworksEvent_free, nullptr); - EXPECT_NE(nnapi->ASharedMemory_create, nullptr); + EXPECT_EQ(nnapi->ASharedMemory_create, nullptr); EXPECT_EQ(nnapi->ANeuralNetworks_getDeviceCount, nullptr); EXPECT_EQ(nnapi->ANeuralNetworks_getDevice, nullptr); EXPECT_EQ(nnapi->ANeuralNetworksDevice_getName, nullptr);