IVGCVSW-2066: Add IMemoryManager and integrate into the backends framework

Change-Id: I93223c8678165cbc3d39f461c36bb8610dc81c05
diff --git a/src/backends/backendsCommon/CMakeLists.txt b/src/backends/backendsCommon/CMakeLists.txt
index e6ac01c..1fe9888 100644
--- a/src/backends/backendsCommon/CMakeLists.txt
+++ b/src/backends/backendsCommon/CMakeLists.txt
@@ -12,6 +12,7 @@
     IBackendInternal.hpp
     IBackendContext.hpp
     ILayerSupport.cpp
+    IMemoryManager.hpp
     ITensorHandle.hpp
     MakeWorkloadHelper.hpp
     MemCopyWorkload.cpp
diff --git a/src/backends/backendsCommon/IBackendInternal.hpp b/src/backends/backendsCommon/IBackendInternal.hpp
index 9d649fc..b102d1a 100644
--- a/src/backends/backendsCommon/IBackendInternal.hpp
+++ b/src/backends/backendsCommon/IBackendInternal.hpp
@@ -12,6 +12,7 @@
 {
 class IWorkloadFactory;
 class IBackendContext;
+class IMemoryManager;
 class Optimization;
 class ILayerSupport;
 
@@ -33,8 +34,16 @@
     using Optimizations = std::vector<OptimizationPtr>;
     using ILayerSupportSharedPtr = std::shared_ptr<ILayerSupport>;
 
-    virtual IWorkloadFactoryPtr CreateWorkloadFactory() const = 0;
+    using IMemoryManagerUniquePtr = std::unique_ptr<IMemoryManager>;
+    using IMemoryManagerSharedPtr = std::shared_ptr<IMemoryManager>;
+
+    virtual IMemoryManagerUniquePtr CreateMemoryManager() const = 0;
+
+    virtual IWorkloadFactoryPtr CreateWorkloadFactory(
+        const IMemoryManagerSharedPtr& memoryManager = nullptr) const = 0;
+
     virtual IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const = 0;
+
     virtual Optimizations GetOptimizations() const = 0;
     virtual ILayerSupportSharedPtr GetLayerSupport() const = 0;
 };
diff --git a/src/backends/backendsCommon/IMemoryManager.hpp b/src/backends/backendsCommon/IMemoryManager.hpp
new file mode 100644
index 0000000..28b81e7
--- /dev/null
+++ b/src/backends/backendsCommon/IMemoryManager.hpp
@@ -0,0 +1,26 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include <memory>
+
+namespace armnn
+{
+
+class IMemoryManager
+{
+protected:
+    IMemoryManager() {}
+
+public:
+    virtual void Acquire() = 0;
+    virtual void Release() = 0;
+
+    virtual ~IMemoryManager() {}
+};
+
+using IMemoryManagerUniquePtr = std::unique_ptr<IMemoryManager>;
+
+} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/backendsCommon/test/CMakeLists.txt b/src/backends/backendsCommon/test/CMakeLists.txt
index ae94ad5..7419c14 100644
--- a/src/backends/backendsCommon/test/CMakeLists.txt
+++ b/src/backends/backendsCommon/test/CMakeLists.txt
@@ -32,6 +32,7 @@
     TensorCopyUtils.cpp
     TensorCopyUtils.hpp
     WorkloadDataValidation.cpp
+    WorkloadFactoryHelper.hpp
     WorkloadTestUtils.hpp
 )
 
diff --git a/src/backends/backendsCommon/test/LayerReleaseConstantDataTest.cpp b/src/backends/backendsCommon/test/LayerReleaseConstantDataTest.cpp
index fc32fdc..25873d8 100644
--- a/src/backends/backendsCommon/test/LayerReleaseConstantDataTest.cpp
+++ b/src/backends/backendsCommon/test/LayerReleaseConstantDataTest.cpp
@@ -35,8 +35,7 @@
 
 BOOST_AUTO_TEST_CASE(ReleaseBatchNormalizationLayerConstantDataTest)
 {
-    Graph             graph;
-    ClWorkloadFactory factory;
+    Graph graph;
 
     // create the layer we're testing
     BatchNormalizationDescriptor layerDesc;
@@ -82,8 +81,7 @@
 
  BOOST_AUTO_TEST_CASE(ReleaseConvolution2dLayerConstantDataTest)
  {
-     Graph             graph;
-     ClWorkloadFactory factory;
+     Graph graph;
 
      // create the layer we're testing
      Convolution2dDescriptor layerDesc;
@@ -127,8 +125,7 @@
 
 BOOST_AUTO_TEST_CASE(ReleaseDepthwiseConvolution2dLayerConstantDataTest)
 {
-    Graph             graph;
-    ClWorkloadFactory factory;
+    Graph graph;
 
     // create the layer we're testing
     DepthwiseConvolution2dDescriptor layerDesc;
@@ -169,8 +166,7 @@
 
 BOOST_AUTO_TEST_CASE(ReleaseFullyConnectedLayerConstantDataTest)
 {
-    Graph             graph;
-    ClWorkloadFactory factory;
+    Graph graph;
 
     // create the layer we're testing
     FullyConnectedDescriptor layerDesc;
diff --git a/src/backends/backendsCommon/test/WorkloadFactoryHelper.hpp b/src/backends/backendsCommon/test/WorkloadFactoryHelper.hpp
new file mode 100644
index 0000000..41bf54a
--- /dev/null
+++ b/src/backends/backendsCommon/test/WorkloadFactoryHelper.hpp
@@ -0,0 +1,12 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+namespace
+{
+
+template<typename WorkloadFactoryType> struct WorkloadFactoryHelper {};
+
+} // anonymous namespace
\ No newline at end of file