ArmNN
 21.02
TimelineUtilityMethodsTests.cpp File Reference
#include "ProfilingMocks.hpp"
#include "ProfilingTestUtils.hpp"
#include <SendTimelinePacket.hpp>
#include <TimelineUtilityMethods.hpp>
#include <LabelsAndEventClasses.hpp>
#include <ProfilingService.hpp>
#include <memory>
#include <boost/test/unit_test.hpp>

Go to the source code of this file.

Functions

 BOOST_AUTO_TEST_CASE (CreateTypedLabelTest)
 
 BOOST_AUTO_TEST_CASE (SendWellKnownLabelsAndEventClassesTest)
 
 BOOST_AUTO_TEST_CASE (CreateNamedTypedChildEntityTest)
 
 BOOST_AUTO_TEST_CASE (DeclareLabelTest)
 
 BOOST_AUTO_TEST_CASE (CreateNameTypeEntityInvalidTest)
 
 BOOST_AUTO_TEST_CASE (CreateNameTypeEntityTest)
 
 BOOST_AUTO_TEST_CASE (RecordEventTest)
 

Function Documentation

◆ BOOST_AUTO_TEST_CASE() [1/7]

BOOST_AUTO_TEST_CASE ( CreateTypedLabelTest  )

Definition at line 23 of file TimelineUtilityMethodsTests.cpp.

References MockBufferManager::GetReadableBuffer(), armnn::profiling::LabelLink, MockBufferManager::MarkRead(), ProfilingService::NextGuid(), VerifyTimelineHeaderBinary(), VerifyTimelineLabelBinaryPacketData(), and VerifyTimelineRelationshipBinaryPacketData().

24 {
25  MockBufferManager mockBufferManager(1024);
26  ProfilingService profilingService;
27 
28  std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
29  TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
30 
31  // Generate first guid to ensure that the named typed entity guid is not 0 on local single test.
32  profilingService.NextGuid();
33 
34  ProfilingGuid entityGuid(123);
35  const std::string entityName = "some entity";
36  ProfilingStaticGuid labelTypeGuid(456);
37 
38  BOOST_CHECK_NO_THROW(timelineUtilityMethods.MarkEntityWithLabel(entityGuid, entityName, labelTypeGuid));
39 
40  // Commit all packets at once
41  timelineUtilityMethods.Commit();
42 
43  // Get the readable buffer
44  auto readableBuffer = mockBufferManager.GetReadableBuffer();
45  BOOST_CHECK(readableBuffer != nullptr);
46  unsigned int size = readableBuffer->GetSize();
47  BOOST_CHECK(size == 76);
48  const unsigned char* readableData = readableBuffer->GetReadableData();
49  BOOST_CHECK(readableData != nullptr);
50 
51  // Utils
52  unsigned int offset = 0;
53 
54  // Verify Header
55  VerifyTimelineHeaderBinary(readableData, offset, 68);
56 
57  // First dataset sent: TimelineLabelBinaryPacket
58  VerifyTimelineLabelBinaryPacketData(EmptyOptional(), entityName, readableData, offset);
59 
60  // Second dataset sent: TimelineRelationshipBinaryPacket
61  VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
62  EmptyOptional(),
63  entityGuid,
64  EmptyOptional(),
65  labelTypeGuid,
66  readableData,
67  offset);
68 
69  // Mark the buffer as read
70  mockBufferManager.MarkRead(readableBuffer);
71 }
ProfilingDynamicGuid NextGuid() override
Return the next random Guid in the sequence.
void VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType relationshipType, Optional< ProfilingGuid > relationshipGuid, Optional< ProfilingGuid > headGuid, Optional< ProfilingGuid > tailGuid, Optional< ProfilingGuid > attributeGuid, const unsigned char *readableData, unsigned int &offset)
void VerifyTimelineHeaderBinary(const unsigned char *readableData, unsigned int &offset, uint32_t packetDataLength)
EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...
Definition: Optional.hpp:32
ProfilingGuid VerifyTimelineLabelBinaryPacketData(Optional< ProfilingGuid > guid, const std::string &label, const unsigned char *readableData, unsigned int &offset)

◆ BOOST_AUTO_TEST_CASE() [2/7]

BOOST_AUTO_TEST_CASE ( SendWellKnownLabelsAndEventClassesTest  )

Definition at line 73 of file TimelineUtilityMethodsTests.cpp.

References LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS, LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS_NAME, LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS_NAME_GUID, LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS, LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS_NAME, LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS_NAME_GUID, LabelsAndEventClasses::BACKENDID_GUID, LabelsAndEventClasses::BACKENDID_LABEL, LabelsAndEventClasses::CHILD_GUID, LabelsAndEventClasses::CHILD_LABEL, LabelsAndEventClasses::CONNECTION, LabelsAndEventClasses::CONNECTION_GUID, LabelsAndEventClasses::EXECUTION_OF_GUID, LabelsAndEventClasses::EXECUTION_OF_LABEL, MockBufferManager::GetReadableBuffer(), LabelsAndEventClasses::INDEX_GUID, LabelsAndEventClasses::INDEX_LABEL, LabelsAndEventClasses::INFERENCE, LabelsAndEventClasses::INFERENCE_GUID, LabelsAndEventClasses::LAYER, LabelsAndEventClasses::LAYER_GUID, MockBufferManager::MarkRead(), LabelsAndEventClasses::NAME_GUID, LabelsAndEventClasses::NAME_LABEL, LabelsAndEventClasses::NETWORK, LabelsAndEventClasses::NETWORK_GUID, LabelsAndEventClasses::PROCESS_ID_GUID, LabelsAndEventClasses::PROCESS_ID_LABEL, TimelineUtilityMethods::SendWellKnownLabelsAndEventClasses(), LabelsAndEventClasses::TYPE_GUID, LabelsAndEventClasses::TYPE_LABEL, VerifyTimelineEventClassBinaryPacketData(), VerifyTimelineHeaderBinary(), VerifyTimelineLabelBinaryPacketData(), LabelsAndEventClasses::WORKLOAD, LabelsAndEventClasses::WORKLOAD_EXECUTION, LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID, and LabelsAndEventClasses::WORKLOAD_GUID.

74 {
75  MockBufferManager mockBufferManager(1024);
76  ProfilingService profilingService;
77  SendTimelinePacket sendTimelinePacket(mockBufferManager);
78 
79  BOOST_CHECK_NO_THROW(TimelineUtilityMethods::SendWellKnownLabelsAndEventClasses(sendTimelinePacket));
80 
81  // Get the readable buffer
82  auto readableBuffer = mockBufferManager.GetReadableBuffer();
83  BOOST_CHECK(readableBuffer != nullptr);
84  unsigned int size = readableBuffer->GetSize();
85  BOOST_TEST(size == 460);
86  const unsigned char* readableData = readableBuffer->GetReadableData();
87  BOOST_CHECK(readableData != nullptr);
88 
89  // Utils
90  unsigned int offset = 0;
91 
92  // Verify Header
93  VerifyTimelineHeaderBinary(readableData, offset, 452);
94 
95  // First "well-known" label: NAME
96  VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::NAME_GUID,
97  LabelsAndEventClasses::NAME_LABEL,
98  readableData,
99  offset);
100 
101  // Second "well-known" label: TYPE
102  VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::TYPE_GUID,
103  LabelsAndEventClasses::TYPE_LABEL,
104  readableData,
105  offset);
106 
107  // Third "well-known" label: INDEX
108  VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::INDEX_GUID,
109  LabelsAndEventClasses::INDEX_LABEL,
110  readableData,
111  offset);
112 
113  // Forth "well-known" label: BACKENDID
114  VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::BACKENDID_GUID,
115  LabelsAndEventClasses::BACKENDID_LABEL,
116  readableData,
117  offset);
118 
119  // Fifth "well-known" label: CHILD
120  VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::CHILD_GUID,
121  LabelsAndEventClasses::CHILD_LABEL,
122  readableData,
123  offset);
124 
125  // Sixth "well-known" label: EXECUTION_OF
126  VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::EXECUTION_OF_GUID,
127  LabelsAndEventClasses::EXECUTION_OF_LABEL,
128  readableData,
129  offset);
130 
131  // Seventh "well-known" label: PROCESS_ID_LABEL
132  VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::PROCESS_ID_GUID,
133  LabelsAndEventClasses::PROCESS_ID_LABEL,
134  readableData,
135  offset);
136 
137  // Well-known types
138  // Layer
139  VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::LAYER_GUID,
140  LabelsAndEventClasses::LAYER,
141  readableData,
142  offset);
143 
144  // Workload
145  VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::WORKLOAD_GUID,
146  LabelsAndEventClasses::WORKLOAD,
147  readableData,
148  offset);
149 
150  // Network
151  VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::NETWORK_GUID,
152  LabelsAndEventClasses::NETWORK,
153  readableData,
154  offset);
155 
156  // Connection
157  VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::CONNECTION_GUID,
158  LabelsAndEventClasses::CONNECTION,
159  readableData,
160  offset);
161 
162  // Inference
163  VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::INFERENCE_GUID,
164  LabelsAndEventClasses::INFERENCE,
165  readableData,
166  offset);
167 
168  // Workload Execution
169  VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::WORKLOAD_EXECUTION_GUID,
170  LabelsAndEventClasses::WORKLOAD_EXECUTION,
171  readableData,
172  offset);
173 
174  // First "well-known" event class: START OF LIFE
175  VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS_NAME_GUID,
176  LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS_NAME,
177  readableData,
178  offset);
179 
180  VerifyTimelineEventClassBinaryPacketData(LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS,
181  LabelsAndEventClasses::ARMNN_PROFILING_SOL_EVENT_CLASS_NAME_GUID,
182  readableData,
183  offset);
184 
185  // Second "well-known" event class: END OF LIFE
186  VerifyTimelineLabelBinaryPacketData(LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS_NAME_GUID,
187  LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS_NAME,
188  readableData,
189  offset);
190 
191  VerifyTimelineEventClassBinaryPacketData(LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS,
192  LabelsAndEventClasses::ARMNN_PROFILING_EOL_EVENT_CLASS_NAME_GUID,
193  readableData,
194  offset);
195 
196  // Mark the buffer as read
197  mockBufferManager.MarkRead(readableBuffer);
198 }
void VerifyTimelineEventClassBinaryPacketData(ProfilingGuid guid, ProfilingGuid nameGuid, const unsigned char *readableData, unsigned int &offset)
void VerifyTimelineHeaderBinary(const unsigned char *readableData, unsigned int &offset, uint32_t packetDataLength)
ProfilingGuid VerifyTimelineLabelBinaryPacketData(Optional< ProfilingGuid > guid, const std::string &label, const unsigned char *readableData, unsigned int &offset)

