12 #include <boost/numeric/conversion/cast.hpp> 21 std::unique_ptr<IProfilingConnection> connection,
22 const Runtime::CreationOptions::ExternalProfilingOptions&
options,
24 : m_Connection(
std::move(connection))
26 , m_IgnoreFileErrors(ignoreFailures)
41 return m_Connection->IsOpen();
46 m_IncomingDumpFileStream.flush();
47 m_IncomingDumpFileStream.close();
48 m_OutgoingDumpFileStream.flush();
49 m_OutgoingDumpFileStream.close();
50 m_Connection->Close();
56 if (!m_Options.m_OutgoingCaptureFile.empty())
58 success &= DumpOutgoingToFile(buffer, length);
60 success &= m_Connection->WritePacket(buffer, length);
66 Packet packet = m_Connection->ReadPacket(timeout);
67 if (!m_Options.m_IncomingCaptureFile.empty())
69 DumpIncomingToFile(packet);
74 bool ProfilingConnectionDumpToFileDecorator::OpenIncomingDumpFile()
76 m_IncomingDumpFileStream.open(m_Options.m_IncomingCaptureFile, std::ios::out | std::ios::binary);
77 return m_IncomingDumpFileStream.is_open();
80 bool ProfilingConnectionDumpToFileDecorator::OpenOutgoingDumpFile()
82 m_OutgoingDumpFileStream.open(m_Options.m_OutgoingCaptureFile, std::ios::out | std::ios::binary);
83 return m_OutgoingDumpFileStream.is_open();
93 void ProfilingConnectionDumpToFileDecorator::DumpIncomingToFile(
const Packet& packet)
96 if (!m_IncomingDumpFileStream.is_open())
99 success &= OpenIncomingDumpFile();
100 if (!(success || m_IgnoreFileErrors))
102 Fail(
"Failed to open \"" + m_Options.m_IncomingCaptureFile +
"\" for writing");
107 const unsigned int header = packet.
GetHeader();
108 const unsigned int packetLength = packet.
GetLength();
110 m_IncomingDumpFileStream.write(reinterpret_cast<const char*>(&header),
sizeof header);
111 m_IncomingDumpFileStream.write(reinterpret_cast<const char*>(&packetLength),
sizeof packetLength);
112 m_IncomingDumpFileStream.write(reinterpret_cast<const char*>(packet.
GetData()),
113 boost::numeric_cast<std::streamsize>(packetLength));
115 success &= m_IncomingDumpFileStream.good();
116 if (!(success || m_IgnoreFileErrors))
118 Fail(
"Error writing incoming packet of " + std::to_string(packetLength) +
" bytes");
130 bool ProfilingConnectionDumpToFileDecorator::DumpOutgoingToFile(
const unsigned char* buffer, uint32_t length)
133 if (!m_OutgoingDumpFileStream.is_open())
136 success &= OpenOutgoingDumpFile();
137 if (!(success || m_IgnoreFileErrors))
139 Fail(
"Failed to open \"" + m_Options.m_OutgoingCaptureFile +
"\" for writing");
144 m_OutgoingDumpFileStream.write(reinterpret_cast<const char*>(buffer),
145 boost::numeric_cast<std::streamsize>(length));
146 success &= m_OutgoingDumpFileStream.good();
147 if (!(success || m_IgnoreFileErrors))
149 Fail(
"Error writing outgoing packet of " + std::to_string(length) +
" bytes");
155 void ProfilingConnectionDumpToFileDecorator::Fail(
const std::string& errorMessage)
bool WritePacket(const unsigned char *buffer, uint32_t length) override
Packet ReadPacket(uint32_t timeout) override
Copyright (c) 2020 ARM Limited.
ProfilingConnectionDumpToFileDecorator(std::unique_ptr< IProfilingConnection > connection, const Runtime::CreationOptions::ExternalProfilingOptions &options, bool ignoreFailures=false)
~ProfilingConnectionDumpToFileDecorator()
uint32_t GetLength() const
bool IsOpen() const override
uint32_t GetHeader() const
const unsigned char * GetData() const
armnn::Runtime::CreationOptions::ExternalProfilingOptions options