IVGCVSW-5203 Fix Dynamic Sample Backend build

Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com>
Change-Id: Ie2a8b0e4f439500a1978f66dd332281220c75a82
diff --git a/src/dynamic/sample/SampleDynamicBackend.cpp b/src/dynamic/sample/SampleDynamicBackend.cpp
index 2ef8faa..7a3475b 100644
--- a/src/dynamic/sample/SampleDynamicBackend.cpp
+++ b/src/dynamic/sample/SampleDynamicBackend.cpp
@@ -44,9 +44,15 @@
     }
 
     IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory(
-        class TensorHandleFactoryRegistry& /*tensorHandleFactoryRegistry*/) const override
+        class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const override
     {
-        return IWorkloadFactoryPtr{};
+        auto memoryManager = std::make_shared<SampleMemoryManager>();
+
+        tensorHandleFactoryRegistry.RegisterMemoryManager(memoryManager);
+        tensorHandleFactoryRegistry.RegisterFactory(std::make_unique<SampleDynamicTensorHandleFactory>(memoryManager));
+
+        return std::make_unique<SampleDynamicWorkloadFactory>(
+            PolymorphicPointerDowncast<SampleMemoryManager>(memoryManager));
     }
 
     IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext(
@@ -80,7 +86,7 @@
         return optimizationViews;
     }
 
-    void RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry) const override
+    void RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry) override
     {
         auto memoryManager = std::make_shared<SampleMemoryManager>();
 
diff --git a/src/dynamic/sample/SampleTensorHandle.cpp b/src/dynamic/sample/SampleTensorHandle.cpp
index 48f8cf4..fb4eddc 100644
--- a/src/dynamic/sample/SampleTensorHandle.cpp
+++ b/src/dynamic/sample/SampleTensorHandle.cpp
@@ -21,14 +21,13 @@
 }
 
 SampleTensorHandle::SampleTensorHandle(const TensorInfo& tensorInfo,
-                                       std::shared_ptr<SampleMemoryManager> &memoryManager,
                                        MemorySourceFlags importFlags)
     : m_TensorInfo(tensorInfo),
-      m_MemoryManager(memoryManager),
+      m_MemoryManager(nullptr),
       m_Pool(nullptr),
       m_UnmanagedMemory(nullptr),
       m_ImportFlags(importFlags),
-      m_Imported(false)
+      m_Imported(true)
 {
 
 }
@@ -134,4 +133,18 @@
     return false;
 }
 
+void SampleTensorHandle::CopyOutTo(void* dest) const
+{
+    const void *src = GetPointer();
+    ARMNN_ASSERT(src);
+    memcpy(dest, src, m_TensorInfo.GetNumBytes());
+}
+
+void SampleTensorHandle::CopyInFrom(const void* src)
+{
+    void *dest = GetPointer();
+    ARMNN_ASSERT(dest);
+    memcpy(dest, src, m_TensorInfo.GetNumBytes());
+}
+
 }
diff --git a/src/dynamic/sample/SampleTensorHandle.hpp b/src/dynamic/sample/SampleTensorHandle.hpp
index c08edc6..2a44ed6 100644
--- a/src/dynamic/sample/SampleTensorHandle.hpp
+++ b/src/dynamic/sample/SampleTensorHandle.hpp
@@ -17,9 +17,7 @@
 public:
     SampleTensorHandle(const TensorInfo& tensorInfo, std::shared_ptr<SampleMemoryManager> &memoryManager);
 
-    SampleTensorHandle(const TensorInfo& tensorInfo,
-                       std::shared_ptr<SampleMemoryManager> &memoryManager,
-                       MemorySourceFlags importFlags);
+    SampleTensorHandle(const TensorInfo& tensorInfo, MemorySourceFlags importFlags);
 
     ~SampleTensorHandle();
 
@@ -61,6 +59,10 @@
     virtual bool Import(void* memory, MemorySource source) override;
 
 private:
+    // Only used for testing
+    void CopyOutTo(void*) const override;
+    void CopyInFrom(const void*) override;
+
     void* GetPointer() const;
 
     SampleTensorHandle(const SampleTensorHandle& other) = delete; // noncopyable