◆ BOOST_AUTO_TEST_CASE() [3/7]

BOOST_AUTO_TEST_CASE ( CreateNamedTypedChildEntityTest  )

Definition at line 200 of file TimelineUtilityMethodsTests.cpp.

References MockBufferManager::GetReadableBuffer(), armnn::profiling::LabelLink, MockBufferManager::MarkRead(), LabelsAndEventClasses::NAME_GUID, ProfilingService::NextGuid(), armnn::profiling::RetentionLink, LabelsAndEventClasses::TYPE_GUID, VerifyTimelineEntityBinaryPacketData(), VerifyTimelineHeaderBinary(), VerifyTimelineLabelBinaryPacketData(), and VerifyTimelineRelationshipBinaryPacketData().

201 {
202  MockBufferManager mockBufferManager(1024);
203  ProfilingService profilingService;
204  std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
205  TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
206 
207  ProfilingDynamicGuid childEntityGuid(0);
208  ProfilingGuid parentEntityGuid(123);
209  const std::string entityName = "some entity";
210  const std::string entityType = "some type";
211 
212  // Generate first guid to ensure that the named typed entity guid is not 0 on local single test.
213  profilingService.NextGuid();
214 
215  BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedChildEntity(parentEntityGuid, "", entityType),
217  BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedChildEntity(parentEntityGuid, entityName, ""),
219  BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedChildEntity(
220  childEntityGuid, parentEntityGuid, "", entityType), InvalidArgumentException);
221  BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedChildEntity(
222  childEntityGuid, parentEntityGuid, entityName, ""), InvalidArgumentException);
223 
224  BOOST_CHECK_NO_THROW(childEntityGuid = timelineUtilityMethods.CreateNamedTypedChildEntity(parentEntityGuid,
225  entityName,
226  entityType));
227  BOOST_CHECK(childEntityGuid != ProfilingGuid(0));
228 
229  // Commit all packets at once
230  timelineUtilityMethods.Commit();
231 
232  // Get the readable buffer
233  auto readableBuffer = mockBufferManager.GetReadableBuffer();
234  BOOST_CHECK(readableBuffer != nullptr);
235  unsigned int size = readableBuffer->GetSize();
236  BOOST_CHECK(size == 196);
237  const unsigned char* readableData = readableBuffer->GetReadableData();
238  BOOST_CHECK(readableData != nullptr);
239 
240  // Utils
241  unsigned int offset = 0;
242 
243  // Verify Header
244  VerifyTimelineHeaderBinary(readableData, offset, 188);
245 
246  // First dataset sent: TimelineEntityBinaryPacket
247  VerifyTimelineEntityBinaryPacketData(EmptyOptional(), readableData, offset);
248 
249  // Second dataset sent: TimelineLabelBinaryPacket
250  VerifyTimelineLabelBinaryPacketData(EmptyOptional(), entityName, readableData, offset);
251 
252  // Third dataset sent: TimelineRelationshipBinaryPacket
253  VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
254  EmptyOptional(),
255  EmptyOptional(),
256  EmptyOptional(),
257  LabelsAndEventClasses::NAME_GUID,
258  readableData,
259  offset);
260 
261  // Fifth dataset sent: TimelineLabelBinaryPacket
262  VerifyTimelineLabelBinaryPacketData(EmptyOptional(), entityType, readableData, offset);
263 
264  // Sixth dataset sent: TimelineRelationshipBinaryPacket
265  VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
266  EmptyOptional(),
267  EmptyOptional(),
268  EmptyOptional(),
269  LabelsAndEventClasses::TYPE_GUID,
270  readableData,
271  offset);
272 
273 
274  // Eighth dataset sent: TimelineRelationshipBinaryPacket
275  VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::RetentionLink,
276  EmptyOptional(),
277  parentEntityGuid,
278  EmptyOptional(),
279  EmptyOptional(),
280  readableData,
281  offset);
282 
283  // Mark the buffer as read
284  mockBufferManager.MarkRead(readableBuffer);
285 }
ProfilingGuid VerifyTimelineEntityBinaryPacketData(Optional< ProfilingGuid > guid, const unsigned char *readableData, unsigned int &offset)
Strongly typed guids to distinguish between those generated at runtime, and those that are statically...
Definition: Types.hpp:335
ProfilingDynamicGuid NextGuid() override
Return the next random Guid in the sequence.
void VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType relationshipType, Optional< ProfilingGuid > relationshipGuid, Optional< ProfilingGuid > headGuid, Optional< ProfilingGuid > tailGuid, Optional< ProfilingGuid > attributeGuid, const unsigned char *readableData, unsigned int &offset)
void VerifyTimelineHeaderBinary(const unsigned char *readableData, unsigned int &offset, uint32_t packetDataLength)
EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...
Definition: Optional.hpp:32
ProfilingGuid VerifyTimelineLabelBinaryPacketData(Optional< ProfilingGuid > guid, const std::string &label, const unsigned char *readableData, unsigned int &offset)

