blob: 614417c6de47a025339e8f0f5ba9c8a2973e3274 [file] [log] [blame]
Keith Davis33ed2212020-03-30 10:43:41 +01001//
Jim Flynnbbfe6032020-07-20 16:57:44 +01002// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
Keith Davis33ed2212020-03-30 10:43:41 +01003// SPDX-License-Identifier: MIT
4//
5
6#include "ActivateTimelineReportingCommandHandler.hpp"
7#include "TimelineUtilityMethods.hpp"
8
9#include <armnn/Exceptions.hpp>
10#include <boost/format.hpp>
11
12namespace armnn
13{
14
15namespace profiling
16{
17
Jim Flynnbbfe6032020-07-20 16:57:44 +010018void ActivateTimelineReportingCommandHandler::operator()(const arm::pipe::Packet& packet)
Keith Davis33ed2212020-03-30 10:43:41 +010019{
20 ProfilingState currentState = m_StateMachine.GetCurrentState();
21
22 if (!m_ReportStructure.has_value())
23 {
24 throw armnn::Exception(std::string("Profiling Service constructor must be initialised with an "
25 "IReportStructure argument in order to run timeline reporting"));
26 }
27
28 switch ( currentState )
29 {
30 case ProfilingState::Uninitialised:
31 case ProfilingState::NotConnected:
32 case ProfilingState::WaitingForAck:
33 throw RuntimeException(boost::str(
34 boost::format("Activate Timeline Reporting Command Handler invoked while in a wrong state: %1%")
35 % GetProfilingStateName(currentState)));
36 case ProfilingState::Active:
37 if ( !( packet.GetPacketFamily() == 0u && packet.GetPacketId() == 6u ))
38 {
39 throw armnn::Exception(std::string("Expected Packet family = 0, id = 6 but received family =")
40 + std::to_string(packet.GetPacketFamily())
41 + " id = " + std::to_string(packet.GetPacketId()));
42 }
43
44 m_SendTimelinePacket.SendTimelineMessageDirectoryPackage();
45
46 TimelineUtilityMethods::SendWellKnownLabelsAndEventClasses(m_SendTimelinePacket);
47
48 m_TimelineReporting = true;
49
50 m_ReportStructure.value().ReportStructure();
51
52 m_BackendNotifier.NotifyBackendsForTimelineReporting();
53
54 break;
55 default:
56 throw RuntimeException(boost::str(boost::format("Unknown profiling service state: %1%")
57 % static_cast<int>(currentState)));
58 }
59}
60
61} // namespace profiling
62
63} // namespace armnn