From: Keith Davis Date: Mon, 26 Aug 2019 17:28:17 +0000 (+0100) Subject: IVGCVSW-3674 Create basic ProfileService class X-Git-Tag: submit/tizen/20200316.035456~301 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=02356de9da5d5480b4b9b413d1b6b33daf7ab717;p=platform%2Fupstream%2Farmnn.git IVGCVSW-3674 Create basic ProfileService class Signed-off-by: Keith Davis Change-Id: I5bed5196c256883fb704fe14b60bb8f7a77cc9df --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 6f2a41c..e4ca1fc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -439,6 +439,8 @@ list(APPEND armnn_sources src/profiling/ProfilingUtils.cpp src/profiling/ProfilingStateMachine.cpp src/profiling/ProfilingStateMachine.hpp + src/profiling/ProfilingService.cpp + src/profiling/ProfilingService.hpp third-party/half/half.hpp ) diff --git a/src/profiling/ProfilingService.cpp b/src/profiling/ProfilingService.cpp new file mode 100644 index 0000000..eaaded5 --- /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 0000000..33f1135 --- /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 5860952..57d8dd1 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()