blob: 450c38a243197c8ace30214e0fd8a9f7944d8d1b [file] [log] [blame]
Aron Virginas-Tardfa14772019-09-24 18:24:47 +01001//
2// Copyright © 2019 Arm Ltd. All rights reserved.
3// 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
19namespace armnn
20{
21
22namespace profiling
23{
24
25class ProfilingConnectionDumpToFileDecorator : public IProfilingConnection
26{
27public:
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010028
29 ProfilingConnectionDumpToFileDecorator(std::unique_ptr<IProfilingConnection> connection,
Keith Davisb10e0812019-10-17 09:52:50 +010030 const Runtime::CreationOptions::ExternalProfilingOptions& options,
31 bool ignoreFailures);
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
41 Packet ReadPacket(uint32_t timeout) override;
42
43private:
44 bool OpenIncomingDumpFile();
45
46 bool OpenOutgoingDumpFile();
47
48 void DumpIncomingToFile(const Packet& packet);
49
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
Keith Davisb10e0812019-10-17 09:52:50 +010054 std::unique_ptr<IProfilingConnection> m_Connection;
55 Runtime::CreationOptions::ExternalProfilingOptions 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
Aron Virginas-Tardfa14772019-09-24 18:24:47 +010061} // namespace profiling
62
63} // namespace armnn