blob: 2cbd98f9d123c0bf02e387519deb992077823c1b [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
Keith Davisb10e0812019-10-17 09:52:50 +010011#include <Runtime.hpp>
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010012#include <armnn/Optional.hpp>
13
14#include <fstream>
15#include <memory>
16#include <string>
17#include <vector>
18
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000019namespace arm
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010020{
21
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000022namespace pipe
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010023{
24
25class ProfilingConnectionDumpToFileDecorator : public IProfilingConnection
26{
27public:
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010028
29 ProfilingConnectionDumpToFileDecorator(std::unique_ptr<IProfilingConnection> connection,
Jim Flynn4c9ed1d2022-01-23 23:57:20 +000030 const ProfilingOptions& options,
Keith Davis3201eea2019-10-24 17:30:41 +010031 bool ignoreFailures = false);
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010032
33 ~ProfilingConnectionDumpToFileDecorator();
34
Matteo Martincigh54fb9572019-10-02 12:50:57 +010035 bool IsOpen() const override;
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010036
37 void Close() override;
38
39 bool WritePacket(const unsigned char* buffer, uint32_t length) override;
40
Jim Flynnbbfe6032020-07-20 16:57:44 +010041 arm::pipe::Packet ReadPacket(uint32_t timeout) override;
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010042
43private:
44 bool OpenIncomingDumpFile();
45
46 bool OpenOutgoingDumpFile();
47
Jim Flynnbbfe6032020-07-20 16:57:44 +010048 void DumpIncomingToFile(const arm::pipe::Packet& packet);
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010049
Matteo Martincigh67ef2a52019-10-10 13:29:02 +010050 bool DumpOutgoingToFile(const unsigned char* buffer, uint32_t length);
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010051
52 void Fail(const std::string& errorMessage);
53
Jim Flynn4c9ed1d2022-01-23 23:57:20 +000054 std::unique_ptr<IProfilingConnection> m_Connection;
55 ProfilingOptions m_Options;
56 std::ofstream m_IncomingDumpFileStream;
57 std::ofstream m_OutgoingDumpFileStream;
58 bool m_IgnoreFileErrors;
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010059};
60
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000061} // namespace pipe
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010062
Cathal Corbett5aa9fd72022-02-25 15:33:28 +000063} // namespace arm