blob: f28c7b50bf1a2817c1dc58b410e3f0b92d5badf4 [file] [log] [blame]
Finn Williamse63a0262019-10-22 10:30:49 +01001//
2// Copyright © 2019 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "TimelineDirectoryCaptureCommandHandler.hpp"
7
Matteo Martincigh34a407d2019-11-06 15:30:54 +00008#include <ProfilingUtils.hpp>
9
Finn Williamse63a0262019-10-22 10:30:49 +010010#include <iostream>
11#include <string>
12
Matteo Martincigh34a407d2019-11-06 15:30:54 +000013using namespace armnn::profiling;
14
Finn Williamse63a0262019-10-22 10:30:49 +010015namespace armnn
16{
17
18namespace gatordmock
19{
20
21void TimelineDirectoryCaptureCommandHandler::ParseData(const armnn::profiling::Packet& packet)
22{
23 uint32_t offset = 0;
24
25 if (packet.GetLength() < 8)
26 {
27 return;
28 }
29
30 const unsigned char* data = packet.GetData();
31
Matteo Martincigh34a407d2019-11-06 15:30:54 +000032 m_SwTraceHeader.m_StreamVersion = ReadUint8(data, offset);
33 offset += uint8_t_size;
34 m_SwTraceHeader.m_PointerBytes = ReadUint8(data, offset);
35 offset += uint8_t_size;
36 m_SwTraceHeader.m_ThreadIdBytes = ReadUint8(data, offset);
37 offset += uint8_t_size;
38
Finn Williamse63a0262019-10-22 10:30:49 +010039 uint32_t numberOfDeclarations = profiling::ReadUint32(data, offset);
40 offset += uint32_t_size;
41
Matteo Martincigh34a407d2019-11-06 15:30:54 +000042 for (uint32_t declaration = 0; declaration < numberOfDeclarations; ++declaration)
Finn Williamse63a0262019-10-22 10:30:49 +010043 {
44 m_SwTraceMessages.push_back(profiling::ReadSwTraceMessage(data, offset));
45 }
46}
47
48void TimelineDirectoryCaptureCommandHandler::Print()
49{
50 std::string header;
51
52 header.append(profiling::CentreAlignFormatting("decl_id", 12));
53 header.append(" | ");
54 header.append(profiling::CentreAlignFormatting("decl_name", 20));
55 header.append(" | ");
56 header.append(profiling::CentreAlignFormatting("ui_name", 20));
57 header.append(" | ");
58 header.append(profiling::CentreAlignFormatting("arg_types", 16));
59 header.append(" | ");
60 header.append(profiling::CentreAlignFormatting("arg_names", 80));
61 header.append("\n");
62
63 std::cout << "\n" << "\n";
64 std::cout << profiling::CentreAlignFormatting("SW DIRECTORY", static_cast<int>(header.size()));
65 std::cout << "\n";
66 std::cout << std::string(header.size(), '=') << "\n";
67
Matteo Martincigh34a407d2019-11-06 15:30:54 +000068 std::cout << header;
Finn Williamse63a0262019-10-22 10:30:49 +010069
Matteo Martincigh34a407d2019-11-06 15:30:54 +000070 for (const auto& swTraceMessage : m_SwTraceMessages)
Finn Williamse63a0262019-10-22 10:30:49 +010071 {
72 std::string body;
73
Matteo Martincigh34a407d2019-11-06 15:30:54 +000074 body.append(profiling::CentreAlignFormatting(std::to_string(swTraceMessage.m_Id), 12));
Finn Williamse63a0262019-10-22 10:30:49 +010075 body.append(" | ");
Matteo Martincigh34a407d2019-11-06 15:30:54 +000076 body.append(profiling::CentreAlignFormatting(swTraceMessage.m_Name, 20));
Finn Williamse63a0262019-10-22 10:30:49 +010077 body.append(" | ");
Matteo Martincigh34a407d2019-11-06 15:30:54 +000078 body.append(profiling::CentreAlignFormatting(swTraceMessage.m_UiName, 20));
Finn Williamse63a0262019-10-22 10:30:49 +010079 body.append(" | ");
80
81 std::string argTypes;
Matteo Martincigh34a407d2019-11-06 15:30:54 +000082 for (auto argType: swTraceMessage.m_ArgTypes)
Finn Williamse63a0262019-10-22 10:30:49 +010083 {
84 argTypes += argType;
85 argTypes += " ";
86 }
87 body.append(profiling::CentreAlignFormatting(argTypes, 16));
88 body.append(" | ");
89
90 std::string argNames;
Matteo Martincigh34a407d2019-11-06 15:30:54 +000091 for (auto argName: swTraceMessage.m_ArgNames)
Finn Williamse63a0262019-10-22 10:30:49 +010092 {
93 argNames += argName + " ";
94 }
95 body.append(profiling::CentreAlignFormatting(argNames, 80));
96
97 body.append("\n");
98
99 std::cout << std::string(body.size(), '-') << "\n";
100
Matteo Martincigh34a407d2019-11-06 15:30:54 +0000101 std::cout << body;
Finn Williamse63a0262019-10-22 10:30:49 +0100102 }
103}
104
105void TimelineDirectoryCaptureCommandHandler::operator()(const profiling::Packet& packet)
106{
107 ParseData(packet);
108
Matteo Martincigh34a407d2019-11-06 15:30:54 +0000109 if (!m_QuietOperation)
Finn Williamse63a0262019-10-22 10:30:49 +0100110 {
111 Print();
112 }
113}
114
115} //namespace gatordmock
116
Matteo Martincigh34a407d2019-11-06 15:30:54 +0000117} //namespace armnn