◆ BOOST_AUTO_TEST_CASE() [4/7]

BOOST_AUTO_TEST_CASE ( DeclareLabelTest  )

Definition at line 287 of file TimelineUtilityMethodsTests.cpp.

References ProfilingService::NextGuid().

288 {
289  MockBufferManager mockBufferManager(1024);
290  ProfilingService profilingService;
291  std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
292  TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
293 
294  // Generate first guid to ensure that the named typed entity guid is not 0 on local single test.
295  profilingService.NextGuid();
296 
297  // Try declaring an invalid (empty) label
298  BOOST_CHECK_THROW(timelineUtilityMethods.DeclareLabel(""), InvalidArgumentException);
299 
300  // Try declaring an invalid (wrong SWTrace format) label
301  BOOST_CHECK_THROW(timelineUtilityMethods.DeclareLabel("inv@lid lab€l"), RuntimeException);
302 
303  // Declare a valid label
304  const std::string labelName = "valid label";
305  ProfilingGuid labelGuid = 0;
306  BOOST_CHECK_NO_THROW(labelGuid = timelineUtilityMethods.DeclareLabel(labelName));
307  BOOST_CHECK(labelGuid != ProfilingGuid(0));
308 
309  // Try adding the same label as before
310  ProfilingGuid newLabelGuid = 0;
311  BOOST_CHECK_NO_THROW(newLabelGuid = timelineUtilityMethods.DeclareLabel(labelName));
312  BOOST_CHECK(newLabelGuid != ProfilingGuid(0));
313  BOOST_CHECK(newLabelGuid == labelGuid);
314 }
ProfilingDynamicGuid NextGuid() override
Return the next random Guid in the sequence.

◆ BOOST_AUTO_TEST_CASE() [5/7]

