IVGCVSW-2056+IVGCVSW-2064 : move ClContextControl to the ClBackend

* add IBackendContext interface
* add ClBackendContext implementation

Change-Id: I13e4d12b73d4c7775069587675276f7cee7d630b
diff --git a/src/backends/backendsCommon/BackendRegistry.hpp b/src/backends/backendsCommon/BackendRegistry.hpp
index 145da88..4b20cac 100644
--- a/src/backends/backendsCommon/BackendRegistry.hpp
+++ b/src/backends/backendsCommon/BackendRegistry.hpp
@@ -4,14 +4,13 @@
 //
 #pragma once
 
-#include "IBackendInternal.hpp"
 #include "RegistryCommon.hpp"
-
 #include <armnn/Types.hpp>
 
 namespace armnn
 {
-
+class IBackendInternal;
+using IBackendInternalUniquePtr = std::unique_ptr<IBackendInternal>;
 using BackendRegistry = RegistryCommon<IBackendInternal, IBackendInternalUniquePtr>;
 
 BackendRegistry& BackendRegistryInstance();
@@ -22,4 +21,4 @@
     static const char * Name() { return "IBackend"; }
 };
 
-} // namespace armnn
+} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/backendsCommon/CMakeLists.txt b/src/backends/backendsCommon/CMakeLists.txt
index 9dd9b92..f4ab45f 100644
--- a/src/backends/backendsCommon/CMakeLists.txt
+++ b/src/backends/backendsCommon/CMakeLists.txt
@@ -10,6 +10,7 @@
     CpuTensorHandleFwd.hpp
     CpuTensorHandle.hpp
     IBackendInternal.hpp
+    IBackendContext.hpp
     ILayerSupport.cpp
     ITensorHandle.hpp
     LayerSupportRegistry.cpp
diff --git a/src/backends/backendsCommon/IBackendContext.hpp b/src/backends/backendsCommon/IBackendContext.hpp
new file mode 100644
index 0000000..de98249
--- /dev/null
+++ b/src/backends/backendsCommon/IBackendContext.hpp
@@ -0,0 +1,32 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#pragma once
+
+#include <armnn/IRuntime.hpp>
+#include <memory>
+
+namespace armnn
+{
+
+class IBackendContext
+{
+protected:
+    IBackendContext(const IRuntime::CreationOptions&) {}
+
+public:
+    // Before and after Load network events
+    virtual bool BeforeLoadNetwork(NetworkId networkId) = 0;
+    virtual bool AfterLoadNetwork(NetworkId networkId) = 0;
+
+    // Before and after Unload network events
+    virtual bool BeforeUnloadNetwork(NetworkId networkId) = 0;
+    virtual bool AfterUnloadNetwork(NetworkId networkId) = 0;
+
+    virtual ~IBackendContext() {}
+};
+
+using IBackendContextUniquePtr = std::unique_ptr<IBackendContext>;
+
+} // namespace armnn
\ No newline at end of file
diff --git a/src/backends/backendsCommon/IBackendInternal.hpp b/src/backends/backendsCommon/IBackendInternal.hpp
index 7e44dbd..fede366 100644
--- a/src/backends/backendsCommon/IBackendInternal.hpp
+++ b/src/backends/backendsCommon/IBackendInternal.hpp
@@ -5,10 +5,12 @@
 #pragma once
 
 #include <armnn/Types.hpp>
+#include <armnn/IRuntime.hpp>
 
 namespace armnn
 {
 class IWorkloadFactory;
+class IBackendContext;
 
 class IBackendInternal : public IBackend
 {
@@ -23,7 +25,10 @@
     ~IBackendInternal() override = default;
 
     using IWorkloadFactoryPtr = std::unique_ptr<IWorkloadFactory>;
+    using IBackendContextPtr = std::unique_ptr<IBackendContext>;
+
     virtual IWorkloadFactoryPtr CreateWorkloadFactory() const = 0;
+    virtual IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const = 0;
 };
 
 using IBackendInternalUniquePtr = std::unique_ptr<IBackendInternal>;
diff --git a/src/backends/backendsCommon/test/BackendRegistryTests.cpp b/src/backends/backendsCommon/test/BackendRegistryTests.cpp
index 0bc655b..26175e0 100644
--- a/src/backends/backendsCommon/test/BackendRegistryTests.cpp
+++ b/src/backends/backendsCommon/test/BackendRegistryTests.cpp
@@ -6,6 +6,7 @@
 #include <armnn/Types.hpp>
 
 #include <backendsCommon/BackendRegistry.hpp>
+#include <backendsCommon/IBackendInternal.hpp>
 
 #include <boost/test/unit_test.hpp>