• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "ActivateTimelineReportingCommandHandler.hpp"
7 #include "TimelineUtilityMethods.hpp"
8 
9 #include <armnn/Exceptions.hpp>
10 #include <fmt/format.h>
11 
12 namespace armnn
13 {
14 
15 namespace profiling
16 {
17 
operator ()(const arm::pipe::Packet & packet)18 void ActivateTimelineReportingCommandHandler::operator()(const arm::pipe::Packet& packet)
19 {
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(fmt::format(
34                     "Activate Timeline Reporting Command Handler invoked while in a wrong state: {}",
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             if(!m_TimelineReporting)
45             {
46                 m_SendTimelinePacket.SendTimelineMessageDirectoryPackage();
47 
48                 TimelineUtilityMethods::SendWellKnownLabelsAndEventClasses(m_SendTimelinePacket);
49 
50                 m_TimelineReporting = true;
51 
52                 m_ReportStructure.value().ReportStructure();
53 
54                 m_BackendNotifier.NotifyBackendsForTimelineReporting();
55             }
56 
57             break;
58         default:
59             throw RuntimeException(fmt::format("Unknown profiling service state: {}",
60                                                static_cast<int>(currentState)));
61     }
62 }
63 
64 } // namespace profiling
65 
66 } // namespace armnn