IVGCVSW-4394 Add CounterIdMap to Profiling Service

Change-Id: I416397a7855fe45319b4801252e141b78f0325f0
Signed-off-by: Jim Flynn <jim.flynn@arm.com>
diff --git a/Android.mk b/Android.mk
index 86f1602..9a38a72 100644
--- a/Android.mk
+++ b/Android.mk
@@ -184,6 +184,7 @@
         src/profiling/CommandHandlerRegistry.cpp \
         src/profiling/ConnectionAcknowledgedCommandHandler.cpp \
         src/profiling/CounterDirectory.cpp \
+        src/profiling/CounterIdMap.cpp \
         src/profiling/DirectoryCaptureCommandHandler.cpp \
         src/profiling/FileOnlyProfilingConnection.cpp \
         src/profiling/Holder.cpp \
diff --git a/src/profiling/CounterIdMap.cpp b/src/profiling/CounterIdMap.cpp
index a925fb9..8ee80f9 100644
--- a/src/profiling/CounterIdMap.cpp
+++ b/src/profiling/CounterIdMap.cpp
@@ -4,8 +4,8 @@
 //
 #include "CounterIdMap.hpp"
 #include "armnn/BackendId.hpp"
-#include <map>
 #include <armnn/Exceptions.hpp>
+#include <map>
 
 namespace armnn
 {
@@ -21,7 +21,7 @@
     m_BackendCounterIdMap[backendIdPair] = globalCounterId;
 }
 
-uint16_t CounterIdMap::GetGlobalId(uint16_t backendCounterId, const armnn::BackendId& backendId)
+uint16_t CounterIdMap::GetGlobalId(uint16_t backendCounterId, const armnn::BackendId& backendId) const
 {
     std::pair<uint16_t, armnn::BackendId> backendIdPair(backendCounterId, backendId);
     auto it = m_BackendCounterIdMap.find(backendIdPair);
@@ -34,7 +34,7 @@
     return it->second;
 }
 
-const std::pair<uint16_t, armnn::BackendId>& CounterIdMap::GetBackendId(uint16_t globalCounterId)
+const std::pair<uint16_t, armnn::BackendId>& CounterIdMap::GetBackendId(uint16_t globalCounterId) const
 {
     auto it = m_GlobalCounterIdMap.find(globalCounterId);
     if (it == m_GlobalCounterIdMap.end())
@@ -47,4 +47,4 @@
 }
 
 }    // namespace profiling
-}    // namespace armnn
\ No newline at end of file
+}    // namespace armnn
diff --git a/src/profiling/CounterIdMap.hpp b/src/profiling/CounterIdMap.hpp
index e401491..cb6b9c9 100644
--- a/src/profiling/CounterIdMap.hpp
+++ b/src/profiling/CounterIdMap.hpp
@@ -12,17 +12,38 @@
 namespace profiling
 {
 
-class CounterIdMap
+class ICounterMappings
+{
+public:
+    virtual uint16_t GetGlobalId(uint16_t backendCounterId, const armnn::BackendId& backendId) const = 0;
+    virtual const std::pair<uint16_t, armnn::BackendId>& GetBackendId(uint16_t globalCounterId) const = 0;
+    virtual ~ICounterMappings() {}
+};
+
+class IRegisterCounterMapping
+{
+public:
+    virtual void RegisterMapping(uint16_t globalCounterId,
+                                 uint16_t backendCounterId,
+                                 const armnn::BackendId& backendId) = 0;
+    virtual ~IRegisterCounterMapping() {}
+};
+
+class CounterIdMap : public ICounterMappings, public IRegisterCounterMapping
 {
 
 public:
-    void RegisterMapping(uint16_t globalCounterId, uint16_t backendCounterId, const armnn::BackendId& backendId);
-    uint16_t GetGlobalId(uint16_t backendCounterId, const armnn::BackendId& backendId);
-    const std::pair<uint16_t, armnn::BackendId>& GetBackendId(uint16_t globalCounterId);
+    CounterIdMap() = default;
+    virtual ~CounterIdMap() {}
+    void RegisterMapping(uint16_t globalCounterId,
+                         uint16_t backendCounterId,
+                         const armnn::BackendId& backendId) override;
+    uint16_t GetGlobalId(uint16_t backendCounterId, const armnn::BackendId& backendId) const override;
+    const std::pair<uint16_t, armnn::BackendId>& GetBackendId(uint16_t globalCounterId) const override;
 private:
     std::map<uint16_t, std::pair<uint16_t, armnn::BackendId>> m_GlobalCounterIdMap;
     std::map<std::pair<uint16_t, armnn::BackendId>, uint16_t> m_BackendCounterIdMap;
 };
 
 }    // namespace profiling
-}    // namespace armnn
\ No newline at end of file
+}    // namespace armnn
diff --git a/src/profiling/ProfilingService.cpp b/src/profiling/ProfilingService.cpp
index cc41fb2..b06f149 100644
--- a/src/profiling/ProfilingService.cpp
+++ b/src/profiling/ProfilingService.cpp
@@ -209,6 +209,16 @@
     return counterValuePtr->load(std::memory_order::memory_order_relaxed);
 }
 
+const ICounterMappings& ProfilingService::GetCounterMappings() const
+{
+    return m_CounterIdMap;
+}
+
+IRegisterCounterMapping& ProfilingService::GetCounterMappingRegistrar()
+{
+    return m_CounterIdMap;
+}
+
 void ProfilingService::SetCounterValue(uint16_t counterUid, uint32_t value)
 {
     CheckCounterUid(counterUid);
diff --git a/src/profiling/ProfilingService.hpp b/src/profiling/ProfilingService.hpp
index 24748bb..9cf7545 100644
--- a/src/profiling/ProfilingService.hpp
+++ b/src/profiling/ProfilingService.hpp
@@ -9,6 +9,7 @@
 #include "CommandHandler.hpp"
 #include "ConnectionAcknowledgedCommandHandler.hpp"
 #include "CounterDirectory.hpp"
+#include "CounterIdMap.hpp"
 #include "ICounterValues.hpp"
 #include "PeriodicCounterCapture.hpp"
 #include "PeriodicCounterSelectionCommandHandler.hpp"
@@ -61,12 +62,16 @@
     // Disconnects the profiling service from the external server
     void Disconnect();
 
-    // Getters for the profiling service state
     const ICounterDirectory& GetCounterDirectory() const;
     ProfilingState GetCurrentState() const;
     bool IsCounterRegistered(uint16_t counterUid) const override;
     uint32_t GetCounterValue(uint16_t counterUid) const override;
     uint16_t GetCounterCount() const override;
+    // counter global/backend mapping functions
+    const ICounterMappings& GetCounterMappings() const;
+    IRegisterCounterMapping& GetCounterMappingRegistrar();
+
+    // Getters for the profiling service state
     bool IsProfilingEnabled();
 
     // Setters for the profiling service state
@@ -105,6 +110,7 @@
     // Profiling service components
     ExternalProfilingOptions m_Options;
     CounterDirectory m_CounterDirectory;
+    CounterIdMap m_CounterIdMap;
     IProfilingConnectionFactoryPtr m_ProfilingConnectionFactory;
     IProfilingConnectionPtr m_ProfilingConnection;
     ProfilingStateMachine m_StateMachine;