From 4af561666b0ce5c12164447a5f7eb9722abb85f8 Mon Sep 17 00:00:00 2001 From: Francis Murtagh Date: Tue, 20 Apr 2021 16:37:55 +0100 Subject: IVGCVSW-5816 Constant memory access * Add new class ManagedConstTensorHandle to Unmap when out of scope * Integrate into existing layers that have constants * Add unit tests Signed-off-by: Francis Murtagh Change-Id: I0a05e14e438804b37e9862e76b5ca329483f6b45 --- .../reference/test/RefTensorHandleTests.cpp | 33 ++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src/backends/reference') diff --git a/src/backends/reference/test/RefTensorHandleTests.cpp b/src/backends/reference/test/RefTensorHandleTests.cpp index 1ef6de9b32..b04d9d6c52 100644 --- a/src/backends/reference/test/RefTensorHandleTests.cpp +++ b/src/backends/reference/test/RefTensorHandleTests.cpp @@ -167,6 +167,39 @@ BOOST_AUTO_TEST_CASE(RefTensorHandleSupportsInPlaceComputation) ARMNN_ASSERT(!(handleFactory.SupportsInPlaceComputation())); } +BOOST_AUTO_TEST_CASE(TestManagedConstTensorHandle) +{ + // Initialize arguments + void* mem = nullptr; + TensorInfo info; + + // Use PassthroughCpuTensor as others are abstract + auto passThroughHandle = std::make_shared(info, mem); + + // Test managed handle is initialized with m_Mapped unset and once Map() called its set + ManagedConstTensorHandle managedHandle(passThroughHandle); + BOOST_CHECK(!managedHandle.IsMapped()); + managedHandle.Map(); + BOOST_CHECK(managedHandle.IsMapped()); + + // Test it can then be unmapped + managedHandle.Unmap(); + BOOST_CHECK(!managedHandle.IsMapped()); + + // Test member function + BOOST_CHECK(managedHandle.GetTensorInfo() == info); + + // Test that nullptr tensor handle doesn't get mapped + ManagedConstTensorHandle managedHandleNull(nullptr); + BOOST_CHECK(!managedHandleNull.IsMapped()); + BOOST_CHECK_THROW(managedHandleNull.Map(), armnn::Exception); + BOOST_CHECK(!managedHandleNull.IsMapped()); + + // Check Unmap() when m_Mapped already false + managedHandleNull.Unmap(); + BOOST_CHECK(!managedHandleNull.IsMapped()); +} + #if !defined(__ANDROID__) // Only run these tests on non Android platforms BOOST_AUTO_TEST_CASE(CheckSourceType) -- cgit v1.2.1