IVGCVSW-6470 Create MemoryStrategyBenchmark

 * Refactor the strategy library to be more generic
 * Shorten the names of the current strategies
 * Change validatorStrat to throw exceptions

Change-Id: I0d9c9ef609b2d8675e5788610d1accac6767c660
Signed-off-by: Finn Williams <finwil01@e127804.cambridge.arm.com>
Signed-off-by: Jim Flynn <jim.flynn@arm.com>
diff --git a/src/armnn/Runtime.cpp b/src/armnn/Runtime.cpp
index ca28199..9e212306 100644
--- a/src/armnn/Runtime.cpp
+++ b/src/armnn/Runtime.cpp
@@ -12,7 +12,7 @@
 
 #include <armnn/backends/IBackendContext.hpp>
 #include <backendsCommon/DynamicBackendUtils.hpp>
-#include <backendsCommon/MemoryOptimizerStrategyLibrary.hpp>
+#include <backendsCommon/memoryOptimizerStrategyLibrary/MemoryOptimizerStrategyLibrary.hpp>
 #include <armnn/utility/PolymorphicDowncast.hpp>
 
 #include <common/include/LabelsAndEventClasses.hpp>
@@ -425,11 +425,33 @@
                 });
                 if (memoryOptimizerStrategyName != "")
                 {
-                    MemoryOptimizerStrategyLibrary memoryOptimizerStrategyLibrary;
-                    if (memoryOptimizerStrategyLibrary.SetMemoryOptimizerStrategy(id, memoryOptimizerStrategyName))
+                    std::shared_ptr<IMemoryOptimizerStrategy> strategy =
+                            GetMemoryOptimizerStrategy(memoryOptimizerStrategyName);
+
+                    if (!strategy)
                     {
-                        ARMNN_LOG(info) << "MemoryOptimizerStrategy  "
-                                        << memoryOptimizerStrategyName << " set for the backend " << id << ".";
+                        ARMNN_LOG(warning) << "MemoryOptimizerStrategy: " << memoryOptimizerStrategyName
+                                           << " was not found \n";
+                    }
+                    else
+                    {
+                        using BackendCapability = BackendOptions::BackendOption;
+                        auto strategyType = GetMemBlockStrategyTypeName(strategy->GetMemBlockStrategyType());
+                        BackendCapability memOptimizeStrategyCapability {strategyType, true};
+                        if (HasCapability(memOptimizeStrategyCapability, id))
+                        {
+                            BackendRegistryInstance().RegisterMemoryOptimizerStrategy(id, strategy);
+
+                            ARMNN_LOG(info) << "MemoryOptimizerStrategy: "
+                                            << memoryOptimizerStrategyName << " set for the backend " << id << ".";
+                        }
+                        else
+                        {
+                            ARMNN_LOG(warning) << "Backend "
+                                               << id
+                                               << " does not have multi-axis packing capability and cannot support"
+                                               << "MemoryOptimizerStrategy: " << memoryOptimizerStrategyName << "\n";
+                        }
                     }
                 }
             }