blob: 6963dd00c7dea475c54058102a5c40ac25a154af [file] [log] [blame]
Finn Williamse63a0262019-10-22 10:30:49 +01001//
Kevin Mayc1351792020-07-28 11:29:04 +01002// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
Finn Williamse63a0262019-10-22 10:30:49 +01003// SPDX-License-Identifier: MIT
4//
5
Jim Flynnbbfe6032020-07-20 16:57:44 +01006#include <common/include/CommonProfilingUtils.hpp>
7#include <common/include/SwTrace.hpp>
8#include <server/include/timelineDecoder/TimelineCaptureCommandHandler.hpp>
9#include <server/include/timelineDecoder/TimelineDirectoryCaptureCommandHandler.hpp>
Finn Williamse63a0262019-10-22 10:30:49 +010010
11#include <iostream>
12#include <string>
13
Jim Flynnbbfe6032020-07-20 16:57:44 +010014namespace arm
Finn Williamse63a0262019-10-22 10:30:49 +010015{
16
Jim Flynnbbfe6032020-07-20 16:57:44 +010017namespace pipe
Finn Williamse63a0262019-10-22 10:30:49 +010018{
19
Jim Flynnbbfe6032020-07-20 16:57:44 +010020void TimelineDirectoryCaptureCommandHandler::ParseData(const arm::pipe::Packet& packet)
Finn Williamse63a0262019-10-22 10:30:49 +010021{
22 uint32_t offset = 0;
23
24 if (packet.GetLength() < 8)
25 {
26 return;
27 }
28
29 const unsigned char* data = packet.GetData();
30
Matteo Martincigh34a407d2019-11-06 15:30:54 +000031 m_SwTraceHeader.m_StreamVersion = ReadUint8(data, offset);
32 offset += uint8_t_size;
33 m_SwTraceHeader.m_PointerBytes = ReadUint8(data, offset);
34 offset += uint8_t_size;
35 m_SwTraceHeader.m_ThreadIdBytes = ReadUint8(data, offset);
36 offset += uint8_t_size;
37
Jim Flynnbbfe6032020-07-20 16:57:44 +010038 uint32_t numberOfDeclarations = arm::pipe::ReadUint32(data, offset);
Finn Williamse63a0262019-10-22 10:30:49 +010039 offset += uint32_t_size;
40
Matteo Martincigh34a407d2019-11-06 15:30:54 +000041 for (uint32_t declaration = 0; declaration < numberOfDeclarations; ++declaration)
Finn Williamse63a0262019-10-22 10:30:49 +010042 {
Jim Flynnbbfe6032020-07-20 16:57:44 +010043 m_SwTraceMessages.push_back(arm::pipe::ReadSwTraceMessage(data, offset, packet.GetLength()));
Finn Williamse63a0262019-10-22 10:30:49 +010044 }
Finn Williamse6a2ccd2020-02-27 16:21:41 +000045
46 m_TimelineCaptureCommandHandler.SetThreadIdSize(m_SwTraceHeader.m_ThreadIdBytes);
Finn Williamse63a0262019-10-22 10:30:49 +010047}
48
49void TimelineDirectoryCaptureCommandHandler::Print()
50{
51 std::string header;
52
Jim Flynnbbfe6032020-07-20 16:57:44 +010053 header.append(arm::pipe::CentreAlignFormatting("decl_id", 12));
Finn Williamse63a0262019-10-22 10:30:49 +010054 header.append(" | ");
Jim Flynnbbfe6032020-07-20 16:57:44 +010055 header.append(arm::pipe::CentreAlignFormatting("decl_name", 20));
Finn Williamse63a0262019-10-22 10:30:49 +010056 header.append(" | ");
Jim Flynnbbfe6032020-07-20 16:57:44 +010057 header.append(arm::pipe::CentreAlignFormatting("ui_name", 20));
Finn Williamse63a0262019-10-22 10:30:49 +010058 header.append(" | ");
Jim Flynnbbfe6032020-07-20 16:57:44 +010059 header.append(arm::pipe::CentreAlignFormatting("arg_types", 16));
Finn Williamse63a0262019-10-22 10:30:49 +010060 header.append(" | ");
Jim Flynnbbfe6032020-07-20 16:57:44 +010061 header.append(arm::pipe::CentreAlignFormatting("arg_names", 80));
Finn Williamse63a0262019-10-22 10:30:49 +010062 header.append("\n");
63
64 std::cout << "\n" << "\n";
Jim Flynnbbfe6032020-07-20 16:57:44 +010065 std::cout << arm::pipe::CentreAlignFormatting("SW DIRECTORY", static_cast<int>(header.size()));
Finn Williamse63a0262019-10-22 10:30:49 +010066 std::cout << "\n";
67 std::cout << std::string(header.size(), '=') << "\n";
68
Matteo Martincigh34a407d2019-11-06 15:30:54 +000069 std::cout << header;
Finn Williamse63a0262019-10-22 10:30:49 +010070
Matteo Martincigh34a407d2019-11-06 15:30:54 +000071 for (const auto& swTraceMessage : m_SwTraceMessages)
Finn Williamse63a0262019-10-22 10:30:49 +010072 {
73 std::string body;
74
Jim Flynnbbfe6032020-07-20 16:57:44 +010075 body.append(arm::pipe::CentreAlignFormatting(std::to_string(swTraceMessage.m_Id), 12));
Finn Williamse63a0262019-10-22 10:30:49 +010076 body.append(" | ");
Jim Flynnbbfe6032020-07-20 16:57:44 +010077 body.append(arm::pipe::CentreAlignFormatting(swTraceMessage.m_Name, 20));
Finn Williamse63a0262019-10-22 10:30:49 +010078 body.append(" | ");
Jim Flynnbbfe6032020-07-20 16:57:44 +010079 body.append(arm::pipe::CentreAlignFormatting(swTraceMessage.m_UiName, 20));
Finn Williamse63a0262019-10-22 10:30:49 +010080 body.append(" | ");
81
82 std::string argTypes;
Matteo Martincigh34a407d2019-11-06 15:30:54 +000083 for (auto argType: swTraceMessage.m_ArgTypes)
Finn Williamse63a0262019-10-22 10:30:49 +010084 {
85 argTypes += argType;
86 argTypes += " ";
87 }
Jim Flynnbbfe6032020-07-20 16:57:44 +010088 body.append(arm::pipe::CentreAlignFormatting(argTypes, 16));
Finn Williamse63a0262019-10-22 10:30:49 +010089 body.append(" | ");
90
91 std::string argNames;
Matteo Martincigh34a407d2019-11-06 15:30:54 +000092 for (auto argName: swTraceMessage.m_ArgNames)
Finn Williamse63a0262019-10-22 10:30:49 +010093 {
94 argNames += argName + " ";
95 }
Jim Flynnbbfe6032020-07-20 16:57:44 +010096 body.append(arm::pipe::CentreAlignFormatting(argNames, 80));
Finn Williamse63a0262019-10-22 10:30:49 +010097
98 body.append("\n");
99
100 std::cout << std::string(body.size(), '-') << "\n";
101
Matteo Martincigh34a407d2019-11-06 15:30:54 +0000102 std::cout << body;
Finn Williamse63a0262019-10-22 10:30:49 +0100103 }
104}
105
Jim Flynnbbfe6032020-07-20 16:57:44 +0100106void TimelineDirectoryCaptureCommandHandler::operator()(const arm::pipe::Packet& packet)
Finn Williamse63a0262019-10-22 10:30:49 +0100107{
108 ParseData(packet);
109
Matteo Martincigh34a407d2019-11-06 15:30:54 +0000110 if (!m_QuietOperation)
Finn Williamse63a0262019-10-22 10:30:49 +0100111 {
112 Print();
113 }
114}
115
Jim Flynnbbfe6032020-07-20 16:57:44 +0100116} //namespace pipe
117} //namespace arm