From 45a736263e117b484528e6dee05c549beae721b4 Mon Sep 17 00:00:00 2001 From: Finn Williams Date: Fri, 15 May 2020 18:41:05 +0100 Subject: IVGCVSW-4834 Add calls to increment REGISTERED_BACKENDS and UNREGISTERED_BACKENDS Signed-off-by: Finn Williams Change-Id: I3600dd15f97ccd4ab745deb87d06ba978e2a0b11 --- include/armnn/BackendRegistry.hpp | 7 +++++++ src/armnn/BackendRegistry.cpp | 20 ++++++++++++++++++++ src/armnn/Runtime.cpp | 3 +++ .../backendsCommon/test/BackendProfilingTests.cpp | 2 +- src/profiling/ProfilingService.cpp | 4 ++++ 5 files changed, 35 insertions(+), 1 deletion(-) diff --git a/include/armnn/BackendRegistry.hpp b/include/armnn/BackendRegistry.hpp index 1aaa11c55c..fe6451cde0 100644 --- a/include/armnn/BackendRegistry.hpp +++ b/include/armnn/BackendRegistry.hpp @@ -6,6 +6,7 @@ #include #include +#include #include #include @@ -14,6 +15,10 @@ namespace armnn { +namespace profiling +{ + class ProfilingService; +} class IBackendInternal; using IBackendInternalUniquePtr = std::unique_ptr; @@ -29,6 +34,7 @@ public: size_t Size() const; BackendIdSet GetBackendIds() const; std::string GetBackendIdsAsString() const; + void SetProfilingService(armnn::Optional profilingService); BackendRegistry() {} virtual ~BackendRegistry() {} @@ -56,6 +62,7 @@ private: BackendRegistry& operator=(const BackendRegistry&) = delete; FactoryStorage m_Factories; + armnn::Optional m_ProfilingService; }; BackendRegistry& BackendRegistryInstance(); diff --git a/src/armnn/BackendRegistry.cpp b/src/armnn/BackendRegistry.cpp index a79cdd0bb2..ff63c8236a 100644 --- a/src/armnn/BackendRegistry.cpp +++ b/src/armnn/BackendRegistry.cpp @@ -5,6 +5,7 @@ #include #include +#include namespace armnn { @@ -24,11 +25,25 @@ void BackendRegistry::Register(const BackendId& id, BackendRegistry::FactoryFunc CHECK_LOCATION()); } m_Factories[id] = factory; + + if (m_ProfilingService.has_value()) + { + if (m_ProfilingService.has_value() && m_ProfilingService.value().IsProfilingEnabled()) + { + m_ProfilingService.value().IncrementCounterValue(armnn::profiling::REGISTERED_BACKENDS); + } + } + } void BackendRegistry::Deregister(const BackendId& id) { m_Factories.erase(id); + + if (m_ProfilingService.has_value() && m_ProfilingService.value().IsProfilingEnabled()) + { + m_ProfilingService.value().IncrementCounterValue(armnn::profiling::UNREGISTERED_BACKENDS); + } } bool BackendRegistry::IsBackendRegistered(const BackendId& id) const @@ -86,5 +101,10 @@ void BackendRegistry::Swap(BackendRegistry& instance, BackendRegistry::FactorySt std::swap(instance.m_Factories, other); } +void BackendRegistry::SetProfilingService(armnn::Optional profilingService) +{ + m_ProfilingService = profilingService; +} + } // namespace armnn diff --git a/src/armnn/Runtime.cpp b/src/armnn/Runtime.cpp index 483eea7165..dbdd409784 100644 --- a/src/armnn/Runtime.cpp +++ b/src/armnn/Runtime.cpp @@ -220,6 +220,7 @@ Runtime::Runtime(const CreationOptions& options) } } + BackendRegistryInstance().SetProfilingService(m_ProfilingService); // pass configuration info to the profiling service m_ProfilingService.ConfigureProfilingService(options.m_ProfilingOptions); @@ -269,6 +270,8 @@ Runtime::~Runtime() DynamicBackendUtils::DeregisterDynamicBackends(m_DeviceSpec.GetDynamicBackends()); m_DeviceSpec.ClearDynamicBackends(); m_BackendContexts.clear(); + + BackendRegistryInstance().SetProfilingService(armnn::EmptyOptional()); } LoadedNetwork* Runtime::GetLoadedNetworkPtr(NetworkId networkId) const diff --git a/src/backends/backendsCommon/test/BackendProfilingTests.cpp b/src/backends/backendsCommon/test/BackendProfilingTests.cpp index 52b6e239f7..66f99bea8c 100644 --- a/src/backends/backendsCommon/test/BackendProfilingTests.cpp +++ b/src/backends/backendsCommon/test/BackendProfilingTests.cpp @@ -118,7 +118,7 @@ BOOST_AUTO_TEST_CASE(BackendProfilingCounterRegisterMockBackendTest) { // Reset the profiling service to the uninitialized state armnn::IRuntime::CreationOptions options; - options.m_ProfilingOptions.m_EnableProfiling = true;; + options.m_ProfilingOptions.m_EnableProfiling = true; armnn::MockBackendInitialiser initialiser; // Create a runtime diff --git a/src/profiling/ProfilingService.cpp b/src/profiling/ProfilingService.cpp index a26bba2e60..21972b4c7f 100644 --- a/src/profiling/ProfilingService.cpp +++ b/src/profiling/ProfilingService.cpp @@ -377,6 +377,10 @@ void ProfilingService::Initialize() std::string("backends")); ARMNN_ASSERT(registeredBackendsCounter); InitializeCounterValue(registeredBackendsCounter->m_Uid); + + // Due to backends being registered before the profiling service becomes active, + // we need to set the counter to the correct value here + SetCounterValue(armnn::profiling::REGISTERED_BACKENDS, static_cast(BackendRegistryInstance().Size())); } // Register a counter for the number of registered backends if (!m_CounterDirectory.IsCounterRegistered("Backends unregistered")) -- cgit v1.2.1