aboutsummaryrefslogtreecommitdiff
path: root/21.02/classarmnn_1_1profiling_1_1_send_counter_packet.xhtml
blob: 3b64c7b354dc70fc78f775ebd0a391b4f316b75e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
<!-- Copyright (c) 2020 ARM Limited. -->
<!--                                 -->
<!-- SPDX-License-Identifier: MIT    -->
<!--                                 -->
<!-- HTML header for doxygen 1.8.13-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="robots" content="NOINDEX, NOFOLLOW" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmNN: SendCounterPacket Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 10rem; margin-top: .5rem; margin-left 10px"/>
  <td style="padding-left: 0.5em;">
   <div id="projectname">
   &#160;<span id="projectnumber">21.02</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('classarmnn_1_1profiling_1_1_send_counter_packet.xhtml','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="classarmnn_1_1profiling_1_1_send_counter_packet-members.xhtml">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">SendCounterPacket Class Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p><code>#include &lt;<a class="el" href="_send_counter_packet_8hpp_source.xhtml">SendCounterPacket.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for SendCounterPacket:</div>
<div class="dyncontent">
 <div class="center">
  <img src="classarmnn_1_1profiling_1_1_send_counter_packet.png" usemap="#SendCounterPacket_map" alt=""/>
  <map id="SendCounterPacket_map" name="SendCounterPacket_map">
<area href="classarmnn_1_1profiling_1_1_i_send_counter_packet.xhtml" alt="ISendCounterPacket" shape="rect" coords="0,0,147,24"/>
<area href="classarmnn_1_1profiling_1_1_send_counter_packet_test.xhtml" alt="SendCounterPacketTest" shape="rect" coords="0,112,147,136"/>
</map>
 </div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:acc3cd9f22519728404bf47992ea01f77"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#acc3cd9f22519728404bf47992ea01f77">CategoryRecord</a> = std::vector&lt; uint32_t &gt;</td></tr>
<tr class="separator:acc3cd9f22519728404bf47992ea01f77"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae8cb0ed3b5a68b271532e959ec2507d4"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#ae8cb0ed3b5a68b271532e959ec2507d4">DeviceRecord</a> = std::vector&lt; uint32_t &gt;</td></tr>
<tr class="separator:ae8cb0ed3b5a68b271532e959ec2507d4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a30f18e205737ed0a4057d18b52d48018"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a30f18e205737ed0a4057d18b52d48018">CounterSetRecord</a> = std::vector&lt; uint32_t &gt;</td></tr>
<tr class="separator:a30f18e205737ed0a4057d18b52d48018"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7b90a935def976944525581f5f254068"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a7b90a935def976944525581f5f254068">EventRecord</a> = std::vector&lt; uint32_t &gt;</td></tr>
<tr class="separator:a7b90a935def976944525581f5f254068"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a80cb41c63cb6d3a19870b3a0a8f21ba7"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a80cb41c63cb6d3a19870b3a0a8f21ba7">IndexValuePairsVector</a> = std::vector&lt; <a class="el" href="structarmnn_1_1profiling_1_1_counter_value.xhtml">CounterValue</a> &gt;</td></tr>
<tr class="separator:a80cb41c63cb6d3a19870b3a0a8f21ba7"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_types_classarmnn_1_1profiling_1_1_i_send_counter_packet"><td colspan="2" onclick="javascript:toggleInherit('pub_types_classarmnn_1_1profiling_1_1_i_send_counter_packet')"><img src="closed.png" alt="-"/>&#160;Public Types inherited from <a class="el" href="classarmnn_1_1profiling_1_1_i_send_counter_packet.xhtml">ISendCounterPacket</a></td></tr>
<tr class="memitem:a80cb41c63cb6d3a19870b3a0a8f21ba7 inherit pub_types_classarmnn_1_1profiling_1_1_i_send_counter_packet"><td class="memItemLeft" align="right" valign="top">using&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1profiling_1_1_i_send_counter_packet.xhtml#a80cb41c63cb6d3a19870b3a0a8f21ba7">IndexValuePairsVector</a> = std::vector&lt; <a class="el" href="structarmnn_1_1profiling_1_1_counter_value.xhtml">CounterValue</a> &gt;</td></tr>
<tr class="separator:a80cb41c63cb6d3a19870b3a0a8f21ba7 inherit pub_types_classarmnn_1_1profiling_1_1_i_send_counter_packet"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a3a86900e72afb9fdfee03569bf25fe00"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a3a86900e72afb9fdfee03569bf25fe00">SendCounterPacket</a> (<a class="el" href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml">IBufferManager</a> &amp;buffer)</td></tr>
<tr class="separator:a3a86900e72afb9fdfee03569bf25fe00"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2a2e451c4e4963909b8a6dc7e7653cd1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a2a2e451c4e4963909b8a6dc7e7653cd1">SendStreamMetaDataPacket</a> () override</td></tr>
<tr class="memdesc:a2a2e451c4e4963909b8a6dc7e7653cd1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create and write a StreamMetaDataPacket in the buffer.  <a href="#a2a2e451c4e4963909b8a6dc7e7653cd1">More...</a><br /></td></tr>
<tr class="separator:a2a2e451c4e4963909b8a6dc7e7653cd1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3b526a823530443efec886c4305e52de"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a3b526a823530443efec886c4305e52de">SendCounterDirectoryPacket</a> (const <a class="el" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml">ICounterDirectory</a> &amp;counterDirectory) override</td></tr>
<tr class="memdesc:a3b526a823530443efec886c4305e52de"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create and write a CounterDirectoryPacket from the parameters to the buffer.  <a href="#a3b526a823530443efec886c4305e52de">More...</a><br /></td></tr>
<tr class="separator:a3b526a823530443efec886c4305e52de"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adae3557b7778010227466ce3eed0edb2"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#adae3557b7778010227466ce3eed0edb2">SendPeriodicCounterCapturePacket</a> (uint64_t timestamp, const <a class="el" href="classarmnn_1_1profiling_1_1_i_send_counter_packet.xhtml#a80cb41c63cb6d3a19870b3a0a8f21ba7">IndexValuePairsVector</a> &amp;values) override</td></tr>
<tr class="memdesc:adae3557b7778010227466ce3eed0edb2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create and write a PeriodicCounterCapturePacket from the parameters to the buffer.  <a href="#adae3557b7778010227466ce3eed0edb2">More...</a><br /></td></tr>
<tr class="separator:adae3557b7778010227466ce3eed0edb2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a47406a4d108beb4f20031d370a155a9d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a47406a4d108beb4f20031d370a155a9d">SendPeriodicCounterSelectionPacket</a> (uint32_t capturePeriod, const std::vector&lt; uint16_t &gt; &amp;selectedCounterIds) override</td></tr>
<tr class="memdesc:a47406a4d108beb4f20031d370a155a9d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Create and write a PeriodicCounterSelectionPacket from the parameters to the buffer.  <a href="#a47406a4d108beb4f20031d370a155a9d">More...</a><br /></td></tr>
<tr class="separator:a47406a4d108beb4f20031d370a155a9d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classarmnn_1_1profiling_1_1_i_send_counter_packet"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classarmnn_1_1profiling_1_1_i_send_counter_packet')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classarmnn_1_1profiling_1_1_i_send_counter_packet.xhtml">ISendCounterPacket</a></td></tr>
<tr class="memitem:a583357d6511e6cb6084829e4f7cd1315 inherit pub_methods_classarmnn_1_1profiling_1_1_i_send_counter_packet"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1profiling_1_1_i_send_counter_packet.xhtml#a583357d6511e6cb6084829e4f7cd1315">~ISendCounterPacket</a> ()</td></tr>
<tr class="separator:a583357d6511e6cb6084829e4f7cd1315 inherit pub_methods_classarmnn_1_1profiling_1_1_i_send_counter_packet"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:acd58fc16d0b9e0a3983e3e8719c0f95a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#acd58fc16d0b9e0a3983e3e8719c0f95a">CreateCategoryRecord</a> (const <a class="el" href="namespacearmnn_1_1profiling.xhtml#a8adee535828386656b4c8acfa8bcf871">CategoryPtr</a> &amp;category, const <a class="el" href="namespacearmnn_1_1profiling.xhtml#aeeb6904ffbae435c8d0a7138427688f4">Counters</a> &amp;counters, <a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#acc3cd9f22519728404bf47992ea01f77">CategoryRecord</a> &amp;categoryRecord, std::string &amp;errorMessage)</td></tr>
<tr class="separator:acd58fc16d0b9e0a3983e3e8719c0f95a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af18b6d5da883305c751d6ed00bea006a"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#af18b6d5da883305c751d6ed00bea006a">CreateDeviceRecord</a> (const <a class="el" href="namespacearmnn_1_1profiling.xhtml#a22a0d730c0d08335585e6e8999be8f8b">DevicePtr</a> &amp;device, <a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#ae8cb0ed3b5a68b271532e959ec2507d4">DeviceRecord</a> &amp;deviceRecord, std::string &amp;errorMessage)</td></tr>
<tr class="separator:af18b6d5da883305c751d6ed00bea006a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad0a58db963ae04484cdc3addd8327c3e"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#ad0a58db963ae04484cdc3addd8327c3e">CreateCounterSetRecord</a> (const <a class="el" href="namespacearmnn_1_1profiling.xhtml#abaedc7fcb8ecb2e086482afe10737fb7">CounterSetPtr</a> &amp;counterSet, <a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a30f18e205737ed0a4057d18b52d48018">CounterSetRecord</a> &amp;counterSetRecord, std::string &amp;errorMessage)</td></tr>
<tr class="separator:ad0a58db963ae04484cdc3addd8327c3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac134e8d175e305297b729b4461d9f34f"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#ac134e8d175e305297b729b4461d9f34f">CreateEventRecord</a> (const <a class="el" href="namespacearmnn_1_1profiling.xhtml#a38de53725b010ce63ea7557bb1d270e7">CounterPtr</a> &amp;counter, <a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a7b90a935def976944525581f5f254068">EventRecord</a> &amp;eventRecord, std::string &amp;errorMessage)</td></tr>
<tr class="separator:ac134e8d175e305297b729b4461d9f34f"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock">
<p class="definition">Definition at line <a class="el" href="_send_counter_packet_8hpp_source.xhtml#l00021">21</a> of file <a class="el" href="_send_counter_packet_8hpp_source.xhtml">SendCounterPacket.hpp</a>.</p>
</div><h2 class="groupheader">Member Typedef Documentation</h2>
<a id="acc3cd9f22519728404bf47992ea01f77"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acc3cd9f22519728404bf47992ea01f77">&#9670;&nbsp;</a></span>CategoryRecord</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#acc3cd9f22519728404bf47992ea01f77">CategoryRecord</a> =  std::vector&lt;uint32_t&gt;</td>
        </tr>
      </table>
</div><div class="memdoc">

<p class="definition">Definition at line <a class="el" href="_send_counter_packet_8hpp_source.xhtml#l00024">24</a> of file <a class="el" href="_send_counter_packet_8hpp_source.xhtml">SendCounterPacket.hpp</a>.</p>

</div>
</div>
<a id="a30f18e205737ed0a4057d18b52d48018"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a30f18e205737ed0a4057d18b52d48018">&#9670;&nbsp;</a></span>CounterSetRecord</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a30f18e205737ed0a4057d18b52d48018">CounterSetRecord</a> =  std::vector&lt;uint32_t&gt;</td>
        </tr>
      </table>
</div><div class="memdoc">

<p class="definition">Definition at line <a class="el" href="_send_counter_packet_8hpp_source.xhtml#l00026">26</a> of file <a class="el" href="_send_counter_packet_8hpp_source.xhtml">SendCounterPacket.hpp</a>.</p>

</div>
</div>
<a id="ae8cb0ed3b5a68b271532e959ec2507d4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae8cb0ed3b5a68b271532e959ec2507d4">&#9670;&nbsp;</a></span>DeviceRecord</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#ae8cb0ed3b5a68b271532e959ec2507d4">DeviceRecord</a> =  std::vector&lt;uint32_t&gt;</td>
        </tr>
      </table>
</div><div class="memdoc">

<p class="definition">Definition at line <a class="el" href="_send_counter_packet_8hpp_source.xhtml#l00025">25</a> of file <a class="el" href="_send_counter_packet_8hpp_source.xhtml">SendCounterPacket.hpp</a>.</p>

</div>
</div>
<a id="a7b90a935def976944525581f5f254068"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7b90a935def976944525581f5f254068">&#9670;&nbsp;</a></span>EventRecord</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a7b90a935def976944525581f5f254068">EventRecord</a> =  std::vector&lt;uint32_t&gt;</td>
        </tr>
      </table>
</div><div class="memdoc">

<p class="definition">Definition at line <a class="el" href="_send_counter_packet_8hpp_source.xhtml#l00027">27</a> of file <a class="el" href="_send_counter_packet_8hpp_source.xhtml">SendCounterPacket.hpp</a>.</p>

</div>
</div>
<a id="a80cb41c63cb6d3a19870b3a0a8f21ba7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a80cb41c63cb6d3a19870b3a0a8f21ba7">&#9670;&nbsp;</a></span>IndexValuePairsVector</h2>

<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">using <a class="el" href="classarmnn_1_1profiling_1_1_i_send_counter_packet.xhtml#a80cb41c63cb6d3a19870b3a0a8f21ba7">IndexValuePairsVector</a> =  std::vector&lt;<a class="el" href="structarmnn_1_1profiling_1_1_counter_value.xhtml">CounterValue</a>&gt;</td>
        </tr>
      </table>
</div><div class="memdoc">

<p class="definition">Definition at line <a class="el" href="_send_counter_packet_8hpp_source.xhtml#l00028">28</a> of file <a class="el" href="_send_counter_packet_8hpp_source.xhtml">SendCounterPacket.hpp</a>.</p>

</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="a3a86900e72afb9fdfee03569bf25fe00"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3a86900e72afb9fdfee03569bf25fe00">&#9670;&nbsp;</a></span>SendCounterPacket()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml">SendCounterPacket</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml">IBufferManager</a> &amp;&#160;</td>
          <td class="paramname"><em>buffer</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p class="definition">Definition at line <a class="el" href="_send_counter_packet_8hpp_source.xhtml#l00030">30</a> of file <a class="el" href="_send_counter_packet_8hpp_source.xhtml">SendCounterPacket.hpp</a>.</p>