BOOST_AUTO_TEST_CASE ( CreateNameTypeEntityInvalidTest  )

Definition at line 316 of file TimelineUtilityMethodsTests.cpp.

References ProfilingService::NextGuid().

317 {
318  MockBufferManager mockBufferManager(1024);
319  ProfilingService profilingService;
320  std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
321  TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
322 
323  // Invalid name
324  BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedEntity("", "Type"), InvalidArgumentException);
325 
326  // Invalid type
327  BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedEntity("Name", ""), InvalidArgumentException);
328 
329  ProfilingDynamicGuid guid = profilingService.NextGuid();
330 
331  // CreatedNamedTypedEntity with Guid - Invalid name
332  BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedEntity(guid, "", "Type"),
334 
335  // CreatedNamedTypedEntity with Guid - Invalid type
336  BOOST_CHECK_THROW(timelineUtilityMethods.CreateNamedTypedEntity(guid, "Name", ""),
338 
339 }
Strongly typed guids to distinguish between those generated at runtime, and those that are statically...
Definition: Types.hpp:335
ProfilingDynamicGuid NextGuid() override
Return the next random Guid in the sequence.

◆ BOOST_AUTO_TEST_CASE() [6/7]

BOOST_AUTO_TEST_CASE ( CreateNameTypeEntityTest  )

Definition at line 341 of file TimelineUtilityMethodsTests.cpp.

References MockBufferManager::GetReadableBuffer(), armnn::profiling::LabelLink, MockBufferManager::MarkRead(), LabelsAndEventClasses::NAME_GUID, ProfilingService::NextGuid(), LabelsAndEventClasses::TYPE_GUID, VerifyTimelineEntityBinaryPacketData(), VerifyTimelineHeaderBinary(), VerifyTimelineLabelBinaryPacketData(), and VerifyTimelineRelationshipBinaryPacketData().

342 {
343  MockBufferManager mockBufferManager(1024);
344  ProfilingService profilingService;
345  std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
346  TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
347 
348  const std::string entityName = "Entity0";
349  const std::string entityType = "Type0";
350 
351  // Generate first guid to ensure that the named typed entity guid is not 0 on local single test.
352  profilingService.NextGuid();
353 
354  ProfilingDynamicGuid guid = timelineUtilityMethods.CreateNamedTypedEntity(entityName, entityType);
355  BOOST_CHECK(guid != ProfilingGuid(0));
356 
357  // Commit all packets at once
358  timelineUtilityMethods.Commit();
359 
360  // Get the readable buffer
361  auto readableBuffer = mockBufferManager.GetReadableBuffer();
362  BOOST_CHECK(readableBuffer != nullptr);
363  unsigned int size = readableBuffer->GetSize();
364  BOOST_CHECK(size == 148);
365  const unsigned char* readableData = readableBuffer->GetReadableData();
366  BOOST_CHECK(readableData != nullptr);
367 
368  // Utils
369  unsigned int offset = 0;
370 
371  // Verify Header
372  VerifyTimelineHeaderBinary(readableData, offset, 140);
373 
374  // First dataset sent: TimelineEntityBinaryPacket
375  VerifyTimelineEntityBinaryPacketData(guid, readableData, offset);
376 
377  // Packets for Name Entity
378  // First dataset sent: TimelineLabelBinaryPacket
379  VerifyTimelineLabelBinaryPacketData(EmptyOptional(), entityName, readableData, offset);
380 
381  // Second dataset sent: TimelineRelationshipBinaryPacket
382  VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
383  EmptyOptional(),
384  EmptyOptional(),
385  EmptyOptional(),
386  LabelsAndEventClasses::NAME_GUID,
387  readableData,
388  offset);
389 
390  // Packets for Type Entity
391  // First dataset sent: TimelineLabelBinaryPacket
392  VerifyTimelineLabelBinaryPacketData(EmptyOptional(), entityType, readableData, offset);
393 
394  // Second dataset sent: TimelineRelationshipBinaryPacket
395  VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::LabelLink,
396  EmptyOptional(),
397  EmptyOptional(),
398  EmptyOptional(),
399  LabelsAndEventClasses::TYPE_GUID,
400  readableData,
401  offset);
402 
403 
404  // Mark the buffer as read
405  mockBufferManager.MarkRead(readableBuffer);
406 }
ProfilingGuid VerifyTimelineEntityBinaryPacketData(Optional< ProfilingGuid > guid, const unsigned char *readableData, unsigned int &offset)
Strongly typed guids to distinguish between those generated at runtime, and those that are statically...
Definition: Types.hpp:335
ProfilingDynamicGuid NextGuid() override
Return the next random Guid in the sequence.
void VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType relationshipType, Optional< ProfilingGuid > relationshipGuid, Optional< ProfilingGuid > headGuid, Optional< ProfilingGuid > tailGuid, Optional< ProfilingGuid > attributeGuid, const unsigned char *readableData, unsigned int &offset)
void VerifyTimelineHeaderBinary(const unsigned char *readableData, unsigned int &offset, uint32_t packetDataLength)
EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...
Definition: Optional.hpp:32
ProfilingGuid VerifyTimelineLabelBinaryPacketData(Optional< ProfilingGuid > guid, const std::string &label, const unsigned char *readableData, unsigned int &offset)

