summaryrefslogtreecommitdiff
path: root/nn/runtime/test/TestUtils.h
diff options
context:
space:
mode:
authorXusong Wang <xusongw@google.com>2020-04-28 16:05:48 -0700
committerXusong Wang <xusongw@google.com>2020-04-30 18:13:25 -0700
commit7f7e3874339e9ff4fe3bdb24e627f4e0f7edcf97 (patch)
tree9e42c78bfd8ab2f669b386e2701b6d57d400611f /nn/runtime/test/TestUtils.h
parent5d35af6b9f37fcb97d493bcfbfb0a99f5ed44357 (diff)
downloadml-7f7e3874339e9ff4fe3bdb24e627f4e0f7edcf97.tar.gz
Add internal NNT_static tests for buffer copying.
This helps cover the code path of data copying between hidl memory and IBuffer, as well as data copying between IBuffers. These code paths may not be covered by CTS because of the lack of driver support. This CL additionally extracts TestAshmem class from TestGenerated to a common TestUtils. Bug: 152209365 Test: NNT_static Change-Id: I617bfbc391c7d0ada0c32b31ee2e6e493d5dc6a2
Diffstat (limited to 'nn/runtime/test/TestUtils.h')
-rw-r--r--nn/runtime/test/TestUtils.h82
1 files changed, 82 insertions, 0 deletions
diff --git a/nn/runtime/test/TestUtils.h b/nn/runtime/test/TestUtils.h
new file mode 100644
index 000000000..61f7ef8f5
--- /dev/null
+++ b/nn/runtime/test/TestUtils.h
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2020 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.
+ */
+
+#ifndef ANDROID_FRAMEWORKS_ML_NN_RUNTIME_TEST_TEST_UTILS_H
+#define ANDROID_FRAMEWORKS_ML_NN_RUNTIME_TEST_TEST_UTILS_H
+
+#include <android-base/mapped_file.h>
+#include <android-base/unique_fd.h>
+#include <android/sharedmem.h>
+
+#include <memory>
+#include <utility>
+
+#include "TestHarness.h"
+#include "TestNeuralNetworksWrapper.h"
+
+namespace android::nn {
+
+// Convenience class to manage the file, mapping, and memory object.
+class TestAshmem {
+ public:
+ TestAshmem(::android::base::unique_fd fd, std::unique_ptr<::android::base::MappedFile> mapped,
+ test_wrapper::Memory memory)
+ : mFd(std::move(fd)), mMapped(std::move(mapped)), mMemory(std::move(memory)) {}
+
+ // Factory function for TestAshmem; prefer this over the raw constructor
+ static std::unique_ptr<TestAshmem> createFrom(const test_helper::TestBuffer& buffer) {
+ return createFrom(buffer.get<void>(), buffer.size());
+ }
+
+ // Factory function for TestAshmem; prefer this over the raw constructor
+ static std::unique_ptr<TestAshmem> createFrom(const void* data, uint32_t length) {
+ // Create ashmem-based fd.
+ int fd = ASharedMemory_create(nullptr, length);
+ if (fd <= 0) return nullptr;
+ ::android::base::unique_fd managedFd(fd);
+
+ // Map and populate ashmem.
+ auto mappedFile =
+ ::android::base::MappedFile::FromFd(fd, 0, length, PROT_READ | PROT_WRITE);
+ if (!mappedFile) return nullptr;
+ memcpy(mappedFile->data(), data, length);
+
+ // Create NNAPI memory object.
+ test_wrapper::Memory memory(length, PROT_READ | PROT_WRITE, fd, 0);
+ if (!memory.isValid()) return nullptr;
+
+ // Store everything in managing class.
+ return std::make_unique<TestAshmem>(std::move(managedFd), std::move(mappedFile),
+ std::move(memory));
+ }
+
+ size_t size() { return mMapped->size(); }
+ test_wrapper::Memory* get() { return &mMemory; }
+
+ template <typename Type>
+ Type* dataAs() {
+ return static_cast<Type*>(static_cast<void*>(mMapped->data()));
+ }
+
+ private:
+ ::android::base::unique_fd mFd;
+ std::unique_ptr<::android::base::MappedFile> mMapped;
+ test_wrapper::Memory mMemory;
+};
+
+} // namespace android::nn
+
+#endif // ANDROID_FRAMEWORKS_ML_NN_RUNTIME_TEST_TEST_UTILS_H