From 02356de9da5d5480b4b9b413d1b6b33daf7ab717 Mon Sep 17 00:00:00 2001 From: Keith Davis Date: Mon, 26 Aug 2019 18:28:17 +0100 Subject: IVGCVSW-3674 Create basic ProfileService class Signed-off-by: Keith Davis Change-Id: I5bed5196c256883fb704fe14b60bb8f7a77cc9df --- src/profiling/ProfilingService.cpp | 55 +++++++++++++++++++++++++++++++++++ src/profiling/ProfilingService.hpp | 39 +++++++++++++++++++++++++ src/profiling/test/ProfilingTests.cpp | 36 +++++++++++++++++++++++ 3 files changed, 130 insertions(+) create mode 100644 src/profiling/ProfilingService.cpp create mode 100644 src/profiling/ProfilingService.hpp (limited to 'src/profiling') diff --git a/src/profiling/ProfilingService.cpp b/src/profiling/ProfilingService.cpp new file mode 100644 index 0000000000..eaaded54d0 --- /dev/null +++ b/src/profiling/ProfilingService.cpp @@ -0,0 +1,55 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "ProfilingService.hpp" + +namespace armnn +{ + +namespace profiling +{ + +ProfilingService::ProfilingService(const Runtime::CreationOptions::ExternalProfilingOptions& options) + : m_Options(options) +{ + Initialise(); +} + +void ProfilingService::Initialise() +{ + if (m_Options.m_EnableProfiling == true) + { + // Setup Counter Directory - this should only be created if profiling is enabled + // Setup Counter meta + + // For now until CounterDirectory setup is implemented, change m_State once everything initialised + m_State.TransitionToState(ProfilingState::NotConnected); + } +} + +void ProfilingService::Run() +{ + if (m_State.GetCurrentState() == ProfilingState::NotConnected) + { + // Since GetProfilingConnection is not implemented, if !NULL, + // then change to WaitingForAck. This will need to change once there is implementation + // for the IProfilingConnection + if (!m_Factory.GetProfilingConnection(m_Options)) + { + m_State.TransitionToState(ProfilingState::WaitingForAck); + } + } else if (m_State.GetCurrentState() == ProfilingState::Uninitialised && m_Options.m_EnableProfiling == true) + { + Initialise(); + } +} + +ProfilingState ProfilingService::GetCurrentState() const +{ + return m_State.GetCurrentState(); +} +} // namespace profiling + +} // namespace armnn \ No newline at end of file diff --git a/src/profiling/ProfilingService.hpp b/src/profiling/ProfilingService.hpp new file mode 100644 index 0000000000..33f1135b87 --- /dev/null +++ b/src/profiling/ProfilingService.hpp @@ -0,0 +1,39 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include "ProfilingStateMachine.hpp" +#include "ProfilingConnectionFactory.hpp" + +namespace armnn +{ + +namespace profiling +{ + +class ProfilingService +{ +public: + ProfilingService(const Runtime::CreationOptions::ExternalProfilingOptions& options); + ~ProfilingService() = default; + + void Run(); + + ProfilingState GetCurrentState() const; + + // Options are public to allow profiling to be turned on at runtime + Runtime::CreationOptions::ExternalProfilingOptions m_Options; + +private: + void Initialise(); + + ProfilingStateMachine m_State; + ProfilingConnectionFactory m_Factory; +}; + +} // namespace profiling + +} // namespace armnn \ No newline at end of file diff --git a/src/profiling/test/ProfilingTests.cpp b/src/profiling/test/ProfilingTests.cpp index 58609528e4..57d8dd1ace 100644 --- a/src/profiling/test/ProfilingTests.cpp +++ b/src/profiling/test/ProfilingTests.cpp @@ -12,6 +12,8 @@ #include "../PacketVersionResolver.hpp" #include "../ProfilingStateMachine.hpp" +#include "../ProfilingService.hpp" + #include #include @@ -450,7 +452,41 @@ BOOST_AUTO_TEST_CASE(CheckCaptureDataHolder) BOOST_CHECK(copyConstructedCaptureData.GetCapturePeriod() == 3); BOOST_CHECK(copyConstructedCaptureData.GetCounterIds() == counterIds3); +} + +BOOST_AUTO_TEST_CASE(CheckProfilingServiceDisabled) +{ + armnn::Runtime::CreationOptions::ExternalProfilingOptions options; + ProfilingService service(options); + BOOST_CHECK(service.GetCurrentState() == ProfilingState::Uninitialised); + service.Run(); + BOOST_CHECK(service.GetCurrentState() == ProfilingState::Uninitialised); +} + +BOOST_AUTO_TEST_CASE(CheckProfilingServiceEnabled) +{ + armnn::Runtime::CreationOptions::ExternalProfilingOptions options; + options.m_EnableProfiling = true; + ProfilingService service(options); + BOOST_CHECK(service.GetCurrentState() == ProfilingState::NotConnected); + service.Run(); + BOOST_CHECK(service.GetCurrentState() == ProfilingState::WaitingForAck); +} + + +BOOST_AUTO_TEST_CASE(CheckProfilingServiceEnabledRuntime) +{ + armnn::Runtime::CreationOptions::ExternalProfilingOptions options; + ProfilingService service(options); + BOOST_CHECK(service.GetCurrentState() == ProfilingState::Uninitialised); + service.Run(); + BOOST_CHECK(service.GetCurrentState() == ProfilingState::Uninitialised); + service.m_Options.m_EnableProfiling = true; + service.Run(); + BOOST_CHECK(service.GetCurrentState() == ProfilingState::NotConnected); + service.Run(); + BOOST_CHECK(service.GetCurrentState() == ProfilingState::WaitingForAck); } BOOST_AUTO_TEST_SUITE_END() -- cgit v1.2.1