IVGCVSW-5109 'Add SupportsInPlaceComputation to TensorHandleFactories'

* Added functionality to query if TensorHandleFactory supports InPlaceComputation

Signed-off-by: Sadik Armagan <sadik.armagan@arm.com>
Change-Id: Icf5bfc5f999fc5d03681dcb8cec88d921842458b
diff --git a/include/armnn/backends/ITensorHandleFactory.hpp b/include/armnn/backends/ITensorHandleFactory.hpp
index 9d8f0cd..ae2f44e 100644
--- a/include/armnn/backends/ITensorHandleFactory.hpp
+++ b/include/armnn/backends/ITensorHandleFactory.hpp
@@ -76,6 +76,8 @@
 
     virtual const FactoryId& GetId() const = 0;
 
+    virtual bool SupportsInPlaceComputation() const { return false; }
+
     virtual bool SupportsSubTensors() const = 0;
 
     virtual bool SupportsMapUnmap() const final { return true; }
diff --git a/src/backends/neon/NeonTensorHandleFactory.cpp b/src/backends/neon/NeonTensorHandleFactory.cpp
index ae6ab59..1dd8395 100644
--- a/src/backends/neon/NeonTensorHandleFactory.cpp
+++ b/src/backends/neon/NeonTensorHandleFactory.cpp
@@ -96,6 +96,11 @@
     return GetIdStatic();
 }
 
+bool NeonTensorHandleFactory::SupportsInPlaceComputation() const
+{
+    return true;
+}
+
 bool NeonTensorHandleFactory::SupportsSubTensors() const
 {
     return true;
diff --git a/src/backends/neon/NeonTensorHandleFactory.hpp b/src/backends/neon/NeonTensorHandleFactory.hpp
index 41875c9..954a714 100644
--- a/src/backends/neon/NeonTensorHandleFactory.hpp
+++ b/src/backends/neon/NeonTensorHandleFactory.hpp
@@ -61,6 +61,8 @@
 
     const FactoryId& GetId() const override;
 
+    bool SupportsInPlaceComputation() const override;
+
     bool SupportsSubTensors() const override;
 
     MemorySourceFlags GetExportFlags() const override;
diff --git a/src/backends/neon/test/NeonTensorHandleTests.cpp b/src/backends/neon/test/NeonTensorHandleTests.cpp
index 97c7dd3..3cea293 100644
--- a/src/backends/neon/test/NeonTensorHandleTests.cpp
+++ b/src/backends/neon/test/NeonTensorHandleTests.cpp
@@ -697,4 +697,13 @@
     memoryManager->Release();
 }
 
+BOOST_AUTO_TEST_CASE(NeonTensorHandleSupportsInPlaceComputation)
+{
+    std::shared_ptr<NeonMemoryManager> memoryManager = std::make_shared<NeonMemoryManager>();
+    NeonTensorHandleFactory handleFactory(memoryManager);
+
+    // NeonTensorHandleFactory supports InPlaceComputation
+    ARMNN_ASSERT(handleFactory.SupportsInPlaceComputation());
+}
+
 BOOST_AUTO_TEST_SUITE_END()
diff --git a/src/backends/reference/test/RefTensorHandleTests.cpp b/src/backends/reference/test/RefTensorHandleTests.cpp
index 3635a32..1ef6de9 100644
--- a/src/backends/reference/test/RefTensorHandleTests.cpp
+++ b/src/backends/reference/test/RefTensorHandleTests.cpp
@@ -158,6 +158,15 @@
     BOOST_CHECK(capabilities.empty());
 }
 
+BOOST_AUTO_TEST_CASE(RefTensorHandleSupportsInPlaceComputation)
+{
+    std::shared_ptr<RefMemoryManager> memoryManager = std::make_shared<RefMemoryManager>();
+    RefTensorHandleFactory handleFactory(memoryManager);
+
+    // RefTensorHandleFactory does not support InPlaceComputation
+    ARMNN_ASSERT(!(handleFactory.SupportsInPlaceComputation()));
+}
+
 #if !defined(__ANDROID__)
 // Only run these tests on non Android platforms
 BOOST_AUTO_TEST_CASE(CheckSourceType)