◆ BOOST_AUTO_TEST_CASE() [7/7]

BOOST_AUTO_TEST_CASE ( RecordEventTest  )

Definition at line 408 of file TimelineUtilityMethodsTests.cpp.

References BOOST_AUTO_TEST_SUITE_END(), armnn::profiling::ExecutionLink, MockBufferManager::GetReadableBuffer(), MockBufferManager::MarkRead(), ProfilingService::NextGuid(), armnn::profiling::ThreadIdSize, VerifyTimelineEventBinaryPacket(), VerifyTimelineHeaderBinary(), and VerifyTimelineRelationshipBinaryPacketData().

409 {
410  MockBufferManager mockBufferManager(1024);
411  ProfilingService profilingService;
412  std::unique_ptr<ISendTimelinePacket> sendTimelinePacket = std::make_unique<SendTimelinePacket>(mockBufferManager);
413  TimelineUtilityMethods timelineUtilityMethods(sendTimelinePacket);
414  // Generate first guid to ensure that the named typed entity guid is not 0 on local single test.
415  profilingService.NextGuid();
416 
417  ProfilingGuid entityGuid(123);
418  ProfilingStaticGuid eventClassGuid(456);
419  ProfilingDynamicGuid eventGuid(0);
420  BOOST_CHECK_NO_THROW(eventGuid = timelineUtilityMethods.RecordEvent(entityGuid, eventClassGuid));
421  BOOST_CHECK(eventGuid != ProfilingGuid(0));
422 
423  // Commit all packets at once
424  timelineUtilityMethods.Commit();
425 
426  // Get the readable buffer
427  auto readableBuffer = mockBufferManager.GetReadableBuffer();
428  BOOST_CHECK(readableBuffer != nullptr);
429  unsigned int size = readableBuffer->GetSize();
430 
431  BOOST_CHECK(size == 68 + ThreadIdSize);
432 
433  const unsigned char* readableData = readableBuffer->GetReadableData();
434  BOOST_CHECK(readableData != nullptr);
435 
436  // Utils
437  unsigned int offset = 0;
438 
439  // Verify Header
440  VerifyTimelineHeaderBinary(readableData, offset, 60 + ThreadIdSize);
441 
442  // First dataset sent: TimelineEntityBinaryPacket
444 
445  // Second dataset sent: TimelineRelationshipBinaryPacket
446  VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType::ExecutionLink,
447  EmptyOptional(),
448  entityGuid,
449  eventGuid,
450  eventClassGuid,
451  readableData,
452  offset);
453 
454  // Mark the buffer as read
455  mockBufferManager.MarkRead(readableBuffer);
456 }
Strongly typed guids to distinguish between those generated at runtime, and those that are statically...
Definition: Types.hpp:335
ProfilingDynamicGuid NextGuid() override
Return the next random Guid in the sequence.
void VerifyTimelineRelationshipBinaryPacketData(ProfilingRelationshipType relationshipType, Optional< ProfilingGuid > relationshipGuid, Optional< ProfilingGuid > headGuid, Optional< ProfilingGuid > tailGuid, Optional< ProfilingGuid > attributeGuid, const unsigned char *readableData, unsigned int &offset)
constexpr unsigned int ThreadIdSize
void VerifyTimelineHeaderBinary(const unsigned char *readableData, unsigned int &offset, uint32_t packetDataLength)
EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...
Definition: Optional.hpp:32
ProfilingGuid VerifyTimelineEventBinaryPacket(Optional< uint64_t > timestamp, Optional< int > threadId, Optional< ProfilingGuid > eventGuid, const unsigned char *readableData, unsigned int &offset)