blob: aedb28571ecaf9900844f0f97babaf96e1500c55 [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
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,
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
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