aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKeith Davis <keith.davis@arm.com>2019-08-26 18:28:17 +0100
committerJim Flynn Arm <jim.flynn@arm.com>2019-09-05 16:18:42 +0000
commit02356de9da5d5480b4b9b413d1b6b33daf7ab717 (patch)
tree5ea3b7c7170f34ef5166c50291e213aec6204440 /src
parent0696569fbfb76b485624de24462aaf10d84f415d (diff)
downloadarmnn-02356de9da5d5480b4b9b413d1b6b33daf7ab717.tar.gz
IVGCVSW-3674 Create basic ProfileService class
Signed-off-by: Keith Davis <keith.davis@arm.com> Change-Id: I5bed5196c256883fb704fe14b60bb8f7a77cc9df
Diffstat (limited to 'src')
-rw-r--r--src/profiling/ProfilingService.cpp55
-rw-r--r--src/profiling/ProfilingService.hpp39
-rw-r--r--src/profiling/test/ProfilingTests.cpp36
3 files changed, 130 insertions, 0 deletions
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 <boost/test/unit_test.hpp>
#include <cstdint>
@@ -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()