<p class="reference">References <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00173">SendCounterPacket::CreateCategoryRecord()</a>, <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00346">SendCounterPacket::CreateCounterSetRecord()</a>, <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00296">SendCounterPacket::CreateDeviceRecord()</a>, <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00396">SendCounterPacket::CreateEventRecord()</a>, <a class="el" href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#abb12c72b032fda64ab5a596f5e49fc56">IBufferManager::FlushReadList()</a>, <a class="el" href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#a3712fbb9506d016ac2ed7d56b8788a16">IBufferManager::Release()</a>, <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00548">SendCounterPacket::SendCounterDirectoryPacket()</a>, <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00828">SendCounterPacket::SendPeriodicCounterCapturePacket()</a>, <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00878">SendCounterPacket::SendPeriodicCounterSelectionPacket()</a>, and <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00027">SendCounterPacket::SendStreamMetaDataPacket()</a>.</p>
<div class="fragment"><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;        : m_BufferManager(buffer)</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;    {}</div></div><!-- fragment -->
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="acd58fc16d0b9e0a3983e3e8719c0f95a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acd58fc16d0b9e0a3983e3e8719c0f95a">&#9670;&nbsp;</a></span>CreateCategoryRecord()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool CreateCategoryRecord </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="namespacearmnn_1_1profiling.xhtml#a8adee535828386656b4c8acfa8bcf871">CategoryPtr</a> &amp;&#160;</td>
          <td class="paramname"><em>category</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="namespacearmnn_1_1profiling.xhtml#aeeb6904ffbae435c8d0a7138427688f4">Counters</a> &amp;&#160;</td>
          <td class="paramname"><em>counters</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#acc3cd9f22519728404bf47992ea01f77">CategoryRecord</a> &amp;&#160;</td>
          <td class="paramname"><em>categoryRecord</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::string &amp;&#160;</td>
          <td class="paramname"><em>errorMessage</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p class="definition">Definition at line <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00173">173</a> of file <a class="el" href="_send_counter_packet_8cpp_source.xhtml">SendCounterPacket.cpp</a>.</p>

<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_conversion_8hpp_source.xhtml#l00036">ARMNN_NO_CONVERSION_WARN_BEGIN</a>, <a class="el" href="_conversion_8hpp_source.xhtml#l00037">ARMNN_NO_CONVERSION_WARN_END</a>, <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00396">SendCounterPacket::CreateEventRecord()</a>, <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">armnn::numeric_cast()</a>, and <a class="el" href="_directory_capture_command_handler_8cpp_source.xhtml#l00022">armnn::profiling::uint32_t_size</a>.</p>

<p class="reference">Referenced by <a class="el" href="_send_counter_packet_tests_8hpp_source.xhtml#l00059">SendCounterPacketTest::CreateCategoryRecordTest()</a>, and <a class="el" href="_send_counter_packet_8hpp_source.xhtml#l00030">SendCounterPacket::SendCounterPacket()</a>.</p>
<div class="fragment"><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;{</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(category);</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;    <span class="keyword">const</span> std::string&amp; categoryName = category-&gt;m_Name;</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(!categoryName.empty());</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;    <span class="comment">// Remove any duplicate counters</span></div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    std::vector&lt;uint16_t&gt; categoryCounters;</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> counterIndex = 0; counterIndex &lt; category-&gt;m_Counters.size(); ++counterIndex)</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    {</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;        uint16_t counterUid = category-&gt;m_Counters.at(counterIndex);</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;        <span class="keyword">auto</span> it = counters.find(counterUid);</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        <span class="keywordflow">if</span> (it == counters.end())</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;        {</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;            errorMessage = fmt::format(<span class="stringliteral">&quot;Counter ({}) not found in category ({})&quot;</span>,</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;                                       counterUid,</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;                                       category-&gt;m_Name );</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;        }</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn_1_1profiling.xhtml#a38de53725b010ce63ea7557bb1d270e7">CounterPtr</a>&amp; counter = it-&gt;second;</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;        <span class="keywordflow">if</span> (counterUid == counter-&gt;m_MaxCounterUid)</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;        {</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;            categoryCounters.emplace_back(counterUid);</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;        }</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    }</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    <span class="keywordflow">if</span> (categoryCounters.empty())</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    {</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;        errorMessage = fmt::format(<span class="stringliteral">&quot;No valid counters found in category ({})&quot;</span>, categoryName);</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;    }</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    <span class="comment">// Utils</span></div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a> = <span class="keyword">sizeof</span>(uint32_t);</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    <span class="comment">// Convert the device name into a SWTrace namestring</span></div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    std::vector&lt;uint32_t&gt; categoryNameBuffer;</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    <span class="keywordflow">if</span> (!arm::pipe::StringToSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(categoryName, categoryNameBuffer))</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;    {</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;        errorMessage = fmt::format(<span class="stringliteral">&quot;Cannot convert the name of category ({}) to an SWTrace namestring&quot;</span>,</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;                                   categoryName);</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    }</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    <span class="comment">// Category record word 1:</span></div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    <span class="comment">// 16:31 [16] event_count: number of events belonging to this category</span></div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    <span class="comment">// 0:15  [16] reserved: all zeros</span></div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    <span class="keyword">const</span> uint32_t categoryRecordWord1 = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(categoryCounters.size()) &lt;&lt; 16;</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    <span class="comment">// Category record word 2:</span></div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    <span class="comment">// 0:31 [32] event_pointer_table_offset: offset from the beginning of the category data pool to</span></div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;    <span class="comment">//                                       the event_pointer_table</span></div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;    <span class="keyword">const</span> uint32_t categoryRecordWord2 = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(3u * <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>);</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    <span class="comment">// Process the event records</span></div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> counterCount = categoryCounters.size();</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    std::vector&lt;EventRecord&gt; eventRecords(counterCount);</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;    std::vector&lt;uint32_t&gt; eventRecordOffsets(counterCount, 0);</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    <span class="keywordtype">size_t</span> eventRecordsSize = 0;</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;    uint32_t eventRecordsOffset = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;                    (eventRecords.size() + categoryNameBuffer.size()) * uint32_t_size);</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> counterIndex = 0, eventRecordIndex = 0, eventRecordOffsetIndex = 0;</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;         counterIndex &lt; counterCount;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;         counterIndex++, eventRecordIndex++, eventRecordOffsetIndex++)</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;    {</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;        uint16_t counterUid = categoryCounters.at(counterIndex);</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;        <span class="keyword">auto</span> it = counters.find(counterUid);</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn_1_1profiling.xhtml#a38de53725b010ce63ea7557bb1d270e7">CounterPtr</a>&amp; counter = it-&gt;second;</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;        <a class="code" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a7b90a935def976944525581f5f254068">EventRecord</a>&amp; eventRecord = eventRecords.at(eventRecordIndex);</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#ac134e8d175e305297b729b4461d9f34f">CreateEventRecord</a>(counter, eventRecord, errorMessage))</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;        {</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;        }</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;        <span class="comment">// Update the total size in words of the event records</span></div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;        eventRecordsSize += eventRecord.size();</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;        <span class="comment">// Add the event record offset to the event pointer table offset field</span></div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;        eventRecordOffsets[eventRecordOffsetIndex] = eventRecordsOffset;</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;        eventRecordsOffset += <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(eventRecord.size() * <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>);</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;    }</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    <span class="comment">// Category record word 3:</span></div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;    <span class="comment">// 0:31 [32] name_offset (offset from the beginning of the category data pool to the name field)</span></div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;    <span class="keyword">const</span> uint32_t categoryRecordWord3 = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;            (3u + eventRecordOffsets.size()) * uint32_t_size);</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;    <span class="comment">// Calculate the size in words of the category record</span></div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> categoryRecordSize = 3u +<span class="comment">// The size of the fixed part (device + counter_set + event_count +</span></div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;                                          <span class="comment">// reserved + event_pointer_table_offset + name_offset)</span></div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;                                      eventRecordOffsets.size() + <span class="comment">// The size of the variable part (</span></div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;                                      categoryNameBuffer.size() + <span class="comment">// the event pointer table + the category name</span></div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;                                      eventRecordsSize;           <span class="comment">// including the null-terminator + the event records)</span></div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;    <span class="comment">// Allocate the necessary space for the category record</span></div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    categoryRecord.resize(categoryRecordSize);</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;    <a class="code" href="_conversion_8hpp.xhtml#aeaf555aa7f39f7ba192a3812cb1b7d07">ARMNN_NO_CONVERSION_WARN_BEGIN</a></div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;    <span class="comment">// Create the category record</span></div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    categoryRecord[0] = categoryRecordWord1; <span class="comment">// event_count + reserved</span></div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;    categoryRecord[1] = categoryRecordWord2; <span class="comment">// event_pointer_table_offset</span></div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    categoryRecord[2] = categoryRecordWord3; <span class="comment">// name_offset</span></div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    <span class="keyword">auto</span> offset = categoryRecord.begin() + 3u;</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    std::copy(eventRecordOffsets.begin(), eventRecordOffsets.end(), offset); <span class="comment">// event_pointer_table</span></div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;    offset += eventRecordOffsets.size();</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    std::copy(categoryNameBuffer.begin(), categoryNameBuffer.end(), offset); <span class="comment">// name</span></div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;    offset += categoryNameBuffer.size();</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a7b90a935def976944525581f5f254068">EventRecord</a>&amp; eventRecord : eventRecords)</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;    {</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;        std::copy(eventRecord.begin(), eventRecord.end(), offset); <span class="comment">// event_record</span></div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;        offset += eventRecord.size();</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;    }</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;    <a class="code" href="_conversion_8hpp.xhtml#a71cf574f1296e09d0ce16157bdeb6619">ARMNN_NO_CONVERSION_WARN_END</a></div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;}</div><div class="ttc" id="_conversion_8hpp_xhtml_a71cf574f1296e09d0ce16157bdeb6619"><div class="ttname"><a href="_conversion_8hpp.xhtml#a71cf574f1296e09d0ce16157bdeb6619">ARMNN_NO_CONVERSION_WARN_END</a></div><div class="ttdeci">#define ARMNN_NO_CONVERSION_WARN_END</div><div class="ttdef"><b>Definition:</b> <a href="_conversion_8hpp_source.xhtml#l00037">Conversion.hpp:37</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_send_counter_packet_xhtml_a7b90a935def976944525581f5f254068"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a7b90a935def976944525581f5f254068">armnn::profiling::SendCounterPacket::EventRecord</a></div><div class="ttdeci">std::vector&lt; uint32_t &gt; EventRecord</div><div class="ttdef"><b>Definition:</b> <a href="_send_counter_packet_8hpp_source.xhtml#l00027">SendCounterPacket.hpp:27</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a38de53725b010ce63ea7557bb1d270e7"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a38de53725b010ce63ea7557bb1d270e7">armnn::profiling::CounterPtr</a></div><div class="ttdeci">std::shared_ptr&lt; Counter &gt; CounterPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00032">ICounterDirectory.hpp:32</a></div></div>
<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
<div class="ttc" id="_conversion_8hpp_xhtml_aeaf555aa7f39f7ba192a3812cb1b7d07"><div class="ttname"><a href="_conversion_8hpp.xhtml#aeaf555aa7f39f7ba192a3812cb1b7d07">ARMNN_NO_CONVERSION_WARN_BEGIN</a></div><div class="ttdeci">#define ARMNN_NO_CONVERSION_WARN_BEGIN</div><div class="ttdef"><b>Definition:</b> <a href="_conversion_8hpp_source.xhtml#l00036">Conversion.hpp:36</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_aabcf5c25522e8a0542c95174056cfcac"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">armnn::profiling::uint32_t_size</a></div><div class="ttdeci">uint32_t uint32_t_size</div><div class="ttdef"><b>Definition:</b> <a href="_directory_capture_command_handler_8cpp_source.xhtml#l00022">DirectoryCaptureCommandHandler.cpp:22</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_send_counter_packet_xhtml_ac134e8d175e305297b729b4461d9f34f"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#ac134e8d175e305297b729b4461d9f34f">armnn::profiling::SendCounterPacket::CreateEventRecord</a></div><div class="ttdeci">bool CreateEventRecord(const CounterPtr &amp;counter, EventRecord &amp;eventRecord, std::string &amp;errorMessage)</div><div class="ttdef"><b>Definition:</b> <a href="_send_counter_packet_8cpp_source.xhtml#l00396">SendCounterPacket.cpp:396</a></div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ad0a58db963ae04484cdc3addd8327c3e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad0a58db963ae04484cdc3addd8327c3e">&#9670;&nbsp;</a></span>CreateCounterSetRecord()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool CreateCounterSetRecord </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="namespacearmnn_1_1profiling.xhtml#abaedc7fcb8ecb2e086482afe10737fb7">CounterSetPtr</a> &amp;&#160;</td>
          <td class="paramname"><em>counterSet</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a30f18e205737ed0a4057d18b52d48018">CounterSetRecord</a> &amp;&#160;</td>
          <td class="paramname"><em>counterSetRecord</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::string &amp;&#160;</td>
          <td class="paramname"><em>errorMessage</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p class="definition">Definition at line <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00346">346</a> of file <a class="el" href="_send_counter_packet_8cpp_source.xhtml">SendCounterPacket.cpp</a>.</p>

<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>.</p>

<p class="reference">Referenced by <a class="el" href="_send_counter_packet_tests_8hpp_source.xhtml#l00045">SendCounterPacketTest::CreateCounterSetRecordTest()</a>, and <a class="el" href="_send_counter_packet_8hpp_source.xhtml#l00030">SendCounterPacket::SendCounterPacket()</a>.</p>
<div class="fragment"><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;{</div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(counterSet);</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    uint16_t counterSetUid = counterSet-&gt;m_Uid;</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;    <span class="keyword">const</span> std::string&amp; counterSetName = counterSet-&gt;m_Name;</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;    uint16_t counterSetCount = counterSet-&gt;m_Count;</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(!counterSetName.empty());</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;    <span class="comment">// Counter set record word 0:</span></div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    <span class="comment">// 16:31 [16] uid: the unique identifier for the counter_set</span></div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;    <span class="comment">// 0:15  [16] count: the number of counters which can be active in this set at any one time</span></div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;    <span class="keyword">const</span> uint32_t counterSetRecordWord0 = (<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(counterSetUid) &lt;&lt; 16) |</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;                                           (<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(counterSetCount));</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    <span class="comment">// Counter set record word 1:</span></div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;    <span class="comment">// 0:31 [32] name_offset: offset from the beginning of the counter set pool to the name field</span></div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    <span class="keyword">const</span> uint32_t counterSetRecordWord1 = 8u; <span class="comment">// The offset is always eight here, as the name field is always</span></div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;                                               <span class="comment">// the first (and only) item in the pool after the two counter set words</span></div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;    <span class="comment">// Convert the device name into a SWTrace namestring</span></div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;    std::vector&lt;uint32_t&gt; counterSetNameBuffer;</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;    <span class="keywordflow">if</span> (!arm::pipe::StringToSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(counterSet-&gt;m_Name, counterSetNameBuffer))</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;    {</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;        errorMessage = fmt::format(<span class="stringliteral">&quot;Cannot convert the name of counter set {} ({}) to an SWTrace namestring&quot;</span>,</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;                                   counterSetUid,</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;                                   counterSetName);</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;    }</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;    <span class="comment">// Calculate the size in words of the counter set record</span></div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> counterSetRecordSize = 2u + <span class="comment">// The size of the fixed part (uid + cores + name_offset)</span></div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;                                        counterSetNameBuffer.size(); <span class="comment">// The size of the variable part (the counter set</span></div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;                                                                     <span class="comment">// name including the null-terminator)</span></div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;    <span class="comment">// Allocate the space for the counter set record</span></div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;    counterSetRecord.resize(counterSetRecordSize);</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    <span class="comment">// Create the counter set record</span></div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;    counterSetRecord[0] = counterSetRecordWord0; <span class="comment">// uid + core</span></div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;    counterSetRecord[1] = counterSetRecordWord1; <span class="comment">// name_offset</span></div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;    <span class="keyword">auto</span> offset = counterSetRecord.begin() + 2u;</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;    std::copy(counterSetNameBuffer.begin(), counterSetNameBuffer.end(), offset); <span class="comment">// name</span></div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
</div><!-- fragment -->
</div>
</div>
<a id="af18b6d5da883305c751d6ed00bea006a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af18b6d5da883305c751d6ed00bea006a">&#9670;&nbsp;</a></span>CreateDeviceRecord()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool CreateDeviceRecord </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="namespacearmnn_1_1profiling.xhtml#a22a0d730c0d08335585e6e8999be8f8b">DevicePtr</a> &amp;&#160;</td>
          <td class="paramname"><em>device</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#ae8cb0ed3b5a68b271532e959ec2507d4">DeviceRecord</a> &amp;&#160;</td>
          <td class="paramname"><em>deviceRecord</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::string &amp;&#160;</td>
          <td class="paramname"><em>errorMessage</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p class="definition">Definition at line <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00296">296</a> of file <a class="el" href="_send_counter_packet_8cpp_source.xhtml">SendCounterPacket.cpp</a>.</p>

<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>.</p>

<p class="reference">Referenced by <a class="el" href="_send_counter_packet_tests_8hpp_source.xhtml#l00038">SendCounterPacketTest::CreateDeviceRecordTest()</a>, and <a class="el" href="_send_counter_packet_8hpp_source.xhtml#l00030">SendCounterPacket::SendCounterPacket()</a>.</p>
<div class="fragment"><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;{</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(device);</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;    uint16_t deviceUid = device-&gt;m_Uid;</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    <span class="keyword">const</span> std::string&amp; deviceName = device-&gt;m_Name;</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    uint16_t deviceCores = device-&gt;m_Cores;</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(!deviceName.empty());</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;    <span class="comment">// Device record word 0:</span></div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    <span class="comment">// 16:31 [16] uid: the unique identifier for the device</span></div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;    <span class="comment">// 0:15  [16] cores: the number of individual streams of counters for one or more cores of some device</span></div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    <span class="keyword">const</span> uint32_t deviceRecordWord0 = (<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(deviceUid) &lt;&lt; 16) |</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;                                 (<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(deviceCores));</div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;    <span class="comment">// Device record word 1:</span></div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    <span class="comment">// 0:31 [32] name_offset: offset from the beginning of the device record pool to the name field</span></div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    <span class="keyword">const</span> uint32_t deviceRecordWord1 = 8u; <span class="comment">// The offset is always eight here, as the name field is always</span></div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;                                           <span class="comment">// the first (and only) item in the pool and there are two device words</span></div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;    <span class="comment">// Convert the device name into a SWTrace string</span></div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;    std::vector&lt;uint32_t&gt; deviceNameBuffer;</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;    <span class="keywordflow">if</span> (!arm::pipe::StringToSwTraceString&lt;arm::pipe::SwTraceCharPolicy&gt;(deviceName, deviceNameBuffer))</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    {</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;        errorMessage = fmt::format(<span class="stringliteral">&quot;Cannot convert the name of device {} ({}) to an SWTrace string&quot;</span>,</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;                                   deviceUid,</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;                                   deviceName);</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;    }</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;    <span class="comment">// Calculate the size in words of the device record</span></div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> deviceRecordSize = 2u + <span class="comment">// The size of the fixed part (uid + cores + name_offset)</span></div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;                              deviceNameBuffer.size(); <span class="comment">// The size of the variable part (the device name including</span></div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;                                                       <span class="comment">// the null-terminator)</span></div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;    <span class="comment">// Allocate the necessary space for the device record</span></div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;    deviceRecord.resize(deviceRecordSize);</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    <span class="comment">// Create the device record</span></div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;    deviceRecord[0] = deviceRecordWord0; <span class="comment">// uid + core</span></div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;    deviceRecord[1] = deviceRecordWord1; <span class="comment">// name_offset</span></div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;    <span class="keyword">auto</span> offset = deviceRecord.begin() + 2u;</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;    std::copy(deviceNameBuffer.begin(), deviceNameBuffer.end(), offset); <span class="comment">// name</span></div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;}</div><div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
</div><!-- fragment -->
</div>
</div>
<a id="ac134e8d175e305297b729b4461d9f34f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac134e8d175e305297b729b4461d9f34f">&#9670;&nbsp;</a></span>CreateEventRecord()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool CreateEventRecord </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="namespacearmnn_1_1profiling.xhtml#a38de53725b010ce63ea7557bb1d270e7">CounterPtr</a> &amp;&#160;</td>
          <td class="paramname"><em>counter</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a7b90a935def976944525581f5f254068">EventRecord</a> &amp;&#160;</td>
          <td class="paramname"><em>eventRecord</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::string &amp;&#160;</td>
          <td class="paramname"><em>errorMessage</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p class="definition">Definition at line <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00396">396</a> of file <a class="el" href="_send_counter_packet_8cpp_source.xhtml">SendCounterPacket.cpp</a>.</p>

<p class="reference">References <a class="el" href="_assert_8hpp_source.xhtml#l00014">ARMNN_ASSERT</a>, <a class="el" href="_conversion_8hpp_source.xhtml#l00036">ARMNN_NO_CONVERSION_WARN_BEGIN</a>, <a class="el" href="_conversion_8hpp_source.xhtml#l00037">ARMNN_NO_CONVERSION_WARN_END</a>, <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">armnn::numeric_cast()</a>, and <a class="el" href="_directory_capture_command_handler_8cpp_source.xhtml#l00022">armnn::profiling::uint32_t_size</a>.</p>

<p class="reference">Referenced by <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00173">SendCounterPacket::CreateCategoryRecord()</a>, <a class="el" href="_send_counter_packet_tests_8hpp_source.xhtml#l00052">SendCounterPacketTest::CreateEventRecordTest()</a>, and <a class="el" href="_send_counter_packet_8hpp_source.xhtml#l00030">SendCounterPacket::SendCounterPacket()</a>.</p>
<div class="fragment"><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;{</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(counter);</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;    uint16_t           counterUid           = counter-&gt;m_Uid;</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;    uint16_t           maxCounterUid        = counter-&gt;m_MaxCounterUid;</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;    uint16_t           deviceUid            = counter-&gt;m_DeviceUid;</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;    uint16_t           counterSetUid        = counter-&gt;m_CounterSetUid;</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;    uint16_t           counterClass         = counter-&gt;m_Class;</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;    uint16_t           counterInterpolation = counter-&gt;m_Interpolation;</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;    <span class="keywordtype">double</span>             counterMultiplier    = counter-&gt;m_Multiplier;</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;    <span class="keyword">const</span> std::string&amp; counterName          = counter-&gt;m_Name;</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;    <span class="keyword">const</span> std::string&amp; counterDescription   = counter-&gt;m_Description;</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;    <span class="keyword">const</span> std::string&amp; counterUnits         = counter-&gt;m_Units;</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(counterClass == 0 || counterClass == 1);</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(counterInterpolation == 0 || counterInterpolation == 1);</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(counterMultiplier);</div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    <span class="comment">// Utils</span></div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a> = <span class="keyword">sizeof</span>(uint32_t);</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;    <span class="comment">// eventRecordBlockSize is the size of the fixed part</span></div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;    <span class="comment">// (counter_uid + max_counter_uid + device +</span></div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;    <span class="comment">// counter_set + class + interpolation +</span></div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;    <span class="comment">// multiplier + name_offset + description_offset +</span></div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;    <span class="comment">// units_offset)</span></div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> eventRecordBlockSize = 8u;</div><div class="line"><a name="l00425"></a><span class="lineno">  425</span>&#160;</div><div class="line"><a name="l00426"></a><span class="lineno">  426</span>&#160;    <span class="comment">// Event record word 0:</span></div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;    <span class="comment">// 16:31 [16] max_counter_uid: if the device this event is associated with has more than one core and there</span></div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;    <span class="comment">//                             is one of these counters per core this value will be set to</span></div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;    <span class="comment">//                             (counter_uid + cores (from device_record)) - 1.</span></div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;    <span class="comment">//                             If there is only a single core then this value will be the same as</span></div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;    <span class="comment">//                             the counter_uid value</span></div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;    <span class="comment">// 0:15  [16] count_uid: unique ID for the counter. Must be unique across all counters in all categories</span></div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;    <span class="keyword">const</span> uint32_t eventRecordWord0 = (<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(maxCounterUid) &lt;&lt; 16) |</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;                                      (<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(counterUid));</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;    <span class="comment">// Event record word 1:</span></div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;    <span class="comment">// 16:31 [16] device: UID of the device this event is associated with. Set to zero if the event is NOT</span></div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;    <span class="comment">//                    associated with a device</span></div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;    <span class="comment">// 0:15  [16] counter_set: UID of the counter_set this event is associated with. Set to zero if the event</span></div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;    <span class="comment">//                         is NOT associated with a counter_set</span></div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;    <span class="keyword">const</span> uint32_t eventRecordWord1 = (<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(deviceUid) &lt;&lt; 16) |</div><div class="line"><a name="l00442"></a><span class="lineno">  442</span>&#160;                                      (<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(counterSetUid));</div><div class="line"><a name="l00443"></a><span class="lineno">  443</span>&#160;</div><div class="line"><a name="l00444"></a><span class="lineno">  444</span>&#160;    <span class="comment">// Event record word 2:</span></div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;    <span class="comment">// 16:31 [16] class: type describing how to treat each data point in a stream of data points</span></div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;    <span class="comment">// 0:15  [16] interpolation: type describing how to interpolate each data point in a stream of data points</span></div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;    <span class="keyword">const</span> uint32_t eventRecordWord2 = (<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(counterClass) &lt;&lt; 16) |</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;                                      (<span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(counterInterpolation));</div><div class="line"><a name="l00449"></a><span class="lineno">  449</span>&#160;</div><div class="line"><a name="l00450"></a><span class="lineno">  450</span>&#160;    <span class="comment">// Event record word 3-4:</span></div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;    <span class="comment">// 0:63 [64] multiplier: internal data stream is represented as integer values, this allows scaling of</span></div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;    <span class="comment">//                       those values as if they are fixed point numbers. Zero is not a valid value</span></div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;    uint32_t multiplier[2] = { 0u, 0u };</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(<span class="keyword">sizeof</span>(counterMultiplier) == <span class="keyword">sizeof</span>(multiplier));</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;    std::memcpy(multiplier, &amp;counterMultiplier, <span class="keyword">sizeof</span>(multiplier));</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;    <span class="keyword">const</span> uint32_t eventRecordWord3 = multiplier[0];</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;    <span class="keyword">const</span> uint32_t eventRecordWord4 = multiplier[1];</div><div class="line"><a name="l00458"></a><span class="lineno">  458</span>&#160;</div><div class="line"><a name="l00459"></a><span class="lineno">  459</span>&#160;    <span class="comment">// Event record word 5:</span></div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;    <span class="comment">// 0:31 [32] name_offset: offset from the beginning of the event record pool to the name field</span></div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;    <span class="keyword">const</span> uint32_t eventRecordWord5 = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(eventRecordBlockSize * <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>);</div><div class="line"><a name="l00462"></a><span class="lineno">  462</span>&#160;</div><div class="line"><a name="l00463"></a><span class="lineno">  463</span>&#160;    <span class="comment">// Convert the counter name into a SWTrace string</span></div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;    std::vector&lt;uint32_t&gt; counterNameBuffer;</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;    <span class="keywordflow">if</span> (!arm::pipe::StringToSwTraceString&lt;arm::pipe::SwTraceCharPolicy&gt;(counterName, counterNameBuffer))</div><div class="line"><a name="l00466"></a><span class="lineno">  466</span>&#160;    {</div><div class="line"><a name="l00467"></a><span class="lineno">  467</span>&#160;        errorMessage = fmt::format(<span class="stringliteral">&quot;Cannot convert the name of counter {} (name: {}) to an SWTrace string&quot;</span>,</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;                                   counterUid,</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;                                   counterName);</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;    }</div><div class="line"><a name="l00472"></a><span class="lineno">  472</span>&#160;</div><div class="line"><a name="l00473"></a><span class="lineno">  473</span>&#160;    <span class="comment">// Event record word 6:</span></div><div class="line"><a name="l00474"></a><span class="lineno">  474</span>&#160;    <span class="comment">// 0:31 [32] description_offset: offset from the beginning of the event record pool to the description field</span></div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;    <span class="comment">// The size of the name buffer in bytes</span></div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;    uint32_t eventRecordWord6 =</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;            <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>((counterNameBuffer.size() + eventRecordBlockSize) * uint32_t_size);</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;    <span class="comment">// Convert the counter description into a SWTrace string</span></div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;    std::vector&lt;uint32_t&gt; counterDescriptionBuffer;</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;    <span class="keywordflow">if</span> (!arm::pipe::StringToSwTraceString&lt;arm::pipe::SwTraceCharPolicy&gt;(counterDescription, counterDescriptionBuffer))</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;    {</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;        errorMessage = fmt::format(<span class="stringliteral">&quot;Cannot convert the description of counter {} (description: {}) &quot;</span></div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;                                   <span class="stringliteral">&quot;to an SWTrace string&quot;</span>,</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;                                   counterUid,</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;                                   counterName);</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;    }</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;    <span class="comment">// Event record word 7:</span></div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;    <span class="comment">// 0:31 [32] units_offset: (optional) offset from the beginning of the event record pool to the units field.</span></div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;    <span class="comment">//                         An offset value of zero indicates this field is not provided</span></div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;    <span class="keywordtype">bool</span> includeUnits = !counterUnits.empty();</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;    <span class="comment">// The size of the description buffer in bytes</span></div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;    <span class="keyword">const</span> uint32_t eventRecordWord7 = includeUnits ?</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;                                eventRecordWord6 +</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;                                <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(counterDescriptionBuffer.size()</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;                                * <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>) :</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;                                0;</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;    <span class="comment">// Convert the counter units into a SWTrace namestring (optional)</span></div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;    std::vector&lt;uint32_t&gt; counterUnitsBuffer;</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;    <span class="keywordflow">if</span> (includeUnits)</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;    {</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;        <span class="comment">// Convert the counter units into a SWTrace namestring</span></div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;        <span class="keywordflow">if</span> (!arm::pipe::StringToSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(counterUnits, counterUnitsBuffer))</div><div class="line"><a name="l00507"></a><span class="lineno">  507</span>&#160;        {</div><div class="line"><a name="l00508"></a><span class="lineno">  508</span>&#160;            errorMessage = fmt::format(<span class="stringliteral">&quot;Cannot convert the units of counter {} (units: {}) to an SWTrace string&quot;</span>,</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;                                       counterUid,</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;                                       counterName);</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;        }</div><div class="line"><a name="l00513"></a><span class="lineno">  513</span>&#160;    }</div><div class="line"><a name="l00514"></a><span class="lineno">  514</span>&#160;</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;    <span class="comment">// Calculate the size in words of the event record</span></div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> eventRecordSize = eventRecordBlockSize +</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;                                   counterNameBuffer.size() +        <span class="comment">// The size of the variable part (the counter name,</span></div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;                                   counterDescriptionBuffer.size() + <span class="comment">// description and units</span></div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;                                   counterUnitsBuffer.size();        <span class="comment">// including the null-terminator)</span></div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;    <span class="comment">// Allocate the space for the event record</span></div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;    eventRecord.resize(eventRecordSize);</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    <a class="code" href="_conversion_8hpp.xhtml#aeaf555aa7f39f7ba192a3812cb1b7d07">ARMNN_NO_CONVERSION_WARN_BEGIN</a></div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;    <span class="comment">// Create the event record</span></div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;    eventRecord[0] = eventRecordWord0; <span class="comment">// max_counter_uid + counter_uid</span></div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;    eventRecord[1] = eventRecordWord1; <span class="comment">// device + counter_set</span></div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    eventRecord[2] = eventRecordWord2; <span class="comment">// class + interpolation</span></div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;    eventRecord[3] = eventRecordWord3; <span class="comment">// multiplier</span></div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;    eventRecord[4] = eventRecordWord4; <span class="comment">// multiplier</span></div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    eventRecord[5] = eventRecordWord5; <span class="comment">// name_offset</span></div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;    eventRecord[6] = eventRecordWord6; <span class="comment">// description_offset</span></div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;    eventRecord[7] = eventRecordWord7; <span class="comment">// units_offset</span></div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;    <span class="keyword">auto</span> offset = eventRecord.begin() + 8u;</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;    std::copy(counterNameBuffer.begin(), counterNameBuffer.end(), offset); <span class="comment">// name</span></div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;    offset += counterNameBuffer.size();</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;    std::copy(counterDescriptionBuffer.begin(), counterDescriptionBuffer.end(), offset); <span class="comment">// description</span></div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;    <span class="keywordflow">if</span> (includeUnits)</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;    {</div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;        offset += counterDescriptionBuffer.size();</div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;        std::copy(counterUnitsBuffer.begin(), counterUnitsBuffer.end(), offset); <span class="comment">// units</span></div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;    }</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;    <a class="code" href="_conversion_8hpp.xhtml#a71cf574f1296e09d0ce16157bdeb6619">ARMNN_NO_CONVERSION_WARN_END</a></div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;}</div><div class="ttc" id="_conversion_8hpp_xhtml_a71cf574f1296e09d0ce16157bdeb6619"><div class="ttname"><a href="_conversion_8hpp.xhtml#a71cf574f1296e09d0ce16157bdeb6619">ARMNN_NO_CONVERSION_WARN_END</a></div><div class="ttdeci">#define ARMNN_NO_CONVERSION_WARN_END</div><div class="ttdef"><b>Definition:</b> <a href="_conversion_8hpp_source.xhtml#l00037">Conversion.hpp:37</a></div></div>
<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
<div class="ttc" id="_conversion_8hpp_xhtml_aeaf555aa7f39f7ba192a3812cb1b7d07"><div class="ttname"><a href="_conversion_8hpp.xhtml#aeaf555aa7f39f7ba192a3812cb1b7d07">ARMNN_NO_CONVERSION_WARN_BEGIN</a></div><div class="ttdeci">#define ARMNN_NO_CONVERSION_WARN_BEGIN</div><div class="ttdef"><b>Definition:</b> <a href="_conversion_8hpp_source.xhtml#l00036">Conversion.hpp:36</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_aabcf5c25522e8a0542c95174056cfcac"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">armnn::profiling::uint32_t_size</a></div><div class="ttdeci">uint32_t uint32_t_size</div><div class="ttdef"><b>Definition:</b> <a href="_directory_capture_command_handler_8cpp_source.xhtml#l00022">DirectoryCaptureCommandHandler.cpp:22</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a3b526a823530443efec886c4305e52de"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3b526a823530443efec886c4305e52de">&#9670;&nbsp;</a></span>SendCounterDirectoryPacket()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void SendCounterDirectoryPacket </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml">ICounterDirectory</a> &amp;&#160;</td>
          <td class="paramname"><em>counterDirectory</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Create and write a CounterDirectoryPacket from the parameters to the buffer. </p>

<p>Implements <a class="el" href="classarmnn_1_1profiling_1_1_i_send_counter_packet.xhtml#ae3331355e62b6008340c27e82be9a851">ISendCounterPacket</a>.</p>

<p class="definition">Definition at line <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00548">548</a> of file <a class="el" href="_send_counter_packet_8cpp_source.xhtml">SendCounterPacket.cpp</a>.</p>

<p class="reference">References <a class="el" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#ab43b0472c37fe51694977ae9b4132404">ICounterDirectory::GetCategoryCount()</a>, <a class="el" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#aef59fdca57a5bb822e22cacfc5836fab">ICounterDirectory::GetCounterSetCount()</a>, <a class="el" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#aecd5912045fd41fe41dc96c9844f6deb">ICounterDirectory::GetDeviceCount()</a>, and <a class="el" href="_directory_capture_command_handler_8cpp_source.xhtml#l00022">armnn::profiling::uint32_t_size</a>.</p>

<p class="reference">Referenced by <a class="el" href="_send_counter_packet_tests_8cpp_source.xhtml#l01158">BOOST_AUTO_TEST_CASE()</a>, and <a class="el" href="_send_counter_packet_8hpp_source.xhtml#l00030">SendCounterPacket::SendCounterPacket()</a>.</p>
<div class="fragment"><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;{</div><div class="line"><a name="l00550"></a><span class="lineno">  550</span>&#160;    <span class="comment">// Get the amount of data that needs to be put into the packet</span></div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;    <span class="keyword">const</span> uint16_t categoryCount    = counterDirectory.GetCategoryCount();</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;    <span class="keyword">const</span> uint16_t deviceCount      = counterDirectory.GetDeviceCount();</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;    <span class="keyword">const</span> uint16_t counterSetCount  = counterDirectory.GetCounterSetCount();</div><div class="line"><a name="l00554"></a><span class="lineno">  554</span>&#160;</div><div class="line"><a name="l00555"></a><span class="lineno">  555</span>&#160;    <span class="comment">// Utils</span></div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a> = <span class="keyword">sizeof</span>(uint32_t);</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> packetHeaderSize = 2u;</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> bodyHeaderSize = 6u;</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;    <span class="keyword">const</span> uint32_t bodyHeaderSizeBytes = bodyHeaderSize * <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00560"></a><span class="lineno">  560</span>&#160;</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;    <span class="comment">// Initialize the offset for the pointer tables</span></div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;    uint32_t pointerTableOffset = 0;</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;    <span class="comment">// --------------</span></div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    <span class="comment">// Device records</span></div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;    <span class="comment">// --------------</span></div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;    <span class="comment">// Process device records</span></div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;    std::vector&lt;DeviceRecord&gt; deviceRecords(deviceCount);</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3ff1066867cb9bd3b08338957c414401">Devices</a>&amp; devices = counterDirectory.GetDevices();</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    std::vector&lt;uint32_t&gt; deviceRecordOffsets(deviceCount, 0); <span class="comment">// device_records_pointer_table</span></div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    <span class="keywordtype">size_t</span> deviceRecordsSize = 0;</div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;    <span class="keywordtype">size_t</span> deviceIndex = 0;</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;    <span class="keywordtype">size_t</span> deviceRecordOffsetIndex = 0;</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;    pointerTableOffset = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(deviceCount * uint32_t_size +</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;                                                       counterSetCount * uint32_t_size +</div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;                                                       categoryCount   * <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>);</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = devices.begin(); it != devices.end(); it++)</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;    {</div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn_1_1profiling.xhtml#a22a0d730c0d08335585e6e8999be8f8b">DevicePtr</a>&amp; device = it-&gt;second;</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;        <a class="code" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#ae8cb0ed3b5a68b271532e959ec2507d4">DeviceRecord</a>&amp; deviceRecord = deviceRecords.at(deviceIndex);</div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;</div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;        std::string errorMessage;</div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#af18b6d5da883305c751d6ed00bea006a">CreateDeviceRecord</a>(device, deviceRecord, errorMessage))</div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;        {</div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;            CancelOperationAndThrow&lt;RuntimeException&gt;(errorMessage);</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;        }</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;        <span class="comment">// Update the total size in words of the device records</span></div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;        deviceRecordsSize += deviceRecord.size();</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;        <span class="comment">// Add the device record offset to the device records pointer table offset field</span></div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;        deviceRecordOffsets[deviceRecordOffsetIndex] = pointerTableOffset;</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;        pointerTableOffset += <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(deviceRecord.size() * <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>);</div><div class="line"><a name="l00596"></a><span class="lineno">  596</span>&#160;</div><div class="line"><a name="l00597"></a><span class="lineno">  597</span>&#160;        deviceIndex++;</div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;        deviceRecordOffsetIndex++;</div><div class="line"><a name="l00599"></a><span class="lineno">  599</span>&#160;    }</div><div class="line"><a name="l00600"></a><span class="lineno">  600</span>&#160;</div><div class="line"><a name="l00601"></a><span class="lineno">  601</span>&#160;    <span class="comment">// -------------------</span></div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;    <span class="comment">// Counter set records</span></div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;    <span class="comment">// -------------------</span></div><div class="line"><a name="l00604"></a><span class="lineno">  604</span>&#160;</div><div class="line"><a name="l00605"></a><span class="lineno">  605</span>&#160;    <span class="comment">// Process counter set records</span></div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;    std::vector&lt;CounterSetRecord&gt; counterSetRecords(counterSetCount);</div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn_1_1profiling.xhtml#acfe20da73b5dc66439a65b49f04f7a21">CounterSets</a>&amp; counterSets = counterDirectory.GetCounterSets();</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;    std::vector&lt;uint32_t&gt; counterSetRecordOffsets(counterSetCount, 0); <span class="comment">// counter_set_records_pointer_table</span></div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;    <span class="keywordtype">size_t</span> counterSetRecordsSize = 0;</div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;    <span class="keywordtype">size_t</span> counterSetIndex = 0;</div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;    <span class="keywordtype">size_t</span> counterSetRecordOffsetIndex = 0;</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;    pointerTableOffset -= <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(deviceCount * <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>);</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = counterSets.begin(); it != counterSets.end(); it++)</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    {</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn_1_1profiling.xhtml#abaedc7fcb8ecb2e086482afe10737fb7">CounterSetPtr</a>&amp; counterSet = it-&gt;second;</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;        <a class="code" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a30f18e205737ed0a4057d18b52d48018">CounterSetRecord</a>&amp; counterSetRecord = counterSetRecords.at(counterSetIndex);</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;        std::string errorMessage;</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#ad0a58db963ae04484cdc3addd8327c3e">CreateCounterSetRecord</a>(counterSet, counterSetRecord, errorMessage))</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;        {</div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;            CancelOperationAndThrow&lt;RuntimeException&gt;(errorMessage);</div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;        }</div><div class="line"><a name="l00624"></a><span class="lineno">  624</span>&#160;</div><div class="line"><a name="l00625"></a><span class="lineno">  625</span>&#160;        <span class="comment">// Update the total size in words of the counter set records</span></div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;        counterSetRecordsSize += counterSetRecord.size();</div><div class="line"><a name="l00627"></a><span class="lineno">  627</span>&#160;</div><div class="line"><a name="l00628"></a><span class="lineno">  628</span>&#160;        <span class="comment">// Add the counter set record offset to the counter set records pointer table offset field</span></div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;        counterSetRecordOffsets[counterSetRecordOffsetIndex] = pointerTableOffset;</div><div class="line"><a name="l00630"></a><span class="lineno">  630</span>&#160;        pointerTableOffset += <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(counterSetRecord.size() * <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>);</div><div class="line"><a name="l00631"></a><span class="lineno">  631</span>&#160;</div><div class="line"><a name="l00632"></a><span class="lineno">  632</span>&#160;        counterSetIndex++;</div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;        counterSetRecordOffsetIndex++;</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;    }</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;    <span class="comment">// ----------------</span></div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;    <span class="comment">// Category records</span></div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;    <span class="comment">// ----------------</span></div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;    <span class="comment">// Process category records</span></div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;    std::vector&lt;CategoryRecord&gt; categoryRecords(categoryCount);</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn_1_1profiling.xhtml#af55bc6e5233a4720fe8a813db470b06f">Categories</a>&amp; categories = counterDirectory.GetCategories();</div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;    std::vector&lt;uint32_t&gt; categoryRecordOffsets(categoryCount, 0); <span class="comment">// category_records_pointer_table</span></div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;    <span class="keywordtype">size_t</span> categoryRecordsSize = 0;</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;    <span class="keywordtype">size_t</span> categoryIndex = 0;</div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;    <span class="keywordtype">size_t</span> categoryRecordOffsetIndex = 0;</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;    pointerTableOffset -= <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(counterSetCount * <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>);</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">auto</span> it = categories.begin(); it != categories.end(); it++)</div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    {</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;        <span class="keyword">const</span> <a class="code" href="namespacearmnn_1_1profiling.xhtml#a8adee535828386656b4c8acfa8bcf871">CategoryPtr</a>&amp; category = *it;</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;        <a class="code" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#acc3cd9f22519728404bf47992ea01f77">CategoryRecord</a>&amp; categoryRecord = categoryRecords.at(categoryIndex);</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;        std::string errorMessage;</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#acd58fc16d0b9e0a3983e3e8719c0f95a">CreateCategoryRecord</a>(category, counterDirectory.GetCounters(), categoryRecord, errorMessage))</div><div class="line"><a name="l00656"></a><span class="lineno">  656</span>&#160;        {</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;            CancelOperationAndThrow&lt;RuntimeException&gt;(errorMessage);</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;        }</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;        <span class="comment">// Update the total size in words of the category records</span></div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;        categoryRecordsSize += categoryRecord.size();</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;        <span class="comment">// Add the category record offset to the category records pointer table offset field</span></div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;        categoryRecordOffsets[categoryRecordOffsetIndex] = pointerTableOffset;</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;        pointerTableOffset += <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(categoryRecord.size() * <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>);</div><div class="line"><a name="l00666"></a><span class="lineno">  666</span>&#160;</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;        categoryIndex++;</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;        categoryRecordOffsetIndex++;</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;    }</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;    <span class="comment">// Calculate the length in words of the counter directory packet&#39;s data (excludes the packet header size)</span></div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> counterDirectoryPacketDataLength =</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;                 bodyHeaderSize +                 <span class="comment">// The size of the body header</span></div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;                 deviceRecordOffsets.size() +     <span class="comment">// The size of the device records pointer table</span></div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;                 counterSetRecordOffsets.size() + <span class="comment">// The size of counter set pointer table</span></div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;                 categoryRecordOffsets.size() +   <span class="comment">// The size of category records pointer table</span></div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;                 deviceRecordsSize +              <span class="comment">// The total size of the device records</span></div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;                 counterSetRecordsSize +          <span class="comment">// The total size of the counter set records</span></div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;                 categoryRecordsSize;             <span class="comment">// The total size of the category records</span></div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;    <span class="comment">// Calculate the size in words of the counter directory packet (the data length plus the packet header size)</span></div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">size_t</span> counterDirectoryPacketSize = packetHeaderSize +                <span class="comment">// The size of the packet header</span></div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;                                              counterDirectoryPacketDataLength; <span class="comment">// The data length</span></div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;</div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;    <span class="comment">// Allocate the necessary space for the counter directory packet</span></div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;    std::vector&lt;uint32_t&gt; counterDirectoryPacket(counterDirectoryPacketSize, 0);</div><div class="line"><a name="l00687"></a><span class="lineno">  687</span>&#160;</div><div class="line"><a name="l00688"></a><span class="lineno">  688</span>&#160;    <span class="comment">// -------------</span></div><div class="line"><a name="l00689"></a><span class="lineno">  689</span>&#160;    <span class="comment">// Packet header</span></div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;    <span class="comment">// -------------</span></div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;    <span class="comment">// Packet header word 0:</span></div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;    <span class="comment">// 26:31 [6]  packet_family: control Packet Family</span></div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;    <span class="comment">// 16:25 [10] packet_id: packet identifier</span></div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;    <span class="comment">// 8:15  [8]  reserved: all zeros</span></div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;    <span class="comment">// 0:7   [8]  reserved: all zeros</span></div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;    uint32_t packetFamily = 0;</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;    uint32_t packetId = 2;</div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;    uint32_t packetHeaderWord0 = ((packetFamily &amp; 0x3F) &lt;&lt; 26) | ((packetId &amp; 0x3FF) &lt;&lt; 16);</div><div class="line"><a name="l00700"></a><span class="lineno">  700</span>&#160;</div><div class="line"><a name="l00701"></a><span class="lineno">  701</span>&#160;    <span class="comment">// Packet header word 1:</span></div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;    <span class="comment">// 0:31 [32] data_length: length of data, in bytes</span></div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;    uint32_t packetHeaderWord1 = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(</div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;            counterDirectoryPacketDataLength * <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>);</div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;</div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;    <span class="comment">// Create the packet header</span></div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;    uint32_t packetHeader[2]</div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;    {</div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;        packetHeaderWord0, <span class="comment">// packet_family + packet_id + reserved + reserved</span></div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;        packetHeaderWord1  <span class="comment">// data_length</span></div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;    };</div><div class="line"><a name="l00712"></a><span class="lineno">  712</span>&#160;</div><div class="line"><a name="l00713"></a><span class="lineno">  713</span>&#160;    <span class="comment">// -----------</span></div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;    <span class="comment">// Body header</span></div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;    <span class="comment">// -----------</span></div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;</div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;    <span class="comment">// Body header word 0:</span></div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;    <span class="comment">// 16:31 [16] device_records_count: number of entries in the device_records_pointer_table</span></div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;    <span class="comment">// 0:15  [16] reserved: all zeros</span></div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;    <span class="keyword">const</span> uint32_t bodyHeaderWord0 = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(deviceCount) &lt;&lt; 16;</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;    <span class="comment">// Body header word 1:</span></div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;    <span class="comment">// 0:31 [32] device_records_pointer_table_offset: offset to the device_records_pointer_table</span></div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;    <span class="keyword">const</span> uint32_t bodyHeaderWord1 = bodyHeaderSizeBytes; <span class="comment">// The offset is always the bodyHeaderSize,</span></div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;                                                          <span class="comment">// as the device record pointer table field</span></div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;                                                          <span class="comment">// is always the first item in the pool</span></div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;    <span class="comment">// Body header word 2:</span></div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;    <span class="comment">// 16:31 [16] counter_set_count: number of entries in the counter_set_pointer_table</span></div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;    <span class="comment">// 0:15  [16] reserved: all zeros</span></div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;    <span class="keyword">const</span> uint32_t bodyHeaderWord2 = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(counterSetCount) &lt;&lt; 16;</div><div class="line"><a name="l00732"></a><span class="lineno">  732</span>&#160;</div><div class="line"><a name="l00733"></a><span class="lineno">  733</span>&#160;    <span class="comment">// Body header word 3:</span></div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;    <span class="comment">// 0:31 [32] counter_set_pointer_table_offset: offset to the counter_set_pointer_table</span></div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;    <span class="keyword">const</span> uint32_t bodyHeaderWord3 = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(deviceRecordOffsets.size() *</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;                                                                   uint32_t_size +       <span class="comment">// The size of the</span></div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;                                                                   bodyHeaderSizeBytes); <span class="comment">// device records pointer table</span></div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;    <span class="comment">// Body header word 4:</span></div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;    <span class="comment">// 16:31 [16] categories_count: number of entries in the categories_pointer_table</span></div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;    <span class="comment">// 0:15  [16] reserved: all zeros</span></div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;    <span class="keyword">const</span> uint32_t bodyHeaderWord4 = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(categoryCount) &lt;&lt; 16;</div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;    <span class="comment">// Body header word 3:</span></div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;    <span class="comment">// 0:31 [32] categories_pointer_table_offset: offset to the categories_pointer_table</span></div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;    <span class="keyword">const</span> uint32_t bodyHeaderWord5 =</div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;                   <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;                       deviceRecordOffsets.size() * uint32_t_size +     <span class="comment">// The size of the device records</span></div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;                       counterSetRecordOffsets.size() * uint32_t_size   <span class="comment">// pointer table, plus the size of</span></div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;                       +  bodyHeaderSizeBytes);                         <span class="comment">// the counter set pointer table</span></div><div class="line"><a name="l00751"></a><span class="lineno">  751</span>&#160;</div><div class="line"><a name="l00752"></a><span class="lineno">  752</span>&#160;    <span class="comment">// Create the body header</span></div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;    <span class="keyword">const</span> uint32_t bodyHeader[bodyHeaderSize]</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;    {</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;        bodyHeaderWord0, <span class="comment">// device_records_count + reserved</span></div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;        bodyHeaderWord1, <span class="comment">// device_records_pointer_table_offset</span></div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;        bodyHeaderWord2, <span class="comment">// counter_set_count + reserved</span></div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;        bodyHeaderWord3, <span class="comment">// counter_set_pointer_table_offset</span></div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;        bodyHeaderWord4, <span class="comment">// categories_count + reserved</span></div><div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;        bodyHeaderWord5  <span class="comment">// categories_pointer_table_offset</span></div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;    };</div><div class="line"><a name="l00762"></a><span class="lineno">  762</span>&#160;</div><div class="line"><a name="l00763"></a><span class="lineno">  763</span>&#160;    <a class="code" href="_conversion_8hpp.xhtml#aeaf555aa7f39f7ba192a3812cb1b7d07">ARMNN_NO_CONVERSION_WARN_BEGIN</a></div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;    <span class="comment">// Create the counter directory packet</span></div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;    <span class="keyword">auto</span> counterDirectoryPacketOffset = counterDirectoryPacket.begin();</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;    <span class="comment">// packet_header</span></div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;    std::copy(packetHeader, packetHeader + packetHeaderSize, counterDirectoryPacketOffset);</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;    counterDirectoryPacketOffset += packetHeaderSize;</div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;    <span class="comment">// body_header</span></div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;    std::copy(bodyHeader, bodyHeader + bodyHeaderSize, counterDirectoryPacketOffset);</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;    counterDirectoryPacketOffset += bodyHeaderSize;</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;    <span class="comment">// device_records_pointer_table</span></div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;    std::copy(deviceRecordOffsets.begin(), deviceRecordOffsets.end(), counterDirectoryPacketOffset);</div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;    counterDirectoryPacketOffset += deviceRecordOffsets.size();</div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;    <span class="comment">// counter_set_pointer_table</span></div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;    std::copy(counterSetRecordOffsets.begin(), counterSetRecordOffsets.end(), counterDirectoryPacketOffset);</div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;    counterDirectoryPacketOffset += counterSetRecordOffsets.size();</div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;    <span class="comment">// category_pointer_table</span></div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;    std::copy(categoryRecordOffsets.begin(), categoryRecordOffsets.end(), counterDirectoryPacketOffset);</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;    counterDirectoryPacketOffset += categoryRecordOffsets.size();</div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;    <span class="comment">// device_records</span></div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#ae8cb0ed3b5a68b271532e959ec2507d4">DeviceRecord</a>&amp; deviceRecord : deviceRecords)</div><div class="line"><a name="l00783"></a><span class="lineno">  783</span>&#160;    {</div><div class="line"><a name="l00784"></a><span class="lineno">  784</span>&#160;        std::copy(deviceRecord.begin(), deviceRecord.end(), counterDirectoryPacketOffset); <span class="comment">// device_record</span></div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;        counterDirectoryPacketOffset += deviceRecord.size();</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;    }</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;    <span class="comment">// counter_set_records</span></div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a30f18e205737ed0a4057d18b52d48018">CounterSetRecord</a>&amp; counterSetRecord : counterSetRecords)</div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;    {</div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;        std::copy(counterSetRecord.begin(), counterSetRecord.end(), counterDirectoryPacketOffset); <span class="comment">// counter_set_record</span></div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;        counterDirectoryPacketOffset += counterSetRecord.size();</div><div class="line"><a name="l00792"></a><span class="lineno">  792</span>&#160;    }</div><div class="line"><a name="l00793"></a><span class="lineno">  793</span>&#160;    <span class="comment">// category_records</span></div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#acc3cd9f22519728404bf47992ea01f77">CategoryRecord</a>&amp; categoryRecord : categoryRecords)</div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;    {</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;        std::copy(categoryRecord.begin(), categoryRecord.end(), counterDirectoryPacketOffset); <span class="comment">// category_record</span></div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;        counterDirectoryPacketOffset += categoryRecord.size();</div><div class="line"><a name="l00798"></a><span class="lineno">  798</span>&#160;    }</div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;    <a class="code" href="_conversion_8hpp.xhtml#a71cf574f1296e09d0ce16157bdeb6619">ARMNN_NO_CONVERSION_WARN_END</a></div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;</div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;    <span class="comment">// Calculate the total size in bytes of the counter directory packet</span></div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;    uint32_t totalSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(counterDirectoryPacketSize * <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>);</div><div class="line"><a name="l00803"></a><span class="lineno">  803</span>&#160;</div><div class="line"><a name="l00804"></a><span class="lineno">  804</span>&#160;    <span class="comment">// Reserve space in the buffer for the packet</span></div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;    uint32_t reserved = 0;</div><div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#a14328d977cec3abadcfd5935f04f3409">IPacketBufferPtr</a> writeBuffer = m_BufferManager.<a class="code" href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#a49c88b0e052621f30462c3bdbf3e4a7a">Reserve</a>(totalSize, reserved);</div><div class="line"><a name="l00807"></a><span class="lineno">  807</span>&#160;</div><div class="line"><a name="l00808"></a><span class="lineno">  808</span>&#160;    <span class="keywordflow">if</span> (writeBuffer == <span class="keyword">nullptr</span> || reserved &lt; totalSize)</div><div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;    {</div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;        CancelOperationAndThrow&lt;BufferExhaustion&gt;(</div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;            writeBuffer,</div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;            fmt::format(<span class="stringliteral">&quot;No space left in buffer. Unable to reserve ({}) bytes.&quot;</span>, totalSize));</div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;    }</div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;</div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;    <span class="comment">// Offset for writing to the buffer</span></div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;    uint32_t offset = 0;</div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;</div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;    <span class="comment">// Write the counter directory packet to the buffer</span></div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;    <span class="keywordflow">for</span> (uint32_t counterDirectoryPacketWord : counterDirectoryPacket)</div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;    {</div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;        <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, counterDirectoryPacketWord);</div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;        offset += <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(<a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>);</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;    }</div><div class="line"><a name="l00824"></a><span class="lineno">  824</span>&#160;</div><div class="line"><a name="l00825"></a><span class="lineno">  825</span>&#160;    m_BufferManager.<a class="code" href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#ad0faa8a317506b2e72252f087c7f3c46">Commit</a>(writeBuffer, totalSize);</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;}</div><div class="ttc" id="classarmnn_1_1profiling_1_1_i_buffer_manager_xhtml_a49c88b0e052621f30462c3bdbf3e4a7a"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#a49c88b0e052621f30462c3bdbf3e4a7a">armnn::profiling::IBufferManager::Reserve</a></div><div class="ttdeci">virtual IPacketBufferPtr Reserve(unsigned int requestedSize, unsigned int &amp;reservedSize)=0</div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_send_counter_packet_xhtml_a30f18e205737ed0a4057d18b52d48018"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#a30f18e205737ed0a4057d18b52d48018">armnn::profiling::SendCounterPacket::CounterSetRecord</a></div><div class="ttdeci">std::vector&lt; uint32_t &gt; CounterSetRecord</div><div class="ttdef"><b>Definition:</b> <a href="_send_counter_packet_8hpp_source.xhtml#l00026">SendCounterPacket.hpp:26</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_send_counter_packet_xhtml_ae8cb0ed3b5a68b271532e959ec2507d4"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#ae8cb0ed3b5a68b271532e959ec2507d4">armnn::profiling::SendCounterPacket::DeviceRecord</a></div><div class="ttdeci">std::vector&lt; uint32_t &gt; DeviceRecord</div><div class="ttdef"><b>Definition:</b> <a href="_send_counter_packet_8hpp_source.xhtml#l00025">SendCounterPacket.hpp:25</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a3e638748a39d46e2943dfcef94dcb828"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">armnn::profiling::WriteUint32</a></div><div class="ttdeci">void WriteUint32(const IPacketBufferPtr &amp;packetBuffer, unsigned int offset, uint32_t value)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00121">ProfilingUtils.cpp:121</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_send_counter_packet_xhtml_af18b6d5da883305c751d6ed00bea006a"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#af18b6d5da883305c751d6ed00bea006a">armnn::profiling::SendCounterPacket::CreateDeviceRecord</a></div><div class="ttdeci">bool CreateDeviceRecord(const DevicePtr &amp;device, DeviceRecord &amp;deviceRecord, std::string &amp;errorMessage)</div><div class="ttdef"><b>Definition:</b> <a href="_send_counter_packet_8cpp_source.xhtml#l00296">SendCounterPacket.cpp:296</a></div></div>
<div class="ttc" id="_conversion_8hpp_xhtml_a71cf574f1296e09d0ce16157bdeb6619"><div class="ttname"><a href="_conversion_8hpp.xhtml#a71cf574f1296e09d0ce16157bdeb6619">ARMNN_NO_CONVERSION_WARN_END</a></div><div class="ttdeci">#define ARMNN_NO_CONVERSION_WARN_END</div><div class="ttdef"><b>Definition:</b> <a href="_conversion_8hpp_source.xhtml#l00037">Conversion.hpp:37</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a22a0d730c0d08335585e6e8999be8f8b"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a22a0d730c0d08335585e6e8999be8f8b">armnn::profiling::DevicePtr</a></div><div class="ttdeci">std::unique_ptr&lt; Device &gt; DevicePtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00030">ICounterDirectory.hpp:30</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_abaedc7fcb8ecb2e086482afe10737fb7"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#abaedc7fcb8ecb2e086482afe10737fb7">armnn::profiling::CounterSetPtr</a></div><div class="ttdeci">std::unique_ptr&lt; CounterSet &gt; CounterSetPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00031">ICounterDirectory.hpp:31</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_buffer_manager_xhtml_ad0faa8a317506b2e72252f087c7f3c46"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#ad0faa8a317506b2e72252f087c7f3c46">armnn::profiling::IBufferManager::Commit</a></div><div class="ttdeci">virtual void Commit(IPacketBufferPtr &amp;packetBuffer, unsigned int size, bool notifyConsumer=true)=0</div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_acfe20da73b5dc66439a65b49f04f7a21"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#acfe20da73b5dc66439a65b49f04f7a21">armnn::profiling::CounterSets</a></div><div class="ttdeci">std::unordered_map&lt; uint16_t, CounterSetPtr &gt; CounterSets</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00037">ICounterDirectory.hpp:37</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_send_counter_packet_xhtml_ad0a58db963ae04484cdc3addd8327c3e"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#ad0a58db963ae04484cdc3addd8327c3e">armnn::profiling::SendCounterPacket::CreateCounterSetRecord</a></div><div class="ttdeci">bool CreateCounterSetRecord(const CounterSetPtr &amp;counterSet, CounterSetRecord &amp;counterSetRecord, std::string &amp;errorMessage)</div><div class="ttdef"><b>Definition:</b> <a href="_send_counter_packet_8cpp_source.xhtml#l00346">SendCounterPacket.cpp:346</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_af55bc6e5233a4720fe8a813db470b06f"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#af55bc6e5233a4720fe8a813db470b06f">armnn::profiling::Categories</a></div><div class="ttdeci">std::unordered_set&lt; CategoryPtr &gt; Categories</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00035">ICounterDirectory.hpp:35</a></div></div>
<div class="ttc" id="_conversion_8hpp_xhtml_aeaf555aa7f39f7ba192a3812cb1b7d07"><div class="ttname"><a href="_conversion_8hpp.xhtml#aeaf555aa7f39f7ba192a3812cb1b7d07">ARMNN_NO_CONVERSION_WARN_BEGIN</a></div><div class="ttdeci">#define ARMNN_NO_CONVERSION_WARN_BEGIN</div><div class="ttdef"><b>Definition:</b> <a href="_conversion_8hpp_source.xhtml#l00036">Conversion.hpp:36</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_aabcf5c25522e8a0542c95174056cfcac"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">armnn::profiling::uint32_t_size</a></div><div class="ttdeci">uint32_t uint32_t_size</div><div class="ttdef"><b>Definition:</b> <a href="_directory_capture_command_handler_8cpp_source.xhtml#l00022">DirectoryCaptureCommandHandler.cpp:22</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_send_counter_packet_xhtml_acc3cd9f22519728404bf47992ea01f77"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#acc3cd9f22519728404bf47992ea01f77">armnn::profiling::SendCounterPacket::CategoryRecord</a></div><div class="ttdeci">std::vector&lt; uint32_t &gt; CategoryRecord</div><div class="ttdef"><b>Definition:</b> <a href="_send_counter_packet_8hpp_source.xhtml#l00024">SendCounterPacket.hpp:24</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a8adee535828386656b4c8acfa8bcf871"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a8adee535828386656b4c8acfa8bcf871">armnn::profiling::CategoryPtr</a></div><div class="ttdeci">std::unique_ptr&lt; Category &gt; CategoryPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00029">ICounterDirectory.hpp:29</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a3ff1066867cb9bd3b08338957c414401"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a3ff1066867cb9bd3b08338957c414401">armnn::profiling::Devices</a></div><div class="ttdeci">std::unordered_map&lt; uint16_t, DevicePtr &gt; Devices</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00036">ICounterDirectory.hpp:36</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a14328d977cec3abadcfd5935f04f3409"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a14328d977cec3abadcfd5935f04f3409">armnn::profiling::IPacketBufferPtr</a></div><div class="ttdeci">std::unique_ptr&lt; IPacketBuffer &gt; IPacketBufferPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_packet_buffer_8hpp_source.xhtml#l00044">IPacketBuffer.hpp:44</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_send_counter_packet_xhtml_acd58fc16d0b9e0a3983e3e8719c0f95a"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml#acd58fc16d0b9e0a3983e3e8719c0f95a">armnn::profiling::SendCounterPacket::CreateCategoryRecord</a></div><div class="ttdeci">bool CreateCategoryRecord(const CategoryPtr &amp;category, const Counters &amp;counters, CategoryRecord &amp;categoryRecord, std::string &amp;errorMessage)</div><div class="ttdef"><b>Definition:</b> <a href="_send_counter_packet_8cpp_source.xhtml#l00173">SendCounterPacket.cpp:173</a></div></div>
</div><!-- fragment -->
</div>
</div>
<a id="adae3557b7778010227466ce3eed0edb2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adae3557b7778010227466ce3eed0edb2">&#9670;&nbsp;</a></span>SendPeriodicCounterCapturePacket()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void SendPeriodicCounterCapturePacket </td>
          <td>(</td>
          <td class="paramtype">uint64_t&#160;</td>
          <td class="paramname"><em>timestamp</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const <a class="el" href="classarmnn_1_1profiling_1_1_i_send_counter_packet.xhtml#a80cb41c63cb6d3a19870b3a0a8f21ba7">IndexValuePairsVector</a> &amp;&#160;</td>
          <td class="paramname"><em>values</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Create and write a PeriodicCounterCapturePacket from the parameters to the buffer. </p>

<p>Implements <a class="el" href="classarmnn_1_1profiling_1_1_i_send_counter_packet.xhtml#aeacf0722dbf513d511b46a9bf43bfa4a">ISendCounterPacket</a>.</p>

<p class="definition">Definition at line <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00828">828</a> of file <a class="el" href="_send_counter_packet_8cpp_source.xhtml">SendCounterPacket.cpp</a>.</p>

<p class="reference">References <a class="el" href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#ad0faa8a317506b2e72252f087c7f3c46">IBufferManager::Commit()</a>, <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">armnn::numeric_cast()</a>, <a class="el" href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#a49c88b0e052621f30462c3bdbf3e4a7a">IBufferManager::Reserve()</a>, <a class="el" href="_directory_capture_command_handler_8cpp_source.xhtml#l00021">armnn::profiling::uint16_t_size</a>, <a class="el" href="_directory_capture_command_handler_8cpp_source.xhtml#l00022">armnn::profiling::uint32_t_size</a>, <a class="el" href="_profiling_utils_8cpp_source.xhtml#l00128">armnn::profiling::WriteUint16()</a>, <a class="el" href="_profiling_utils_8cpp_source.xhtml#l00121">armnn::profiling::WriteUint32()</a>, and <a class="el" href="_profiling_utils_8cpp_source.xhtml#l00114">armnn::profiling::WriteUint64()</a>.</p>

<p class="reference">Referenced by <a class="el" href="_send_counter_packet_tests_8cpp_source.xhtml#l00211">BOOST_AUTO_TEST_CASE()</a>, and <a class="el" href="_send_counter_packet_8hpp_source.xhtml#l00030">SendCounterPacket::SendCounterPacket()</a>.</p>
<div class="fragment"><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;{</div><div class="line"><a name="l00830"></a><span class="lineno">  830</span>&#160;    uint32_t <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a> = <span class="keyword">sizeof</span>(uint16_t);</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;    uint32_t <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a> = <span class="keyword">sizeof</span>(uint32_t);</div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;    uint32_t uint64_t_size = <span class="keyword">sizeof</span>(uint64_t);</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;    uint32_t packetFamily = 3;</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;    uint32_t packetClass = 0;</div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;    uint32_t packetType = 0;</div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;    uint32_t headerSize = 2 * <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;    uint32_t bodySize = uint64_t_size + <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(values.size()) * (uint16_t_size + uint32_t_size);</div><div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;    uint32_t totalSize = headerSize + bodySize;</div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;    uint32_t offset = 0;</div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;    uint32_t reserved = 0;</div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;</div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#a14328d977cec3abadcfd5935f04f3409">IPacketBufferPtr</a> writeBuffer = m_BufferManager.<a class="code" href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#a49c88b0e052621f30462c3bdbf3e4a7a">Reserve</a>(totalSize, reserved);</div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;</div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;    <span class="keywordflow">if</span> (writeBuffer == <span class="keyword">nullptr</span> || reserved &lt; totalSize)</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;    {</div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;        CancelOperationAndThrow&lt;BufferExhaustion&gt;(</div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;            writeBuffer,</div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;            fmt::format(<span class="stringliteral">&quot;No space left in buffer. Unable to reserve ({}) bytes.&quot;</span>, totalSize));</div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;    }</div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;</div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;    <span class="comment">// Create header.</span></div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer,</div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;                offset,</div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;                ((packetFamily &amp; 0x0000003F) &lt;&lt; 26) |</div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;                ((packetClass  &amp; 0x0000007F) &lt;&lt; 19) |</div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;                ((packetType   &amp; 0x00000007) &lt;&lt; 16));</div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;    offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, bodySize);</div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;</div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;    <span class="comment">// Copy captured Timestamp.</span></div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;    offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#a79be042e55fdf16ca562f14cd15d9aa6">WriteUint64</a>(writeBuffer, offset, timestamp);</div><div class="line"><a name="l00864"></a><span class="lineno">  864</span>&#160;</div><div class="line"><a name="l00865"></a><span class="lineno">  865</span>&#160;    <span class="comment">// Copy selectedCounterIds.</span></div><div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;    offset += uint64_t_size;</div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;    <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; pair: values)</div><div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;    {</div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;        <a class="code" href="namespacearmnn_1_1profiling.xhtml#ae5ace88c65e65ab7cf5572613601a60d">WriteUint16</a>(writeBuffer, offset, pair.counterId);</div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;        offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;        <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, pair.counterValue);</div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;        offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;    }</div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;</div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;    m_BufferManager.<a class="code" href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#ad0faa8a317506b2e72252f087c7f3c46">Commit</a>(writeBuffer, totalSize);</div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;}</div><div class="ttc" id="classarmnn_1_1profiling_1_1_i_buffer_manager_xhtml_a49c88b0e052621f30462c3bdbf3e4a7a"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#a49c88b0e052621f30462c3bdbf3e4a7a">armnn::profiling::IBufferManager::Reserve</a></div><div class="ttdeci">virtual IPacketBufferPtr Reserve(unsigned int requestedSize, unsigned int &amp;reservedSize)=0</div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_ae5ace88c65e65ab7cf5572613601a60d"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#ae5ace88c65e65ab7cf5572613601a60d">armnn::profiling::WriteUint16</a></div><div class="ttdeci">void WriteUint16(const IPacketBufferPtr &amp;packetBuffer, unsigned int offset, uint16_t value)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00128">ProfilingUtils.cpp:128</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a3e638748a39d46e2943dfcef94dcb828"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">armnn::profiling::WriteUint32</a></div><div class="ttdeci">void WriteUint32(const IPacketBufferPtr &amp;packetBuffer, unsigned int offset, uint32_t value)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00121">ProfilingUtils.cpp:121</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a2fd55777ec061a6c6df855677c165a03"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">armnn::profiling::uint16_t_size</a></div><div class="ttdeci">uint32_t uint16_t_size</div><div class="ttdef"><b>Definition:</b> <a href="_directory_capture_command_handler_8cpp_source.xhtml#l00021">DirectoryCaptureCommandHandler.cpp:21</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_buffer_manager_xhtml_ad0faa8a317506b2e72252f087c7f3c46"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#ad0faa8a317506b2e72252f087c7f3c46">armnn::profiling::IBufferManager::Commit</a></div><div class="ttdeci">virtual void Commit(IPacketBufferPtr &amp;packetBuffer, unsigned int size, bool notifyConsumer=true)=0</div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a79be042e55fdf16ca562f14cd15d9aa6"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a79be042e55fdf16ca562f14cd15d9aa6">armnn::profiling::WriteUint64</a></div><div class="ttdeci">void WriteUint64(const std::unique_ptr&lt; IPacketBuffer &gt; &amp;packetBuffer, unsigned int offset, uint64_t value)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00114">ProfilingUtils.cpp:114</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_aabcf5c25522e8a0542c95174056cfcac"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">armnn::profiling::uint32_t_size</a></div><div class="ttdeci">uint32_t uint32_t_size</div><div class="ttdef"><b>Definition:</b> <a href="_directory_capture_command_handler_8cpp_source.xhtml#l00022">DirectoryCaptureCommandHandler.cpp:22</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a14328d977cec3abadcfd5935f04f3409"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a14328d977cec3abadcfd5935f04f3409">armnn::profiling::IPacketBufferPtr</a></div><div class="ttdeci">std::unique_ptr&lt; IPacketBuffer &gt; IPacketBufferPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_packet_buffer_8hpp_source.xhtml#l00044">IPacketBuffer.hpp:44</a></div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a47406a4d108beb4f20031d370a155a9d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a47406a4d108beb4f20031d370a155a9d">&#9670;&nbsp;</a></span>SendPeriodicCounterSelectionPacket()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void SendPeriodicCounterSelectionPacket </td>
          <td>(</td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>capturePeriod</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const std::vector&lt; uint16_t &gt; &amp;&#160;</td>
          <td class="paramname"><em>selectedCounterIds</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Create and write a PeriodicCounterSelectionPacket from the parameters to the buffer. </p>

<p>Implements <a class="el" href="classarmnn_1_1profiling_1_1_i_send_counter_packet.xhtml#a6435f063192414c6dc68ef2f31628a5c">ISendCounterPacket</a>.</p>

<p class="definition">Definition at line <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00878">878</a> of file <a class="el" href="_send_counter_packet_8cpp_source.xhtml">SendCounterPacket.cpp</a>.</p>

<p class="reference">References <a class="el" href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#ad0faa8a317506b2e72252f087c7f3c46">IBufferManager::Commit()</a>, <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">armnn::numeric_cast()</a>, <a class="el" href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#a49c88b0e052621f30462c3bdbf3e4a7a">IBufferManager::Reserve()</a>, <a class="el" href="_directory_capture_command_handler_8cpp_source.xhtml#l00021">armnn::profiling::uint16_t_size</a>, <a class="el" href="_directory_capture_command_handler_8cpp_source.xhtml#l00022">armnn::profiling::uint32_t_size</a>, <a class="el" href="_profiling_utils_8cpp_source.xhtml#l00128">armnn::profiling::WriteUint16()</a>, and <a class="el" href="_profiling_utils_8cpp_source.xhtml#l00121">armnn::profiling::WriteUint32()</a>.</p>

<p class="reference">Referenced by <a class="el" href="_send_counter_packet_tests_8cpp_source.xhtml#l00150">BOOST_AUTO_TEST_CASE()</a>, and <a class="el" href="_send_counter_packet_8hpp_source.xhtml#l00030">SendCounterPacket::SendCounterPacket()</a>.</p>
<div class="fragment"><div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;{</div><div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;    uint32_t <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a> = <span class="keyword">sizeof</span>(uint16_t);</div><div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;    uint32_t <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a> = <span class="keyword">sizeof</span>(uint32_t);</div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;</div><div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;    uint32_t packetFamily = 0;</div><div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;    uint32_t packetId = 4;</div><div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;    uint32_t headerSize = 2 * <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;    uint32_t bodySize = uint32_t_size + <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(selectedCounterIds.size()) * uint16_t_size;</div><div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;    uint32_t totalSize = headerSize + bodySize;</div><div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;    uint32_t offset = 0;</div><div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;    uint32_t reserved = 0;</div><div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;</div><div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#a14328d977cec3abadcfd5935f04f3409">IPacketBufferPtr</a> writeBuffer = m_BufferManager.<a class="code" href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#a49c88b0e052621f30462c3bdbf3e4a7a">Reserve</a>(totalSize, reserved);</div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;</div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;    <span class="keywordflow">if</span> (writeBuffer == <span class="keyword">nullptr</span> || reserved &lt; totalSize)</div><div class="line"><a name="l00895"></a><span class="lineno">  895</span>&#160;    {</div><div class="line"><a name="l00896"></a><span class="lineno">  896</span>&#160;        CancelOperationAndThrow&lt;BufferExhaustion&gt;(</div><div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;            writeBuffer,</div><div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;            fmt::format(<span class="stringliteral">&quot;No space left in buffer. Unable to reserve ({}) bytes.&quot;</span>, totalSize));</div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;    }</div><div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;</div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;    <span class="comment">// Create header.</span></div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, ((packetFamily &amp; 0x3F) &lt;&lt; 26) | ((packetId &amp; 0x3FF) &lt;&lt; 16));</div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;    offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, bodySize);</div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;</div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;    <span class="comment">// Copy capturePeriod.</span></div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;    offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, capturePeriod);</div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;</div><div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;    <span class="comment">// Copy selectedCounterIds.</span></div><div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;    offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;    <span class="keywordflow">for</span>(<span class="keyword">const</span> uint16_t&amp; <span class="keywordtype">id</span>: selectedCounterIds)</div><div class="line"><a name="l00913"></a><span class="lineno">  913</span>&#160;    {</div><div class="line"><a name="l00914"></a><span class="lineno">  914</span>&#160;        <a class="code" href="namespacearmnn_1_1profiling.xhtml#ae5ace88c65e65ab7cf5572613601a60d">WriteUint16</a>(writeBuffer, offset, <span class="keywordtype">id</span>);</div><div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;        offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</div><div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;    }</div><div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;</div><div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;    m_BufferManager.<a class="code" href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#ad0faa8a317506b2e72252f087c7f3c46">Commit</a>(writeBuffer, totalSize);</div><div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;}</div><div class="ttc" id="classarmnn_1_1profiling_1_1_i_buffer_manager_xhtml_a49c88b0e052621f30462c3bdbf3e4a7a"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#a49c88b0e052621f30462c3bdbf3e4a7a">armnn::profiling::IBufferManager::Reserve</a></div><div class="ttdeci">virtual IPacketBufferPtr Reserve(unsigned int requestedSize, unsigned int &amp;reservedSize)=0</div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_ae5ace88c65e65ab7cf5572613601a60d"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#ae5ace88c65e65ab7cf5572613601a60d">armnn::profiling::WriteUint16</a></div><div class="ttdeci">void WriteUint16(const IPacketBufferPtr &amp;packetBuffer, unsigned int offset, uint16_t value)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00128">ProfilingUtils.cpp:128</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a3e638748a39d46e2943dfcef94dcb828"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">armnn::profiling::WriteUint32</a></div><div class="ttdeci">void WriteUint32(const IPacketBufferPtr &amp;packetBuffer, unsigned int offset, uint32_t value)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00121">ProfilingUtils.cpp:121</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a2fd55777ec061a6c6df855677c165a03"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">armnn::profiling::uint16_t_size</a></div><div class="ttdeci">uint32_t uint16_t_size</div><div class="ttdef"><b>Definition:</b> <a href="_directory_capture_command_handler_8cpp_source.xhtml#l00021">DirectoryCaptureCommandHandler.cpp:21</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_buffer_manager_xhtml_ad0faa8a317506b2e72252f087c7f3c46"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#ad0faa8a317506b2e72252f087c7f3c46">armnn::profiling::IBufferManager::Commit</a></div><div class="ttdeci">virtual void Commit(IPacketBufferPtr &amp;packetBuffer, unsigned int size, bool notifyConsumer=true)=0</div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_aabcf5c25522e8a0542c95174056cfcac"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">armnn::profiling::uint32_t_size</a></div><div class="ttdeci">uint32_t uint32_t_size</div><div class="ttdef"><b>Definition:</b> <a href="_directory_capture_command_handler_8cpp_source.xhtml#l00022">DirectoryCaptureCommandHandler.cpp:22</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a14328d977cec3abadcfd5935f04f3409"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a14328d977cec3abadcfd5935f04f3409">armnn::profiling::IPacketBufferPtr</a></div><div class="ttdeci">std::unique_ptr&lt; IPacketBuffer &gt; IPacketBufferPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_packet_buffer_8hpp_source.xhtml#l00044">IPacketBuffer.hpp:44</a></div></div>
</div><!-- fragment -->
</div>
</div>
<a id="a2a2e451c4e4963909b8a6dc7e7653cd1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2a2e451c4e4963909b8a6dc7e7653cd1">&#9670;&nbsp;</a></span>SendStreamMetaDataPacket()</h2>

<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void SendStreamMetaDataPacket </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">override</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Create and write a StreamMetaDataPacket in the buffer. </p>

<p>Implements <a class="el" href="classarmnn_1_1profiling_1_1_i_send_counter_packet.xhtml#a14e9efe48e3d4ed05396f8a856bfaeea">ISendCounterPacket</a>.</p>

<p class="definition">Definition at line <a class="el" href="_send_counter_packet_8cpp_source.xhtml#l00027">27</a> of file <a class="el" href="_send_counter_packet_8cpp_source.xhtml">SendCounterPacket.cpp</a>.</p>

<p class="reference">References <a class="el" href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#ad0faa8a317506b2e72252f087c7f3c46">IBufferManager::Commit()</a>, <a class="el" href="_profiling_utils_8cpp_source.xhtml#l00100">armnn::profiling::ConstructHeader()</a>, <a class="el" href="_processes_8cpp_source.xhtml#l00019">armnnUtils::Processes::GetCurrentId()</a>, <a class="el" href="_profiling_utils_8cpp_source.xhtml#l00232">armnn::profiling::GetHardwareVersion()</a>, <a class="el" href="_profiling_utils_8cpp_source.xhtml#l00243">armnn::profiling::GetProcessName()</a>, <a class="el" href="_profiling_utils_8cpp_source.xhtml#l00227">armnn::profiling::GetSoftwareInfo()</a>, <a class="el" href="_profiling_utils_8cpp_source.xhtml#l00237">armnn::profiling::GetSoftwareVersion()</a>, <a class="el" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::info</a>, <a class="el" href="_i_buffer_manager_8hpp_source.xhtml#l00013">MAX_METADATA_PACKET_LENGTH</a>, <a class="el" href="_numeric_cast_8hpp_source.xhtml#l00035">armnn::numeric_cast()</a>, <a class="el" href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#a49c88b0e052621f30462c3bdbf3e4a7a">IBufferManager::Reserve()</a>, and <a class="el" href="_profiling_utils_8cpp_source.xhtml#l00121">armnn::profiling::WriteUint32()</a>.</p>

<p class="reference">Referenced by <a class="el" href="_send_counter_packet_tests_8cpp_source.xhtml#l00288">BOOST_AUTO_TEST_CASE()</a>, and <a class="el" href="_send_counter_packet_8hpp_source.xhtml#l00030">SendCounterPacket::SendCounterPacket()</a>.</p>
<div class="fragment"><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;{</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;    <span class="keyword">const</span> std::string <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#af38e9c5d82c9317255665a6315842166">GetSoftwareInfo</a>());</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    <span class="keyword">const</span> std::string hardwareVersion(<a class="code" href="namespacearmnn_1_1profiling.xhtml#a66ccd202fa7bf1e52476e61d49a45ee6">GetHardwareVersion</a>());</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    <span class="keyword">const</span> std::string softwareVersion(<a class="code" href="namespacearmnn_1_1profiling.xhtml#a1a90cae723e311b3b71272a7f5ecccbb">GetSoftwareVersion</a>());</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;    <span class="keyword">const</span> std::string processName = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a52fbcd350a9f12a385a7c5562c1efd9a">GetProcessName</a>().substr(0, 60);</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    <span class="keyword">const</span> uint32_t infoSize =            <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.size()) + 1;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    <span class="keyword">const</span> uint32_t hardwareVersionSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(hardwareVersion.size()) + 1;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;    <span class="keyword">const</span> uint32_t softwareVersionSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(softwareVersion.size()) + 1;</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;    <span class="keyword">const</span> uint32_t processNameSize =     <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(processName.size()) + 1;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <span class="keyword">const</span> uint32_t sizeUint32 = <span class="keyword">sizeof</span>(uint32_t);</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <span class="keyword">const</span> uint32_t headerSize = 2 * sizeUint32;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;    <span class="keyword">const</span> uint32_t bodySize = 10 * sizeUint32;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    <span class="keyword">const</span> uint32_t packetVersionCountSize = sizeUint32;</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    <span class="comment">// Supported Packets</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    <span class="comment">// Packet Encoding version 1.0.0</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    <span class="comment">// Control packet family</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    <span class="comment">//   Stream metadata packet (packet family=0; packet id=0)</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    <span class="comment">//   Connection Acknowledged packet ( packet family=0, packet id=1) Version 1.0.0</span></div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    <span class="comment">//   Counter Directory packet (packet family=0; packet id=2) Version 1.0.0</span></div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    <span class="comment">//   Request Counter Directory packet ( packet family=0, packet id=3) Version 1.0.0</span></div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <span class="comment">//   Periodic Counter Selection packet ( packet family=0, packet id=4) Version 1.0.0</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    <span class="comment">//   Per Job Counter Selection packet ( packet family=0, packet id=5) Version 1.0.0</span></div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <span class="comment">//   Activate Timeline Reporting (packet family = 0, packet id = 6) Version 1.0.0</span></div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    <span class="comment">//   Deactivate Timeline Reporting (packet family = 0, packet id = 7) Version 1.0.0</span></div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <span class="comment">// Counter Packet Family</span></div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    <span class="comment">//   Periodic Counter Capture (packet_family = 3, packet_class = 0, packet_type = 0) Version 1.0.0</span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    <span class="comment">//   Per-Job Counter Capture (packet_family = 3, packet_class = 1, packet_type = 0,1) Version  1.0.0</span></div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    <span class="comment">// Timeline Packet Family</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    <span class="comment">//   Timeline Message Directory (packet_family = 1, packet_class = 0, packet_type = 0) Version 1.0.0</span></div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    <span class="comment">//   Timeline Message (packet_family = 1, packet_class = 0, packet_type = 1) Version 1.0.0</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    std::vector&lt;std::pair&lt;uint32_t, uint32_t&gt;&gt; packetVersions;</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    packetVersions.push_back(std::make_pair(<a class="code" href="namespacearmnn_1_1profiling.xhtml#a750935094e7dc62a6ce69be8688ee9fc">ConstructHeader</a>(0, 0), arm::pipe::EncodeVersion(1, 0, 0)));</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    packetVersions.push_back(std::make_pair(<a class="code" href="namespacearmnn_1_1profiling.xhtml#a750935094e7dc62a6ce69be8688ee9fc">ConstructHeader</a>(0, 1), arm::pipe::EncodeVersion(1, 0, 0)));</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    packetVersions.push_back(std::make_pair(<a class="code" href="namespacearmnn_1_1profiling.xhtml#a750935094e7dc62a6ce69be8688ee9fc">ConstructHeader</a>(0, 2), arm::pipe::EncodeVersion(1, 0, 0)));</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    packetVersions.push_back(std::make_pair(<a class="code" href="namespacearmnn_1_1profiling.xhtml#a750935094e7dc62a6ce69be8688ee9fc">ConstructHeader</a>(0, 3), arm::pipe::EncodeVersion(1, 0, 0)));</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    packetVersions.push_back(std::make_pair(<a class="code" href="namespacearmnn_1_1profiling.xhtml#a750935094e7dc62a6ce69be8688ee9fc">ConstructHeader</a>(0, 4), arm::pipe::EncodeVersion(1, 0, 0)));</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;    packetVersions.push_back(std::make_pair(<a class="code" href="namespacearmnn_1_1profiling.xhtml#a750935094e7dc62a6ce69be8688ee9fc">ConstructHeader</a>(0, 5), arm::pipe::EncodeVersion(1, 0, 0)));</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    packetVersions.push_back(std::make_pair(<a class="code" href="namespacearmnn_1_1profiling.xhtml#a750935094e7dc62a6ce69be8688ee9fc">ConstructHeader</a>(0, 6), arm::pipe::EncodeVersion(1, 0, 0)));</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    packetVersions.push_back(std::make_pair(<a class="code" href="namespacearmnn_1_1profiling.xhtml#a750935094e7dc62a6ce69be8688ee9fc">ConstructHeader</a>(0, 7), arm::pipe::EncodeVersion(1, 0, 0)));</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    packetVersions.push_back(std::make_pair(<a class="code" href="namespacearmnn_1_1profiling.xhtml#a750935094e7dc62a6ce69be8688ee9fc">ConstructHeader</a>(3, 0, 0), arm::pipe::EncodeVersion(1, 0, 0)));</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;    packetVersions.push_back(std::make_pair(<a class="code" href="namespacearmnn_1_1profiling.xhtml#a750935094e7dc62a6ce69be8688ee9fc">ConstructHeader</a>(3, 1, 0), arm::pipe::EncodeVersion(1, 0, 0)));</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    packetVersions.push_back(std::make_pair(<a class="code" href="namespacearmnn_1_1profiling.xhtml#a750935094e7dc62a6ce69be8688ee9fc">ConstructHeader</a>(3, 1, 1), arm::pipe::EncodeVersion(1, 0, 0)));</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    packetVersions.push_back(std::make_pair(<a class="code" href="namespacearmnn_1_1profiling.xhtml#a750935094e7dc62a6ce69be8688ee9fc">ConstructHeader</a>(1, 0, 0), arm::pipe::EncodeVersion(1, 0, 0)));</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    packetVersions.push_back(std::make_pair(<a class="code" href="namespacearmnn_1_1profiling.xhtml#a750935094e7dc62a6ce69be8688ee9fc">ConstructHeader</a>(1, 0, 1), arm::pipe::EncodeVersion(1, 0, 0)));</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    uint32_t numberOfVersions = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(packetVersions.size());</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    uint32_t packetVersionSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(numberOfVersions * 2 * sizeUint32);</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    <span class="keyword">const</span> uint32_t payloadSize = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(infoSize + hardwareVersionSize +</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;                                                               softwareVersionSize + processNameSize +</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;                                                               packetVersionCountSize + packetVersionSize);</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    <span class="keyword">const</span> uint32_t totalSize = headerSize + bodySize + payloadSize;</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    uint32_t offset = 0;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    uint32_t reserved = 0;</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#a14328d977cec3abadcfd5935f04f3409">IPacketBufferPtr</a> writeBuffer = m_BufferManager.<a class="code" href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#a49c88b0e052621f30462c3bdbf3e4a7a">Reserve</a>(totalSize, reserved);</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    <span class="keywordflow">if</span> (writeBuffer == <span class="keyword">nullptr</span> || reserved &lt; totalSize)</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    {</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;        CancelOperationAndThrow&lt;BufferExhaustion&gt;(</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;            writeBuffer,</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;            fmt::format(<span class="stringliteral">&quot;No space left in buffer. Unable to reserve ({}) bytes.&quot;</span>, totalSize));</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    }</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    {</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;        <span class="comment">// Create header</span></div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;        <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, 0);</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;        offset += sizeUint32;</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;        <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, totalSize - headerSize);</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;        <span class="comment">// Packet body</span></div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;        offset += sizeUint32;</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;        <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, arm::pipe::PIPE_MAGIC); <span class="comment">// pipe_magic</span></div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;        offset += sizeUint32;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;        <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, arm::pipe::EncodeVersion(1, 0, 0)); <span class="comment">// stream_metadata_version</span></div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        offset += sizeUint32;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;        <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, <a class="code" href="_i_buffer_manager_8hpp.xhtml#aa710a41e4e10ec3243e29e74dacae3c0">MAX_METADATA_PACKET_LENGTH</a>); <span class="comment">// max_data_length</span></div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;        offset += sizeUint32;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;        <span class="keywordtype">int</span> pid = <a class="code" href="namespacearmnn_utils_1_1_processes.xhtml#a1d95dea376acbd82dde773e05db454be">armnnUtils::Processes::GetCurrentId</a>();</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;        <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, armnn::numeric_cast&lt;uint32_t&gt;(pid)); <span class="comment">// pid</span></div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;        offset += sizeUint32;</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;        uint32_t poolOffset = bodySize;</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;        <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, poolOffset); <span class="comment">// offset_info</span></div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;        offset += sizeUint32;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;        poolOffset += infoSize;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;        <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, poolOffset); <span class="comment">// offset_hw_version</span></div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;        offset += sizeUint32;</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;        poolOffset += hardwareVersionSize;</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;        <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, poolOffset); <span class="comment">// offset_sw_version</span></div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;        offset += sizeUint32;</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;        poolOffset += softwareVersionSize;</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;        <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, poolOffset); <span class="comment">// offset_process_name</span></div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;        offset += sizeUint32;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;        poolOffset += processNameSize;</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;        <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, poolOffset); <span class="comment">// offset_packet_version_table</span></div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;        offset += sizeUint32;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;        <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, 0); <span class="comment">// reserved</span></div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;        offset += sizeUint32;</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;        <span class="comment">// Pool</span></div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;        <span class="keywordflow">if</span> (infoSize)</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;        {</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;            memcpy(&amp;writeBuffer-&gt;GetWritableData()[offset], <a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>.c_str(), infoSize);</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;            offset += infoSize;</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        }</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;        memcpy(&amp;writeBuffer-&gt;GetWritableData()[offset], hardwareVersion.c_str(), hardwareVersionSize);</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;        offset += hardwareVersionSize;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;        memcpy(&amp;writeBuffer-&gt;GetWritableData()[offset], softwareVersion.c_str(), softwareVersionSize);</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        offset += softwareVersionSize;</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        memcpy(&amp;writeBuffer-&gt;GetWritableData()[offset], processName.c_str(), processNameSize);</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;        offset += processNameSize;</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;        <span class="keywordflow">if</span> (!packetVersions.empty())</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;        {</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;            <span class="comment">// Packet Version Count</span></div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;            <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, numberOfVersions &lt;&lt; 16);</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;            offset += sizeUint32;</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;            <span class="comment">// Packet Version Entries</span></div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;            <span class="keywordflow">for</span> (std::pair&lt;uint32_t, uint32_t&gt;&amp; packetVersion : packetVersions)</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;            {</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;                <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, packetVersion.first);</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;                offset += sizeUint32;</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;                <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(writeBuffer, offset, packetVersion.second);</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;                offset += sizeUint32;</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;            }</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;        }</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    }</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    <span class="keywordflow">catch</span>(...)</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    {</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;        CancelOperationAndThrow&lt;RuntimeException&gt;(writeBuffer, <span class="stringliteral">&quot;Error processing packet.&quot;</span>);</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;    }</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    m_BufferManager.<a class="code" href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#ad0faa8a317506b2e72252f087c7f3c46">Commit</a>(writeBuffer, totalSize, <span class="keyword">false</span>);</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;}</div><div class="ttc" id="classarmnn_1_1profiling_1_1_i_buffer_manager_xhtml_a49c88b0e052621f30462c3bdbf3e4a7a"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#a49c88b0e052621f30462c3bdbf3e4a7a">armnn::profiling::IBufferManager::Reserve</a></div><div class="ttdeci">virtual IPacketBufferPtr Reserve(unsigned int requestedSize, unsigned int &amp;reservedSize)=0</div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a66ccd202fa7bf1e52476e61d49a45ee6"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a66ccd202fa7bf1e52476e61d49a45ee6">armnn::profiling::GetHardwareVersion</a></div><div class="ttdeci">std::string GetHardwareVersion()</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00232">ProfilingUtils.cpp:232</a></div></div>
<div class="ttc" id="namespacearmnn_utils_1_1_processes_xhtml_a1d95dea376acbd82dde773e05db454be"><div class="ttname"><a href="namespacearmnn_utils_1_1_processes.xhtml#a1d95dea376acbd82dde773e05db454be">armnnUtils::Processes::GetCurrentId</a></div><div class="ttdeci">int GetCurrentId()</div><div class="ttdef"><b>Definition:</b> <a href="_processes_8cpp_source.xhtml#l00019">Processes.cpp:19</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a3e638748a39d46e2943dfcef94dcb828"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">armnn::profiling::WriteUint32</a></div><div class="ttdeci">void WriteUint32(const IPacketBufferPtr &amp;packetBuffer, unsigned int offset, uint32_t value)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00121">ProfilingUtils.cpp:121</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a52fbcd350a9f12a385a7c5562c1efd9a"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a52fbcd350a9f12a385a7c5562c1efd9a">armnn::profiling::GetProcessName</a></div><div class="ttdeci">std::string GetProcessName()</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00243">ProfilingUtils.cpp:243</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_buffer_manager_xhtml_ad0faa8a317506b2e72252f087c7f3c46"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_buffer_manager.xhtml#ad0faa8a317506b2e72252f087c7f3c46">armnn::profiling::IBufferManager::Commit</a></div><div class="ttdeci">virtual void Commit(IPacketBufferPtr &amp;packetBuffer, unsigned int size, bool notifyConsumer=true)=0</div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_af38e9c5d82c9317255665a6315842166"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#af38e9c5d82c9317255665a6315842166">armnn::profiling::GetSoftwareInfo</a></div><div class="ttdeci">std::string GetSoftwareInfo()</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00227">ProfilingUtils.cpp:227</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a750935094e7dc62a6ce69be8688ee9fc"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a750935094e7dc62a6ce69be8688ee9fc">armnn::profiling::ConstructHeader</a></div><div class="ttdeci">uint32_t ConstructHeader(uint32_t packetFamily, uint32_t packetId)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00100">ProfilingUtils.cpp:100</a></div></div>
<div class="ttc" id="_i_buffer_manager_8hpp_xhtml_aa710a41e4e10ec3243e29e74dacae3c0"><div class="ttname"><a href="_i_buffer_manager_8hpp.xhtml#aa710a41e4e10ec3243e29e74dacae3c0">MAX_METADATA_PACKET_LENGTH</a></div><div class="ttdeci">#define MAX_METADATA_PACKET_LENGTH</div><div class="ttdef"><b>Definition:</b> <a href="_i_buffer_manager_8hpp_source.xhtml#l00013">IBufferManager.hpp:13</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a1a90cae723e311b3b71272a7f5ecccbb"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a1a90cae723e311b3b71272a7f5ecccbb">armnn::profiling::GetSoftwareVersion</a></div><div class="ttdeci">std::string GetSoftwareVersion()</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00237">ProfilingUtils.cpp:237</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a14328d977cec3abadcfd5935f04f3409"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a14328d977cec3abadcfd5935f04f3409">armnn::profiling::IPacketBufferPtr</a></div><div class="ttdeci">std::unique_ptr&lt; IPacketBuffer &gt; IPacketBufferPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_packet_buffer_8hpp_source.xhtml#l00044">IPacketBuffer.hpp:44</a></div></div>
</div><!-- fragment -->
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>src/profiling/<a class="el" href="_send_counter_packet_8hpp_source.xhtml">SendCounterPacket.hpp</a></li>
<li>src/profiling/<a class="el" href="_send_counter_packet_8cpp_source.xhtml">SendCounterPacket.cpp</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="namespacearmnn.xhtml">armnn</a></li><li class="navelem"><a class="el" href="namespacearmnn_1_1profiling.xhtml">profiling</a></li><li class="navelem"><a class="el" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml">SendCounterPacket</a></li>
    <li class="footer">Generated on Thu Feb 25 2021 17:28:02 for ArmNN by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
  </ul>
</div>
</body>
</html>