ArmNN
 20.02
FileOnlyProfilingConnection Class Reference

#include <FileOnlyProfilingConnection.hpp>

Inheritance diagram for FileOnlyProfilingConnection:
IProfilingConnection

Public Member Functions

 FileOnlyProfilingConnection (const Runtime::CreationOptions::ExternalProfilingOptions &options, const bool quietOp=true)
 
 ~FileOnlyProfilingConnection ()
 
bool IsOpen () const override
 
void Close () override
 
bool WritePacket (const unsigned char *buffer, uint32_t length) override
 
Packet ReadPacket (uint32_t timeout) override
 
- Public Member Functions inherited from IProfilingConnection
virtual ~IProfilingConnection ()
 

Detailed Description

Definition at line 37 of file FileOnlyProfilingConnection.hpp.

Constructor & Destructor Documentation

◆ FileOnlyProfilingConnection()

FileOnlyProfilingConnection ( const Runtime::CreationOptions::ExternalProfilingOptions &  options,
const bool  quietOp = true 
)
inline

Definition at line 40 of file FileOnlyProfilingConnection.hpp.

References armnnUtils::Sockets::Close().

42  : m_Options(options)
43  , m_QuietOp(quietOp)
44  , m_Endianness(TargetEndianness::LeWire) // Set a sensible default. WaitForStreamMeta will set a real value.
45  {};
armnn::Runtime::CreationOptions::ExternalProfilingOptions options

◆ ~FileOnlyProfilingConnection()

Member Function Documentation

◆ Close()

void Close ( )
overridevirtual

Implements IProfilingConnection.

Definition at line 32 of file FileOnlyProfilingConnection.cpp.

References armnn::profiling::BeWire, armnn::IgnoreUnused(), armnn::profiling::LeWire, armnn::numeric_cast(), armnn::profiling::uint16_t_size, armnn::profiling::uint32_t_size, armnn::profiling::WriteUint16(), and armnn::profiling::WriteUint32().

Referenced by FileOnlyProfilingConnection::ReadPacket(), and FileOnlyProfilingConnection::~FileOnlyProfilingConnection().

33 {
34  // Dump any unread packets out of the queue.
35  for (unsigned int i = 0; i < m_PacketQueue.size(); i++)
36  {
37  m_PacketQueue.pop();
38  }
39 }

◆ IsOpen()

bool IsOpen ( ) const
overridevirtual

Implements IProfilingConnection.

Definition at line 26 of file FileOnlyProfilingConnection.cpp.

27 {
28  // This type of connection is always open.
29  return true;
30 }

◆ ReadPacket()

Packet ReadPacket ( uint32_t  timeout)
overridevirtual

Implements IProfilingConnection.

Definition at line 166 of file FileOnlyProfilingConnection.cpp.

References armnn::profiling::BeWire, FileOnlyProfilingConnection::Close(), armnn::profiling::CounterDirectory, armnn::profiling::StreamMetaData, and armnn::profiling::Unknown.

167 {
168  std::unique_lock<std::mutex> lck(m_PacketAvailableMutex);
169 
170  // Here we are using m_PacketQueue.empty() as a predicate variable
171  // The conditional variable will wait until packetQueue is not empty or until a timeout
172  if(!m_ConditionPacketAvailable.wait_for(lck,
173  std::chrono::milliseconds(timeout),
174  [&]{return !m_PacketQueue.empty();}))
175  {
176  throw armnn::TimeoutException("Thread has timed out as per requested time limit");
177  }
178 
179  Packet returnedPacket = std::move(m_PacketQueue.front());
180  m_PacketQueue.pop();
181  return returnedPacket;
182 }

◆ WritePacket()

bool WritePacket ( const unsigned char *  buffer,
uint32_t  length 
)
overridevirtual

Implements IProfilingConnection.

Definition at line 112 of file FileOnlyProfilingConnection.cpp.

References armnn::profiling::CounterDirectory, ICounterDirectory::GetCategories(), Version::GetEncodedValue(), PacketVersionResolver::ResolvePacketVersion(), and armnn::profiling::StreamMetaData.

113 {
114  BOOST_ASSERT(buffer);
115 
116  // Read Header and determine case
117  uint32_t outgoingHeaderAsWords[2];
118  PackageActivity packageActivity = GetPackageActivity(buffer, outgoingHeaderAsWords);
119 
120  switch (packageActivity)
121  {
123  {
124  if (!WaitForStreamMeta(buffer, length))
125  {
126  return EXIT_FAILURE;
127  }
128 
129  SendConnectionAck();
130  break;
131  }
133  {
134  std::unique_ptr<unsigned char[]> uniqueCounterData = std::make_unique<unsigned char[]>(length - 8);
135 
136  std::memcpy(uniqueCounterData.get(), buffer + 8, length - 8);
137 
138  Packet directoryPacket(outgoingHeaderAsWords[0], length - 8, uniqueCounterData);
139 
140  armnn::profiling::PacketVersionResolver packetVersionResolver;
141  DirectoryCaptureCommandHandler directoryCaptureCommandHandler(
142  0, 2, packetVersionResolver.ResolvePacketVersion(0, 2).GetEncodedValue());
143  directoryCaptureCommandHandler.operator()(directoryPacket);
144  const ICounterDirectory& counterDirectory = directoryCaptureCommandHandler.GetCounterDirectory();
145  for (auto& category : counterDirectory.GetCategories())
146  {
147  // Remember we need to translate the Uid's from our CounterDirectory instance to the parent one.
148  std::vector<uint16_t> translatedCounters;
149  for (auto const& copyUid : category->m_Counters)
150  {
151  translatedCounters.emplace_back(directoryCaptureCommandHandler.TranslateUIDCopyToOriginal(copyUid));
152  }
153  m_IdList.insert(std::end(m_IdList), std::begin(translatedCounters), std::end(translatedCounters));
154  }
155  SendCounterSelectionPacket();
156  break;
157  }
158  default:
159  {
160  break;
161  }
162  }
163  return true;
164 }
Version ResolvePacketVersion(uint32_t familyId, uint32_t packetId) const

The documentation for this class was generated from the following files: