Modifying the IBackendProfilingContext interface to return a bool on
EnableProfiling and adding error checking to the Runtime
Invocation

Signed-off-by: David Monahan <david.monahan@arm.com>
Change-Id: I65b8bb16c6f1c7d668de31238ce0408a48974997
diff --git a/include/armnn/Exceptions.hpp b/include/armnn/Exceptions.hpp
index 066f59f..cb62079 100644
--- a/include/armnn/Exceptions.hpp
+++ b/include/armnn/Exceptions.hpp
@@ -137,6 +137,12 @@
     using Exception::Exception;
 };
 
+class BackendProfilingException : public Exception
+{
+public:
+    using Exception::Exception;
+};
+
 template <typename ExceptionType>
 void ConditionalThrow(bool condition, const std::string& message)
 {
diff --git a/include/armnn/backends/profiling/IBackendProfilingContext.hpp b/include/armnn/backends/profiling/IBackendProfilingContext.hpp
index 3f54d31..063ebc9 100644
--- a/include/armnn/backends/profiling/IBackendProfilingContext.hpp
+++ b/include/armnn/backends/profiling/IBackendProfilingContext.hpp
@@ -21,7 +21,7 @@
     virtual uint16_t RegisterCounters(uint16_t currentMaxGlobalCounterID) = 0;
     virtual Optional<std::string> ActivateCounters(uint32_t capturePeriod, const std::vector<uint16_t>& counterIds) = 0;
     virtual std::vector<Timestamp> ReportCounterValues() = 0;
-    virtual void EnableProfiling(bool flag) = 0;
+    virtual bool EnableProfiling(bool flag) = 0;
 };
 
 using IBackendProfilingContextUniquePtr = std::unique_ptr<IBackendProfilingContext>;
diff --git a/src/armnn/Runtime.cpp b/src/armnn/Runtime.cpp
index c1416f9..b1017c5 100644
--- a/src/armnn/Runtime.cpp
+++ b/src/armnn/Runtime.cpp
@@ -192,8 +192,16 @@
             // Backends that don't support profiling will return a null profiling context.
             if (profilingContext)
             {
-                // Pass the context onto the profiling service.
-                armnn::profiling::ProfilingService::Instance().AddBackendProfilingContext(id, profilingContext);
+                // Enable profiling on the backend and assert that it returns true
+                if(profilingContext->EnableProfiling(true))
+                {
+                    // Pass the context onto the profiling service.
+                    armnn::profiling::ProfilingService::Instance().AddBackendProfilingContext(id, profilingContext);
+                }
+                else
+                {
+                    throw BackendProfilingException("Unable to enable profiling on Backend Id: " + id.Get());
+                }
             }
         }
         catch (const BackendUnavailableException&)
diff --git a/src/backends/backendsCommon/test/MockBackend.hpp b/src/backends/backendsCommon/test/MockBackend.hpp
index 3227ce5..6e415b9 100644
--- a/src/backends/backendsCommon/test/MockBackend.hpp
+++ b/src/backends/backendsCommon/test/MockBackend.hpp
@@ -88,8 +88,10 @@
         return { profiling::Timestamp{ timestamp, counterValues } };
     }
 
-    void EnableProfiling(bool)
-    {}
+    bool EnableProfiling(bool)
+    {
+        return true;
+    }
 
 private:
     IBackendInternal::IBackendProfilingPtr m_BackendProfiling;