From 672d06eac5b0842c22f9f219e9b65efcd5883d33 Mon Sep 17 00:00:00 2001 From: Jim Flynn Date: Tue, 15 Oct 2019 10:18:11 +0100 Subject: IVGCVSW-3948 Add Startup method to Profiling Change-Id: I591e84048775278bfc728e1b0c189ff4cf2d350b Signed-off-by: Jim Flynn --- src/profiling/ProfilingService.cpp | 50 +++++++++++++++++++++++++++++++++++ src/profiling/ProfilingService.hpp | 3 +++ src/profiling/test/ProfilingTests.cpp | 27 +++++++++++++++++++ 3 files changed, 80 insertions(+) (limited to 'src/profiling') diff --git a/src/profiling/ProfilingService.cpp b/src/profiling/ProfilingService.cpp index b481695d49..b87773fc86 100644 --- a/src/profiling/ProfilingService.cpp +++ b/src/profiling/ProfilingService.cpp @@ -28,6 +28,56 @@ void ProfilingService::ResetExternalProfilingOptions(const ExternalProfilingOpti } } +ProfilingState ProfilingService::ConfigureProfilingService( + const ExternalProfilingOptions& options, + bool resetProfilingService) +{ + ResetExternalProfilingOptions(options, resetProfilingService); + ProfilingState currentState = m_StateMachine.GetCurrentState(); + if (options.m_EnableProfiling) + { + switch (currentState) + { + case ProfilingState::Uninitialised: + Update(); // should transition to NotConnected + Update(); // will either stay in NotConnected because there is no server + // or will enter WaitingForAck. + currentState = m_StateMachine.GetCurrentState(); + if (currentState == ProfilingState::WaitingForAck) + { + Update(); // poke it again to send out the metadata packet + } + currentState = m_StateMachine.GetCurrentState(); + return currentState; + case ProfilingState::NotConnected: + Update(); // will either stay in NotConnected because there is no server + // or will enter WaitingForAck + currentState = m_StateMachine.GetCurrentState(); + if (currentState == ProfilingState::WaitingForAck) + { + Update(); // poke it again to send out the metadata packet + } + currentState = m_StateMachine.GetCurrentState(); + return currentState; + default: + return currentState; + } + } + else + { + // Make sure profiling is shutdown + switch (currentState) + { + case ProfilingState::Uninitialised: + case ProfilingState::NotConnected: + return currentState; + default: + Stop(); + return m_StateMachine.GetCurrentState(); + } + } +} + void ProfilingService::Update() { if (!m_Options.m_EnableProfiling) diff --git a/src/profiling/ProfilingService.hpp b/src/profiling/ProfilingService.hpp index 1afcb1ca97..dda37dddf2 100644 --- a/src/profiling/ProfilingService.hpp +++ b/src/profiling/ProfilingService.hpp @@ -42,6 +42,9 @@ public: // Resets the profiling options, optionally clears the profiling service entirely void ResetExternalProfilingOptions(const ExternalProfilingOptions& options, bool resetProfilingService = false); + ProfilingState ConfigureProfilingService(const ExternalProfilingOptions& options, + bool resetProfilingService = false); + // Updates the profiling service, making it transition to a new state if necessary void Update(); diff --git a/src/profiling/test/ProfilingTests.cpp b/src/profiling/test/ProfilingTests.cpp index 033f64ae24..b32a55cc6d 100644 --- a/src/profiling/test/ProfilingTests.cpp +++ b/src/profiling/test/ProfilingTests.cpp @@ -3137,4 +3137,31 @@ BOOST_AUTO_TEST_CASE(CheckProfilingServiceGoodPerJobCounterSelectionPacket) profilingService.ResetExternalProfilingOptions(options, true); } +BOOST_AUTO_TEST_CASE(CheckConfigureProfilingServiceOn) +{ + armnn::Runtime::CreationOptions::ExternalProfilingOptions options; + options.m_EnableProfiling = true; + ProfilingService& profilingService = ProfilingService::Instance(); + BOOST_CHECK(profilingService.GetCurrentState() == ProfilingState::Uninitialised); + profilingService.ConfigureProfilingService(options); + // should get as far as NOT_CONNECTED + BOOST_CHECK(profilingService.GetCurrentState() == ProfilingState::NotConnected); + // Reset the profiling service to stop any running thread + options.m_EnableProfiling = false; + profilingService.ResetExternalProfilingOptions(options, true); +} + +BOOST_AUTO_TEST_CASE(CheckConfigureProfilingServiceOff) +{ + armnn::Runtime::CreationOptions::ExternalProfilingOptions options; + ProfilingService& profilingService = ProfilingService::Instance(); + BOOST_CHECK(profilingService.GetCurrentState() == ProfilingState::Uninitialised); + profilingService.ConfigureProfilingService(options); + // should not move from Uninitialised + BOOST_CHECK(profilingService.GetCurrentState() == ProfilingState::Uninitialised); + // Reset the profiling service to stop any running thread + options.m_EnableProfiling = false; + profilingService.ResetExternalProfilingOptions(options, true); +} + BOOST_AUTO_TEST_SUITE_END() -- cgit v1.2.1