blob: 8f4812e9dd640057fad1ea2f19e699c683d16e9c [file] [log] [blame]
Aron Virginas-Tardfa14772019-09-24 18:24:47 +01001//
Jim Flynnbbfe6032020-07-20 16:57:44 +01002// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
Aron Virginas-Tardfa14772019-09-24 18:24:47 +01003// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8#include "IProfilingConnection.hpp"
Keith Davisb10e0812019-10-17 09:52:50 +01009#include "ProfilingUtils.hpp"
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010010
Jim Flynn27761832022-03-20 21:52:17 +000011#include <client/include/ProfilingOptions.hpp>
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010012
13#include <fstream>
14#include <memory>
15#include <string>
16#include <vector>
17
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000018namespace arm
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010019{
20
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000021namespace pipe
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010022{
23
24class ProfilingConnectionDumpToFileDecorator : public IProfilingConnection
25{
26public:
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010027
28 ProfilingConnectionDumpToFileDecorator(std::unique_ptr<IProfilingConnection> connection,
Jim Flynn4c9ed1d2022-01-23 23:57:20 +000029 const ProfilingOptions& options,
Keith Davis3201eea2019-10-24 17:30:41 +010030 bool ignoreFailures = false);
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010031
32 ~ProfilingConnectionDumpToFileDecorator();
33
Matteo Martincigh54fb9572019-10-02 12:50:57 +010034 bool IsOpen() const override;
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010035
36 void Close() override;
37
38 bool WritePacket(const unsigned char* buffer, uint32_t length) override;
39
Jim Flynnbbfe6032020-07-20 16:57:44 +010040 arm::pipe::Packet ReadPacket(uint32_t timeout) override;
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010041
42private:
43 bool OpenIncomingDumpFile();
44
45 bool OpenOutgoingDumpFile();
46
Jim Flynnbbfe6032020-07-20 16:57:44 +010047 void DumpIncomingToFile(const arm::pipe::Packet& packet);
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010048
Matteo Martincigh67ef2a52019-10-10 13:29:02 +010049 bool DumpOutgoingToFile(const unsigned char* buffer, uint32_t length);
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010050
51 void Fail(const std::string& errorMessage);
52
Jim Flynn4c9ed1d2022-01-23 23:57:20 +000053 std::unique_ptr<IProfilingConnection> m_Connection;
54 ProfilingOptions m_Options;
55 std::ofstream m_IncomingDumpFileStream;
56 std::ofstream m_OutgoingDumpFileStream;
57 bool m_IgnoreFileErrors;
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010058};
59
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000060} // namespace pipe
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010061
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000062} // namespace arm