ArmNN
 22.05
ProfilingMocks.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
8 #include <client/src/IProfilingConnectionFactory.hpp>
9 #include <client/src/ProfilingService.hpp>
10 #include <client/src/ProfilingUtils.hpp>
11 #include <client/src/SendCounterPacket.hpp>
12 #include <client/src/SendThread.hpp>
13 
14 #include <armnn/BackendId.hpp>
16 
17 #include <client/include/Holder.hpp>
18 #include <client/include/IProfilingServiceStatus.hpp>
19 
20 #include <common/include/Assert.hpp>
21 #include <common/include/CommonProfilingUtils.hpp>
22 #include <common/include/IgnoreUnused.hpp>
23 #include <common/include/NumericCast.hpp>
24 #include <common/include/Optional.hpp>
25 #include <common/include/ProfilingException.hpp>
26 #include <common/include/ProfilingGuidGenerator.hpp>
27 
28 #include <atomic>
29 #include <condition_variable>
30 #include <mutex>
31 #include <thread>
32 
33 namespace arm
34 {
35 
36 namespace pipe
37 {
38 
39 class MockProfilingConnection : public IProfilingConnection
40 {
41 public:
43  : m_IsOpen(true)
44  , m_WrittenData()
45  , m_Packet()
46  {}
47 
48  enum class PacketType
49  {
60  Unknown
61  };
62 
63  bool IsOpen() const override
64  {
65  std::lock_guard<std::mutex> lock(m_Mutex);
66 
67  return m_IsOpen;
68  }
69 
70  void Close() override
71  {
72  std::lock_guard<std::mutex> lock(m_Mutex);
73 
74  m_IsOpen = false;
75  }
76 
77  bool WritePacket(const unsigned char* buffer, uint32_t length) override
78  {
79  if (buffer == nullptr || length == 0)
80  {
81  return false;
82  }
83 
84  uint32_t header = ReadUint32(buffer, 0);
85 
86  uint32_t packetFamily = (header >> 26);
87  uint32_t packetId = ((header >> 16) & 1023);
88 
89  PacketType packetType;
90 
91  switch (packetFamily)
92  {
93  case 0:
94  packetType = packetId < 8 ? PacketType(packetId) : PacketType::Unknown;
95  break;
96  case 1:
97  packetType = packetId == 0 ? PacketType::TimelineMessageDirectory : PacketType::Unknown;
98  break;
99  case 3:
100  packetType = packetId == 0 ? PacketType::PeriodicCounterCapture : PacketType::Unknown;
101  break;
102  default:
103  packetType = PacketType::Unknown;
104  }
105 
106  std::lock_guard<std::mutex> lock(m_Mutex);
107 
108  m_WrittenData.push_back({ packetType, length });
109  return true;
110  }
111 
112  long CheckForPacket(const std::pair<PacketType, uint32_t> packetInfo)
113  {
114  std::lock_guard<std::mutex> lock(m_Mutex);
115 
116  if(packetInfo.second != 0)
117  {
118  return static_cast<long>(std::count(m_WrittenData.begin(), m_WrittenData.end(), packetInfo));
119  }
120  else
121  {
122  return static_cast<long>(std::count_if(m_WrittenData.begin(), m_WrittenData.end(),
123  [&packetInfo](const std::pair<PacketType, uint32_t> pair) { return packetInfo.first == pair.first; }));
124  }
125  }
126 
127  bool WritePacket(arm::pipe::Packet&& packet)
128  {
129  std::lock_guard<std::mutex> lock(m_Mutex);
130 
131  m_Packet = std::move(packet);
132  return true;
133  }
134 
135  arm::pipe::Packet ReadPacket(uint32_t timeout) override
136  {
137  arm::pipe::IgnoreUnused(timeout);
138 
139  // Simulate a delay in the reading process. The default timeout is way too long.
140  std::this_thread::sleep_for(std::chrono::milliseconds(5));
141  std::lock_guard<std::mutex> lock(m_Mutex);
142  return std::move(m_Packet);
143  }
144 
145  unsigned long GetWrittenDataSize()
146  {
147  std::lock_guard<std::mutex> lock(m_Mutex);
148 
149  return static_cast<unsigned long>(m_WrittenData.size());
150  }
151 
152  void Clear()
153  {
154  std::lock_guard<std::mutex> lock(m_Mutex);
155 
156  m_WrittenData.clear();
157  }
158 
159 private:
160  bool m_IsOpen;
161  std::vector<std::pair<PacketType, uint32_t>> m_WrittenData;
162  arm::pipe::Packet m_Packet;
163  mutable std::mutex m_Mutex;
164 };
165 
166 class MockProfilingConnectionFactory : public IProfilingConnectionFactory
167 {
168 public:
169  IProfilingConnectionPtr GetProfilingConnection(const ProfilingOptions& options) const override
170  {
171  arm::pipe::IgnoreUnused(options);
172  return std::make_unique<MockProfilingConnection>();
173  }
174 };
175 
176 class MockPacketBuffer : public IPacketBuffer
177 {
178 public:
179  MockPacketBuffer(unsigned int maxSize)
180  : m_MaxSize(maxSize)
181  , m_Size(0)
182  , m_Data(std::make_unique<unsigned char[]>(m_MaxSize))
183  {}
184 
186 
187  const unsigned char* GetReadableData() const override { return m_Data.get(); }
188 
189  unsigned int GetSize() const override { return m_Size; }
190 
191  void MarkRead() override { m_Size = 0; }
192 
193  void Commit(unsigned int size) override { m_Size = size; }
194 
195  void Release() override { m_Size = 0; }
196 
197  unsigned char* GetWritableData() override { return m_Data.get(); }
198 
199  void Destroy() override {m_Data.reset(nullptr); m_Size = 0; m_MaxSize =0;}
200 
201 private:
202  unsigned int m_MaxSize;
203  unsigned int m_Size;
204  std::unique_ptr<unsigned char[]> m_Data;
205 };
206 
207 class MockBufferManager : public IBufferManager
208 {
209 public:
210  MockBufferManager(unsigned int size)
211  : m_BufferSize(size),
212  m_Buffer(std::make_unique<MockPacketBuffer>(size)) {}
213 
215 
216  IPacketBufferPtr Reserve(unsigned int requestedSize, unsigned int& reservedSize) override
217  {
218  if (requestedSize > m_BufferSize)
219  {
220  reservedSize = m_BufferSize;
221  }
222  else
223  {
224  reservedSize = requestedSize;
225  }
226 
227  return std::move(m_Buffer);
228  }
229 
230  void Commit(IPacketBufferPtr& packetBuffer, unsigned int size, bool notifyConsumer = true) override
231  {
232  packetBuffer->Commit(size);
233  m_Buffer = std::move(packetBuffer);
234 
235  if (notifyConsumer)
236  {
237  FlushReadList();
238  }
239  }
240 
241  IPacketBufferPtr GetReadableBuffer() override
242  {
243  return std::move(m_Buffer);
244  }
245 
246  void Release(IPacketBufferPtr& packetBuffer) override
247  {
248  packetBuffer->Release();
249  m_Buffer = std::move(packetBuffer);
250  }
251 
252  void MarkRead(IPacketBufferPtr& packetBuffer) override
253  {
254  packetBuffer->MarkRead();
255  m_Buffer = std::move(packetBuffer);
256  }
257 
258  void SetConsumer(IConsumer* consumer) override
259  {
260  if (consumer != nullptr)
261  {
262  m_Consumer = consumer;
263  }
264  }
265 
266  void FlushReadList() override
267  {
268  // notify consumer that packet is ready to read
269  if (m_Consumer != nullptr)
270  {
271  m_Consumer->SetReadyToRead();
272  }
273  }
274 
275 private:
276  unsigned int m_BufferSize;
277  IPacketBufferPtr m_Buffer;
278  IConsumer* m_Consumer = nullptr;
279 };
280 
281 class MockStreamCounterBuffer : public IBufferManager
282 {
283 public:
284  MockStreamCounterBuffer(unsigned int maxBufferSize = 4096)
285  : m_MaxBufferSize(maxBufferSize)
286  , m_BufferList()
287  , m_CommittedSize(0)
288  , m_ReadableSize(0)
289  , m_ReadSize(0)
290  {}
292 
293  IPacketBufferPtr Reserve(unsigned int requestedSize, unsigned int& reservedSize) override
294  {
295  std::lock_guard<std::mutex> lock(m_Mutex);
296 
297  reservedSize = 0;
298  if (requestedSize > m_MaxBufferSize)
299  {
300  throw arm::pipe::InvalidArgumentException("The maximum buffer size that can be requested is [" +
301  std::to_string(m_MaxBufferSize) + "] bytes");
302  }
303  reservedSize = requestedSize;
304  return std::make_unique<MockPacketBuffer>(requestedSize);
305  }
306 
307  void Commit(IPacketBufferPtr& packetBuffer, unsigned int size, bool notifyConsumer = true) override
308  {
309  std::lock_guard<std::mutex> lock(m_Mutex);
310 
311  packetBuffer->Commit(size);
312  m_BufferList.push_back(std::move(packetBuffer));
313  m_CommittedSize += size;
314 
315  if (notifyConsumer)
316  {
317  FlushReadList();
318  }
319  }
320 
321  void Release(IPacketBufferPtr& packetBuffer) override
322  {
323  std::lock_guard<std::mutex> lock(m_Mutex);
324 
325  packetBuffer->Release();
326  }
327 
328  IPacketBufferPtr GetReadableBuffer() override
329  {
330  std::lock_guard<std::mutex> lock(m_Mutex);
331 
332  if (m_BufferList.empty())
333  {
334  return nullptr;
335  }
336  IPacketBufferPtr buffer = std::move(m_BufferList.back());
337  m_BufferList.pop_back();
338  m_ReadableSize += buffer->GetSize();
339  return buffer;
340  }
341 
342  void MarkRead(IPacketBufferPtr& packetBuffer) override
343  {
344  std::lock_guard<std::mutex> lock(m_Mutex);
345 
346  m_ReadSize += packetBuffer->GetSize();
347  packetBuffer->MarkRead();
348  }
349 
350  void SetConsumer(IConsumer* consumer) override
351  {
352  if (consumer != nullptr)
353  {
354  m_Consumer = consumer;
355  }
356  }
357 
358  void FlushReadList() override
359  {
360  // notify consumer that packet is ready to read
361  if (m_Consumer != nullptr)
362  {
363  m_Consumer->SetReadyToRead();
364  }
365  }
366 
367  unsigned int GetCommittedSize() const { return m_CommittedSize; }
368  unsigned int GetReadableSize() const { return m_ReadableSize; }
369  unsigned int GetReadSize() const { return m_ReadSize; }
370 
371 private:
372  // The maximum buffer size when creating a new buffer
373  unsigned int m_MaxBufferSize;
374 
375  // A list of buffers
376  std::vector<IPacketBufferPtr> m_BufferList;
377 
378  // The mutex to synchronize this mock's methods
379  std::mutex m_Mutex;
380 
381  // The total size of the buffers that has been committed for reading
382  unsigned int m_CommittedSize;
383 
384  // The total size of the buffers that can be read
385  unsigned int m_ReadableSize;
386 
387  // The total size of the buffers that has already been read
388  unsigned int m_ReadSize;
389 
390  // Consumer thread to notify packet is ready to read
391  IConsumer* m_Consumer = nullptr;
392 };
393 
394 class MockSendCounterPacket : public ISendCounterPacket
395 {
396 public:
397  MockSendCounterPacket(IBufferManager& sendBuffer) : m_BufferManager(sendBuffer) {}
398 
399  void SendStreamMetaDataPacket() override
400  {
401  std::string message("SendStreamMetaDataPacket");
402  unsigned int reserved = 0;
403  IPacketBufferPtr buffer = m_BufferManager.Reserve(1024, reserved);
404  memcpy(buffer->GetWritableData(), message.c_str(), static_cast<unsigned int>(message.size()) + 1);
405  m_BufferManager.Commit(buffer, reserved, false);
406  }
407 
408  void SendCounterDirectoryPacket(const ICounterDirectory& counterDirectory) override
409  {
410  arm::pipe::IgnoreUnused(counterDirectory);
411 
412  std::string message("SendCounterDirectoryPacket");
413  unsigned int reserved = 0;
414  IPacketBufferPtr buffer = m_BufferManager.Reserve(1024, reserved);
415  memcpy(buffer->GetWritableData(), message.c_str(), static_cast<unsigned int>(message.size()) + 1);
416  m_BufferManager.Commit(buffer, reserved);
417  }
418 
419  void SendPeriodicCounterCapturePacket(uint64_t timestamp,
420  const std::vector<CounterValue>& values) override
421  {
422  arm::pipe::IgnoreUnused(timestamp, values);
423 
424  std::string message("SendPeriodicCounterCapturePacket");
425  unsigned int reserved = 0;
426  IPacketBufferPtr buffer = m_BufferManager.Reserve(1024, reserved);
427  memcpy(buffer->GetWritableData(), message.c_str(), static_cast<unsigned int>(message.size()) + 1);
428  m_BufferManager.Commit(buffer, reserved);
429  }
430 
431  void SendPeriodicCounterSelectionPacket(uint32_t capturePeriod,
432  const std::vector<uint16_t>& selectedCounterIds) override
433  {
434  arm::pipe::IgnoreUnused(capturePeriod, selectedCounterIds);
435 
436  std::string message("SendPeriodicCounterSelectionPacket");
437  unsigned int reserved = 0;
438  IPacketBufferPtr buffer = m_BufferManager.Reserve(1024, reserved);
439  memcpy(buffer->GetWritableData(), message.c_str(), static_cast<unsigned int>(message.size()) + 1);
440  m_BufferManager.Commit(buffer, reserved);
441  }
442 
443 private:
444  IBufferManager& m_BufferManager;
445 };
446 
447 class MockCounterDirectory : public ICounterDirectory
448 {
449 public:
450  MockCounterDirectory() = default;
451  ~MockCounterDirectory() = default;
452 
453  // Register profiling objects
454  const Category* RegisterCategory(const std::string& categoryName)
455  {
456  // Create the category
457  CategoryPtr category = std::make_unique<Category>(categoryName);
458  ARM_PIPE_ASSERT(category);
459 
460  // Get the raw category pointer
461  const Category* categoryPtr = category.get();
462  ARM_PIPE_ASSERT(categoryPtr);
463 
464  // Register the category
465  m_Categories.insert(std::move(category));
466 
467  return categoryPtr;
468  }
469 
470  const Device* RegisterDevice(const std::string& deviceName,
471  uint16_t cores = 0)
472  {
473  // Get the device UID
474  uint16_t deviceUid = GetNextUid();
475 
476  // Create the device
477  DevicePtr device = std::make_unique<Device>(deviceUid, deviceName, cores);
478  ARM_PIPE_ASSERT(device);
479 
480  // Get the raw device pointer
481  const Device* devicePtr = device.get();
482  ARM_PIPE_ASSERT(devicePtr);
483 
484  // Register the device
485  m_Devices.insert(std::make_pair(deviceUid, std::move(device)));
486 
487  return devicePtr;
488  }
489 
490  const CounterSet* RegisterCounterSet(
491  const std::string& counterSetName,
492  uint16_t count = 0)
493  {
494  // Get the counter set UID
495  uint16_t counterSetUid = GetNextUid();
496 
497  // Create the counter set
498  CounterSetPtr counterSet = std::make_unique<CounterSet>(counterSetUid, counterSetName, count);
499  ARM_PIPE_ASSERT(counterSet);
500 
501  // Get the raw counter set pointer
502  const CounterSet* counterSetPtr = counterSet.get();
503  ARM_PIPE_ASSERT(counterSetPtr);
504 
505  // Register the counter set
506  m_CounterSets.insert(std::make_pair(counterSetUid, std::move(counterSet)));
507 
508  return counterSetPtr;
509  }
510 
511  const Counter* RegisterCounter(const std::string& backendId,
512  const uint16_t uid,
513  const std::string& parentCategoryName,
514  uint16_t counterClass,
515  uint16_t interpolation,
516  double multiplier,
517  const std::string& name,
518  const std::string& description,
519  const arm::pipe::Optional<std::string>& units = arm::pipe::EmptyOptional(),
520  const arm::pipe::Optional<uint16_t>& numberOfCores = arm::pipe::EmptyOptional(),
521  const arm::pipe::Optional<uint16_t>& deviceUid = arm::pipe::EmptyOptional(),
522  const arm::pipe::Optional<uint16_t>& counterSetUid = arm::pipe::EmptyOptional())
523  {
524  arm::pipe::IgnoreUnused(backendId);
525 
526  // Get the number of cores from the argument only
527  uint16_t deviceCores = numberOfCores.has_value() ? numberOfCores.value() : 0;
528 
529  // Get the device UID
530  uint16_t deviceUidValue = deviceUid.has_value() ? deviceUid.value() : 0;
531 
532  // Get the counter set UID
533  uint16_t counterSetUidValue = counterSetUid.has_value() ? counterSetUid.value() : 0;
534 
535  // Get the counter UIDs and calculate the max counter UID
536  std::vector<uint16_t> counterUids = GetNextCounterUids(uid, deviceCores);
537  ARM_PIPE_ASSERT(!counterUids.empty());
538  uint16_t maxCounterUid = deviceCores <= 1 ? counterUids.front() : counterUids.back();
539 
540  // Get the counter units
541  const std::string unitsValue = units.has_value() ? units.value() : "";
542 
543  // Create the counter
544  CounterPtr counter = std::make_shared<Counter>(armnn::profiling::BACKEND_ID,
545  counterUids.front(),
546  maxCounterUid,
547  counterClass,
548  interpolation,
549  multiplier,
550  name,
551  description,
552  unitsValue,
553  deviceUidValue,
554  counterSetUidValue);
555  ARM_PIPE_ASSERT(counter);
556 
557  // Get the raw counter pointer
558  const Counter* counterPtr = counter.get();
559  ARM_PIPE_ASSERT(counterPtr);
560 
561  // Process multiple counters if necessary
562  for (uint16_t counterUid : counterUids)
563  {
564  // Connect the counter to the parent category
565  Category* parentCategory = const_cast<Category*>(GetCategory(parentCategoryName));
566  ARM_PIPE_ASSERT(parentCategory);
567  parentCategory->m_Counters.push_back(counterUid);
568 
569  // Register the counter
570  m_Counters.insert(std::make_pair(counterUid, counter));
571  }
572 
573  return counterPtr;
574  }
575 
576  // Getters for counts
577  uint16_t GetCategoryCount() const override { return arm::pipe::numeric_cast<uint16_t>(m_Categories.size()); }
578  uint16_t GetDeviceCount() const override { return arm::pipe::numeric_cast<uint16_t>(m_Devices.size()); }
579  uint16_t GetCounterSetCount() const override { return arm::pipe::numeric_cast<uint16_t>(m_CounterSets.size()); }
580  uint16_t GetCounterCount() const override { return arm::pipe::numeric_cast<uint16_t>(m_Counters.size()); }
581 
582  // Getters for collections
583  const Categories& GetCategories() const override { return m_Categories; }
584  const Devices& GetDevices() const override { return m_Devices; }
585  const CounterSets& GetCounterSets() const override { return m_CounterSets; }
586  const Counters& GetCounters() const override { return m_Counters; }
587 
588  // Getters for profiling objects
589  const Category* GetCategory(const std::string& name) const override
590  {
591  auto it = std::find_if(m_Categories.begin(), m_Categories.end(), [&name](const CategoryPtr& category)
592  {
593  ARM_PIPE_ASSERT(category);
594 
595  return category->m_Name == name;
596  });
597 
598  if (it == m_Categories.end())
599  {
600  return nullptr;
601  }
602 
603  return it->get();
604  }
605 
606  const Device* GetDevice(uint16_t uid) const override
607  {
609  return nullptr; // Not used by the unit tests
610  }
611 
612  const CounterSet* GetCounterSet(uint16_t uid) const override
613  {
615  return nullptr; // Not used by the unit tests
616  }
617 
618  const Counter* GetCounter(uint16_t uid) const override
619  {
621  return nullptr; // Not used by the unit tests
622  }
623 
624 private:
625  Categories m_Categories;
626  Devices m_Devices;
627  CounterSets m_CounterSets;
628  Counters m_Counters;
629 };
630 
631 class MockProfilingService : public ProfilingService
632 {
633 public:
634  MockProfilingService(uint16_t maxGlobalCounterId,
635  IInitialiseProfilingService& initialiser,
636  MockBufferManager& mockBufferManager,
637  bool isProfilingEnabled,
638  const CaptureData& captureData) :
639  ProfilingService(maxGlobalCounterId,
640  initialiser,
641  arm::pipe::ARMNN_SOFTWARE_INFO,
642  arm::pipe::ARMNN_SOFTWARE_VERSION,
643  arm::pipe::ARMNN_HARDWARE_VERSION),
644  m_SendCounterPacket(mockBufferManager,
645  arm::pipe::ARMNN_SOFTWARE_INFO,
646  arm::pipe::ARMNN_SOFTWARE_VERSION,
647  arm::pipe::ARMNN_HARDWARE_VERSION),
648  m_IsProfilingEnabled(isProfilingEnabled),
649  m_CaptureData(captureData)
650  {}
651 
652  /// Return the next random Guid in the sequence
653  ProfilingDynamicGuid NextGuid() override
654  {
655  return m_GuidGenerator.NextGuid();
656  }
657 
658  /// Create a ProfilingStaticGuid based on a hash of the string
659  ProfilingStaticGuid GenerateStaticId(const std::string& str) override
660  {
661  return m_GuidGenerator.GenerateStaticId(str);
662  }
663 
664  std::unique_ptr<ISendTimelinePacket> GetSendTimelinePacket() const override
665  {
666  return nullptr;
667  }
668 
669  const ICounterMappings& GetCounterMappings() const override
670  {
671  return m_CounterMapping;
672  }
673 
674  ISendCounterPacket& GetSendCounterPacket() override
675  {
676  return m_SendCounterPacket;
677  }
678 
679  bool IsProfilingEnabled() const override
680  {
681  return m_IsProfilingEnabled;
682  }
683 
684  CaptureData GetCaptureData() override
685  {
686  CaptureData copy(m_CaptureData);
687  return copy;
688  }
689 
690  void RegisterMapping(uint16_t globalCounterId,
691  uint16_t backendCounterId,
692  const std::string& backendId)
693  {
694  m_CounterMapping.RegisterMapping(globalCounterId, backendCounterId, backendId);
695  }
696 
697  void Reset()
698  {
699  m_CounterMapping.Reset();
700  }
701 
702 private:
703  ProfilingGuidGenerator m_GuidGenerator;
704  CounterIdMap m_CounterMapping;
705  SendCounterPacket m_SendCounterPacket;
706  bool m_IsProfilingEnabled;
707  CaptureData m_CaptureData;
708 };
709 
710 class MockProfilingServiceStatus : public IProfilingServiceStatus
711 {
712 public:
713  void NotifyProfilingServiceActive() override {}
714  void WaitForProfilingServiceActivation(unsigned int timeout) override { arm::pipe::IgnoreUnused(timeout); }
715 };
716 
717 } // namespace pipe
718 
719 } // namespace arm
bool WritePacket(arm::pipe::Packet &&packet)
ProfilingDynamicGuid NextGuid() override
Return the next random Guid in the sequence.
const Categories & GetCategories() const override
void SendCounterDirectoryPacket(const ICounterDirectory &counterDirectory) override
const Category * RegisterCategory(const std::string &categoryName)
void Release(IPacketBufferPtr &packetBuffer) override
IPacketBufferPtr Reserve(unsigned int requestedSize, unsigned int &reservedSize) override
const Devices & GetDevices() const override
const Device * RegisterDevice(const std::string &deviceName, uint16_t cores=0)
uint16_t GetCounterCount() const override
MockSendCounterPacket(IBufferManager &sendBuffer)
std::unique_ptr< ISendTimelinePacket > GetSendTimelinePacket() const override
MockBufferManager(unsigned int size)
CaptureData GetCaptureData() override
long CheckForPacket(const std::pair< PacketType, uint32_t > packetInfo)
uint16_t GetDeviceCount() const override
void Commit(unsigned int size) override
arm::pipe::IInitialiseProfilingService IInitialiseProfilingService
Definition: Runtime.hpp:28
void IgnoreUnused(Ts &&...)
const Category * GetCategory(const std::string &name) const override
arm::pipe::Packet ReadPacket(uint32_t timeout) override
const ICounterMappings & GetCounterMappings() const override
void MarkRead(IPacketBufferPtr &packetBuffer) override
bool WritePacket(const unsigned char *buffer, uint32_t length) override
MockPacketBuffer(unsigned int maxSize)
const CounterSets & GetCounterSets() const override
bool IsProfilingEnabled() const override
void MarkRead(IPacketBufferPtr &packetBuffer) override
uint16_t GetCounterSetCount() const override
IPacketBufferPtr GetReadableBuffer() override
IProfilingConnectionPtr GetProfilingConnection(const ProfilingOptions &options) const override
const Counters & GetCounters() const override
uint16_t GetCategoryCount() const override
unsigned int GetSize() const override
void SendPeriodicCounterSelectionPacket(uint32_t capturePeriod, const std::vector< uint16_t > &selectedCounterIds) override
void Commit(IPacketBufferPtr &packetBuffer, unsigned int size, bool notifyConsumer=true) override
void SendPeriodicCounterCapturePacket(uint64_t timestamp, const std::vector< CounterValue > &values) override
const Device * GetDevice(uint16_t uid) const override
void SetConsumer(IConsumer *consumer) override
void RegisterMapping(uint16_t globalCounterId, uint16_t backendCounterId, const std::string &backendId)
void Release(IPacketBufferPtr &packetBuffer) override
ProfilingStaticGuid GenerateStaticId(const std::string &str) override
Create a ProfilingStaticGuid based on a hash of the string.
const CounterSet * GetCounterSet(uint16_t uid) const override
const unsigned char * GetReadableData() const override
const CounterSet * RegisterCounterSet(const std::string &counterSetName, uint16_t count=0)
IPacketBufferPtr GetReadableBuffer() override
void Commit(IPacketBufferPtr &packetBuffer, unsigned int size, bool notifyConsumer=true) override
std::enable_if_t< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > numeric_cast(Source source)
Definition: NumericCast.hpp:35
void SetConsumer(IConsumer *consumer) override
const Counter * GetCounter(uint16_t uid) const override
unsigned char * GetWritableData() override
void WaitForProfilingServiceActivation(unsigned int timeout) override
const Counter * RegisterCounter(const std::string &backendId, const uint16_t uid, const std::string &parentCategoryName, uint16_t counterClass, uint16_t interpolation, double multiplier, const std::string &name, const std::string &description, const arm::pipe::Optional< std::string > &units=arm::pipe::EmptyOptional(), const arm::pipe::Optional< uint16_t > &numberOfCores=arm::pipe::EmptyOptional(), const arm::pipe::Optional< uint16_t > &deviceUid=arm::pipe::EmptyOptional(), const arm::pipe::Optional< uint16_t > &counterSetUid=arm::pipe::EmptyOptional())
MockProfilingService(uint16_t maxGlobalCounterId, IInitialiseProfilingService &initialiser, MockBufferManager &mockBufferManager, bool isProfilingEnabled, const CaptureData &captureData)
ISendCounterPacket & GetSendCounterPacket() override
MockStreamCounterBuffer(unsigned int maxBufferSize=4096)
IPacketBufferPtr Reserve(unsigned int requestedSize, unsigned int &reservedSize) override