aboutsummaryrefslogtreecommitdiff
path: root/21.02/_directory_capture_command_handler_8cpp_source.xhtml
blob: 0169d3c316a854c0e4d672a86bb91cd95b6e4553 (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
<!-- 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: src/profiling/DirectoryCaptureCommandHandler.cpp Source File</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('_directory_capture_command_handler_8cpp_source.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="headertitle">
<div class="title">DirectoryCaptureCommandHandler.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_directory_capture_command_handler_8cpp.xhtml">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// Copyright © 2019 Arm Ltd and Contributors. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// SPDX-License-Identifier: MIT</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;</div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_directory_capture_command_handler_8hpp.xhtml">DirectoryCaptureCommandHandler.hpp</a>&quot;</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_backend_id_8hpp.xhtml">armnn/BackendId.hpp</a>&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_profiling_utils_8hpp.xhtml">ProfilingUtils.hpp</a>&quot;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &lt;atomic&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;{</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="keyword">namespace </span>profiling</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="comment">// Utils</span></div><div class="line"><a name="l00021"></a><span class="lineno"><a class="line" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">   21</a></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="l00022"></a><span class="lineno"><a class="line" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">   22</a></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="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keywordtype">void</span> DirectoryCaptureCommandHandler::ParseData(<span class="keyword">const</span> arm::pipe::Packet&amp; packet)</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;    uint16_t categoryRecordCount;</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;    uint16_t counterSetRecordCount;</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;    uint16_t deviceRecordCount;</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;    uint32_t offset = 0;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;    <span class="keywordflow">if</span> (packet.GetLength() &lt; 8)</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;        std::cout &lt;&lt; <span class="stringliteral">&quot;Counter directory packet received.&quot;</span> &lt;&lt; std::endl;</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;        <span class="keywordflow">return</span>;</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;    }</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* data = packet.GetData();</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <span class="comment">// Body header word 0:</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    <span class="comment">// 0:15  [16] reserved: all zeros</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</div><div class="line"><a name="l00042"></a><span class="lineno">   42</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="l00043"></a><span class="lineno">   43</span>&#160;    deviceRecordCount = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">profiling::ReadUint16</a>(data, offset);</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    <span class="comment">// Body header word 1:</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</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="l00048"></a><span class="lineno">   48</span>&#160;    <span class="comment">// The offset is always zero here, as the device record pointer table field is always the first item in the pool</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    <span class="keyword">const</span> uint32_t deviceRecordsPointerTableOffset = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">profiling::ReadUint32</a>(data, offset);</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    <span class="comment">// Body header word 2:</span></div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;    <span class="comment">// 0:15  [16] reserved: all zeros</span></div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</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="l00056"></a><span class="lineno">   56</span>&#160;    counterSetRecordCount = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">profiling::ReadUint16</a>(data, offset);</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;    offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    <span class="comment">// Body header word 3:</span></div><div class="line"><a name="l00060"></a><span class="lineno">   60</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="l00061"></a><span class="lineno">   61</span>&#160;    <span class="keyword">const</span> uint32_t counterPointerTableSetOffset = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">profiling::ReadUint32</a>(data, offset);</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    <span class="comment">// Body header word 4:</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    <span class="comment">// 0:15  [16] reserved: all zeros</span></div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</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="l00068"></a><span class="lineno">   68</span>&#160;    categoryRecordCount = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">profiling::ReadUint16</a>(data, offset);</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="comment">// Body header word 5:</span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</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="l00073"></a><span class="lineno">   73</span>&#160;    <span class="keyword">const</span> uint32_t categoriesPointerTableOffset = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">profiling::ReadUint32</a>(data, offset);</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    std::vector&lt;uint32_t&gt; deviceRecordOffsets(deviceRecordCount);</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    std::vector&lt;uint32_t&gt; counterSetOffsets(counterSetRecordCount);</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    std::vector&lt;uint32_t&gt; categoryOffsets(categoryRecordCount);</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    offset = deviceRecordsPointerTableOffset;</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; deviceRecordCount; ++i)</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;        deviceRecordOffsets[i] = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">profiling::ReadUint32</a>(data, offset);</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;        offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    }</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;    offset = counterPointerTableSetOffset;</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; counterSetRecordCount; ++i)</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    {</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;        counterSetOffsets[i] = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">profiling::ReadUint32</a>(data, offset);</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;        offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    }</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    offset = categoriesPointerTableOffset;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; categoryRecordCount; ++i)</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    {</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;        categoryOffsets[i] = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">profiling::ReadUint32</a>(data, offset);</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;        offset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</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;</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    offset = deviceRecordsPointerTableOffset;</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;    <span class="keywordflow">for</span> (uint32_t deviceIndex = 0; deviceIndex &lt; deviceRecordCount; ++deviceIndex)</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;        uint32_t deviceRecordOffset = offset + deviceRecordOffsets[deviceIndex];</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;        <span class="comment">// Device record word 0:</span></div><div class="line"><a name="l00106"></a><span class="lineno">  106</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="l00107"></a><span class="lineno">  107</span>&#160;        uint16_t deviceCores = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">profiling::ReadUint16</a>(data, deviceRecordOffset);</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;        <span class="comment">// 16:31 [16] deviceUid: the unique identifier for the device</span></div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;        deviceRecordOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;        uint16_t deviceUid = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">profiling::ReadUint16</a>(data, deviceRecordOffset);</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;        deviceRecordOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;        <span class="comment">// Device record word 1:</span></div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;        <span class="comment">// Offset from the beginning of the device record pool to the name field.</span></div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;        uint32_t nameOffset = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">profiling::ReadUint32</a>(data, deviceRecordOffset);</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;        deviceRecordOffset = deviceRecordsPointerTableOffset + nameOffset;</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;        <span class="keyword">const</span> std::string&amp; deviceName             = GetStringNameFromBuffer(data, deviceRecordOffset);</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml">Device</a>* registeredDevice            = m_CounterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a6ec101239653ba9260e1362c5381e81d">RegisterDevice</a>(deviceName, deviceCores);</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;        m_UidTranslation[registeredDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>] = deviceUid;</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    }</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    offset = counterPointerTableSetOffset;</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    <span class="keywordflow">for</span> (uint32_t counterSetIndex = 0; counterSetIndex &lt; counterSetRecordCount; ++counterSetIndex)</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    {</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;        uint32_t counterSetOffset = offset + counterSetOffsets[counterSetIndex];</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;        <span class="comment">// Counter set record word 0:</span></div><div class="line"><a name="l00130"></a><span class="lineno">  130</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="l00131"></a><span class="lineno">  131</span>&#160;        uint16_t counterSetCount = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">profiling::ReadUint16</a>(data, counterSetOffset);</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;        counterSetOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</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">// 16:31 [16] deviceUid: the unique identifier for the counter_set</span></div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;        uint16_t counterSetUid = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">profiling::ReadUint16</a>(data, counterSetOffset);</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;        counterSetOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</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;        <span class="comment">// Counter set record word 1:</span></div><div class="line"><a name="l00139"></a><span class="lineno">  139</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="l00140"></a><span class="lineno">  140</span>&#160;        <span class="comment">// The offset is always zero here, as the name field is always the first (and only) item in the pool</span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;        counterSetOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;        counterSetOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;        <span class="keyword">auto</span> counterSet =</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;            m_CounterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a161604d904508d5b86b459c2c2ace4be">RegisterCounterSet</a>(GetStringNameFromBuffer(data, counterSetOffset), counterSetCount);</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;        m_UidTranslation[counterSet-&gt;m_Uid] = counterSetUid;</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;    }</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    ReadCategoryRecords(data, categoriesPointerTableOffset, categoryOffsets);</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;}</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="keywordtype">void</span> DirectoryCaptureCommandHandler::ReadCategoryRecords(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> data,</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;                                                         uint32_t offset,</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;                                                         std::vector&lt;uint32_t&gt; categoryOffsets)</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;    uint32_t categoryRecordCount = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(categoryOffsets.size());</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;</div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    <span class="keywordflow">for</span> (uint32_t categoryIndex = 0; categoryIndex &lt; categoryRecordCount; ++categoryIndex)</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    {</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;        uint32_t categoryRecordOffset = offset + categoryOffsets[categoryIndex];</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;        <span class="comment">// Category record word 1:</span></div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;        <span class="comment">// 0:15 Reserved, value 0x0000.</span></div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;        categoryRecordOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;        <span class="comment">// 16:31 Number of events belonging to this category.</span></div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;        uint32_t eventCount = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">profiling::ReadUint16</a>(data, categoryRecordOffset);</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;        categoryRecordOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;        <span class="comment">// Category record word 2</span></div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;        <span class="comment">// 0:31  Offset from the beginning of the category data pool to the event_pointer_table</span></div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;        uint32_t eventPointerTableOffset = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">profiling::ReadUint32</a>(data, categoryRecordOffset);</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;        categoryRecordOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;        <span class="comment">// Category record word 3</span></div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;        <span class="comment">// 0:31 Offset from the beginning of the category data pool to the name field.</span></div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;        uint32_t nameOffset = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">profiling::ReadUint32</a>(data, categoryRecordOffset);</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;        categoryRecordOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><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;        std::vector&lt;uint32_t&gt; eventRecordsOffsets(eventCount);</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;        eventPointerTableOffset += offset + categoryOffsets[categoryIndex];</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;        <span class="keywordflow">for</span> (uint32_t eventIndex = 0; eventIndex &lt; eventCount; ++eventIndex)</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;        {</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;            eventRecordsOffsets[eventIndex] =</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;                <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">profiling::ReadUint32</a>(data, eventPointerTableOffset + uint32_t_size * eventIndex);</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;</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;        <span class="keyword">const</span> std::vector&lt;CounterDirectoryEventRecord&gt;&amp; eventRecords =</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;            ReadEventRecords(data, eventPointerTableOffset, eventRecordsOffsets);</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;        <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml">Category</a>* category = m_CounterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a220a83a3433b6da68d41efe07c39b552">RegisterCategory</a>(</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;            GetStringNameFromBuffer(data, offset + categoryOffsets[categoryIndex] + nameOffset + uint32_t_size));</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">auto</span>&amp; counter : eventRecords)</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;        {</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;            <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml">Counter</a>* registeredCounter = m_CounterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ab9756dfaf9b36cc51262369a27d1384f">RegisterCounter</a>(armnn::profiling::BACKEND_ID,</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;                                                                                  counter.m_CounterUid,</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;                                                                                  category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a>,</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;                                                                                  counter.m_CounterClass,</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;                                                                                  counter.m_CounterInterpolation,</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;                                                                                  counter.m_CounterMultiplier,</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;                                                                                  counter.m_CounterName,</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;                                                                                  counter.m_CounterDescription,</div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;                                                                                  counter.m_CounterUnits);</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;            m_UidTranslation[registeredCounter-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>] = counter.m_CounterUid;</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;    }</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;}</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;std::vector&lt;CounterDirectoryEventRecord&gt; DirectoryCaptureCommandHandler::ReadEventRecords(</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* data, uint32_t offset, std::vector&lt;uint32_t&gt; eventRecordsOffsets)</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;{</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;    uint32_t eventCount = <span class="keyword">static_cast&lt;</span>uint32_t<span class="keyword">&gt;</span>(eventRecordsOffsets.size());</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    std::vector&lt;CounterDirectoryEventRecord&gt; eventRecords(eventCount);</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> i = 0; i &lt; eventCount; ++i)</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;        uint32_t eventRecordOffset = eventRecordsOffsets[i] + offset;</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;        <span class="comment">// Event record word 0:</span></div><div class="line"><a name="l00220"></a><span class="lineno">  220</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="l00221"></a><span class="lineno">  221</span>&#160;        eventRecords[i].m_CounterUid = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">profiling::ReadUint16</a>(data, eventRecordOffset);</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;        eventRecordOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</div><div class="line"><a name="l00223"></a><span class="lineno">  223</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="l00224"></a><span class="lineno">  224</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="l00225"></a><span class="lineno">  225</span>&#160;        <span class="comment">//                             (counter_uid + cores (from device_record)) - 1.</span></div><div class="line"><a name="l00226"></a><span class="lineno">  226</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="l00227"></a><span class="lineno">  227</span>&#160;        <span class="comment">//                             the counter_uid value</span></div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;        eventRecords[i].m_MaxCounterUid = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">profiling::ReadUint16</a>(data, eventRecordOffset);</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;        eventRecordOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</div><div class="line"><a name="l00230"></a><span class="lineno">  230</span>&#160;</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;        <span class="comment">// Event record word 1:</span></div><div class="line"><a name="l00232"></a><span class="lineno">  232</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="l00233"></a><span class="lineno">  233</span>&#160;        <span class="comment">//                         is NOT associated with a counter_set</span></div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;        eventRecords[i].m_CounterSetUid  = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">profiling::ReadUint16</a>(data, eventRecordOffset);</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;        eventRecordOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;</div><div class="line"><a name="l00237"></a><span class="lineno">  237</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="l00238"></a><span class="lineno">  238</span>&#160;        <span class="comment">//                    associated with a device</span></div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;        eventRecords[i].m_DeviceUid = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">profiling::ReadUint16</a>(data, eventRecordOffset);</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;        eventRecordOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;        <span class="comment">// Event record word 2:</span></div><div class="line"><a name="l00243"></a><span class="lineno">  243</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="l00244"></a><span class="lineno">  244</span>&#160;        eventRecords[i].m_CounterInterpolation = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">profiling::ReadUint16</a>(data, eventRecordOffset);</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        eventRecordOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</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;        <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="l00248"></a><span class="lineno">  248</span>&#160;        eventRecords[i].m_CounterClass = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">profiling::ReadUint16</a>(data, eventRecordOffset);</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;        eventRecordOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#a2fd55777ec061a6c6df855677c165a03">uint16_t_size</a>;</div><div class="line"><a name="l00250"></a><span class="lineno">  250</span>&#160;</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;        <span class="comment">// Event record word 3-4:</span></div><div class="line"><a name="l00252"></a><span class="lineno">  252</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="l00253"></a><span class="lineno">  253</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="l00254"></a><span class="lineno">  254</span>&#160;        uint32_t multiplier[2] = { 0u, 0u };</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;        multiplier[0] = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">profiling::ReadUint32</a>(data, eventRecordOffset);</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;        eventRecordOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;        multiplier[1] = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">profiling::ReadUint32</a>(data, eventRecordOffset);</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;        eventRecordOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</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;        std::memcpy(&amp;eventRecords[i].m_CounterMultiplier, &amp;multiplier, <span class="keyword">sizeof</span>(multiplier));</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;        <span class="comment">// Event record word 5:</span></div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;        <span class="comment">// 0:31 [32] name_eventRecordOffset: eventRecordOffset from the</span></div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;        <span class="comment">// beginning of the event record pool to the name field</span></div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;        <span class="comment">// The eventRecordOffset is always zero here, as the name field is always the first item in the pool</span></div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;        uint32_t nameOffset = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">profiling::ReadUint32</a>(data, eventRecordOffset);</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;        eventRecordOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;        <span class="comment">// Event record word 6:</span></div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;        <span class="comment">// 0:31 [32] description_eventRecordOffset: eventRecordOffset from the</span></div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;        <span class="comment">// beginning of the event record pool to the description field</span></div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;        <span class="comment">// The size of the name buffer in bytes</span></div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;        uint32_t descriptionOffset = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">profiling::ReadUint32</a>(data, eventRecordOffset);</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;        eventRecordOffset += <a class="code" href="namespacearmnn_1_1profiling.xhtml#aabcf5c25522e8a0542c95174056cfcac">uint32_t_size</a>;</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;        <span class="comment">// Event record word 7:</span></div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;        <span class="comment">// 0:31 [32] units_eventRecordOffset: (optional) eventRecordOffset from the</span></div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;        <span class="comment">// beginning of the event record pool to the units field.</span></div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;        <span class="comment">// An eventRecordOffset value of zero indicates this field is not provided</span></div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;        uint32_t unitsOffset = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">profiling::ReadUint32</a>(data, eventRecordOffset);</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;        eventRecords[i].m_CounterName = GetStringNameFromBuffer(data, offset +</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;                                                                      eventRecordsOffsets[i] +</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;                                                                      nameOffset +</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;                                                                      uint32_t_size);</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;        eventRecords[i].m_CounterDescription = GetStringNameFromBuffer(data, offset +</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;                                                                             eventRecordsOffsets[i] +</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;                                                                             descriptionOffset +</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;                                                                             uint32_t_size);</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;        eventRecords[i].m_CounterUnits = unitsOffset == 0 ? <a class="code" href="classarmnn_1_1_optional.xhtml">Optional&lt;std::string&gt;</a>() :</div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;                GetStringNameFromBuffer(data, eventRecordsOffsets[i] + offset + unitsOffset + uint32_t_size);</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;    }</div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    <span class="keywordflow">return</span> eventRecords;</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;}</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;</div><div class="line"><a name="l00300"></a><span class="lineno"><a class="line" href="classarmnn_1_1profiling_1_1_directory_capture_command_handler.xhtml#a7f194544050d3b16f7363a93a234b89c">  300</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classarmnn_1_1profiling_1_1_directory_capture_command_handler.xhtml#a7f194544050d3b16f7363a93a234b89c">DirectoryCaptureCommandHandler::operator()</a>(<span class="keyword">const</span> arm::pipe::Packet&amp; packet)</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;    <span class="keywordflow">if</span> (!m_QuietOperation)    <span class="comment">// Are we supposed to print to stdout?</span></div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    {</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;        std::cout &lt;&lt; <span class="stringliteral">&quot;Counter directory packet received.&quot;</span> &lt;&lt; std::endl;</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;</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    <span class="comment">// The ArmNN counter directory is static per ArmNN instance. Ensure we don&#39;t parse it a second time.</span></div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="classarmnn_1_1profiling_1_1_directory_capture_command_handler.xhtml#a7877b37f88f6d9d8743b492a2970c837">ParsedCounterDirectory</a>())</div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    {</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;        ParseData(packet);</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;        m_AlreadyParsed = <span class="keyword">true</span>;</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;    }</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="keywordflow">if</span> (!m_QuietOperation)</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    {</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;        <a class="code" href="namespacearmnn_1_1profiling.xhtml#a02f98a63d0ef3a10bb359c3ac525f330">armnn::profiling::PrintCounterDirectory</a>(m_CounterDirectory);</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    }</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;</div><div class="line"><a name="l00320"></a><span class="lineno"><a class="line" href="classarmnn_1_1profiling_1_1_directory_capture_command_handler.xhtml#adfaa32654e05eab63b2adc34b2138475">  320</a></span>&#160;<span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml">ICounterDirectory</a>&amp; <a class="code" href="classarmnn_1_1profiling_1_1_directory_capture_command_handler.xhtml#adfaa32654e05eab63b2adc34b2138475">DirectoryCaptureCommandHandler::GetCounterDirectory</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;    <span class="keywordflow">return</span> m_CounterDirectory;</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;}</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;std::string DirectoryCaptureCommandHandler::GetStringNameFromBuffer(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* <span class="keyword">const</span> data, uint32_t offset)</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;{</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;    std::string deviceName;</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    uint8_t nextChar = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a74b483b652cc32f03151b10a1366d607">profiling::ReadUint8</a>(data, offset);</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;    <span class="keywordflow">while</span> (isprint(nextChar))</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;    {</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;        deviceName += <span class="keyword">static_cast&lt;</span><span class="keywordtype">char</span><span class="keyword">&gt;</span>(nextChar);</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;        offset++;</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;        nextChar = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a74b483b652cc32f03151b10a1366d607">profiling::ReadUint8</a>(data, offset);</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;    }</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="keywordflow">return</span> deviceName;</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;}</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;</div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;}    <span class="comment">// namespace profiling</span></div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;}    <span class="comment">// namespace armnn</span></div><div class="ttc" id="classarmnn_1_1profiling_1_1_counter_directory_xhtml_a220a83a3433b6da68d41efe07c39b552"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a220a83a3433b6da68d41efe07c39b552">armnn::profiling::CounterDirectory::RegisterCategory</a></div><div class="ttdeci">const Category * RegisterCategory(const std::string &amp;categoryName) override</div><div class="ttdef"><b>Definition:</b> <a href="_counter_directory_8cpp_source.xhtml#l00023">CounterDirectory.cpp:23</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_directory_xhtml_ab9756dfaf9b36cc51262369a27d1384f"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ab9756dfaf9b36cc51262369a27d1384f">armnn::profiling::CounterDirectory::RegisterCounter</a></div><div class="ttdeci">const Counter * RegisterCounter(const BackendId &amp;backendId, const uint16_t uid, const std::string &amp;parentCategoryName, uint16_t counterClass, uint16_t interpolation, double multiplier, const std::string &amp;name, const std::string &amp;description, const Optional&lt; std::string &gt; &amp;units=EmptyOptional(), const Optional&lt; uint16_t &gt; &amp;numberOfCores=EmptyOptional(), const Optional&lt; uint16_t &gt; &amp;deviceUid=EmptyOptional(), const Optional&lt; uint16_t &gt; &amp;counterSetUid=EmptyOptional()) override</div><div class="ttdef"><b>Definition:</b> <a href="_counter_directory_8cpp_source.xhtml#l00181">CounterDirectory.cpp:181</a></div></div>
<div class="ttc" id="classarmnn_1_1_optional_xhtml"><div class="ttname"><a href="classarmnn_1_1_optional.xhtml">armnn::Optional&lt; std::string &gt;</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_category_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_category.xhtml">armnn::profiling::Category</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00046">ICounterDirectory.hpp:46</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_category_xhtml_ab13844df5477a9ab8f13069e3d8abad6"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_category.xhtml#ab13844df5477a9ab8f13069e3d8abad6">armnn::profiling::Category::m_Name</a></div><div class="ttdeci">std::string m_Name</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00055">ICounterDirectory.hpp:55</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a0ffb94cb0085a54a92f1c4eeaa6cf772"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">armnn::profiling::ReadUint16</a></div><div class="ttdeci">uint16_t ReadUint16(const IPacketBufferPtr &amp;packetBuffer, unsigned int offset)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00188">ProfilingUtils.cpp:188</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter.xhtml">armnn::profiling::Counter</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00093">ICounterDirectory.hpp:93</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a74b483b652cc32f03151b10a1366d607"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a74b483b652cc32f03151b10a1366d607">armnn::profiling::ReadUint8</a></div><div class="ttdeci">uint8_t ReadUint8(const IPacketBufferPtr &amp;packetBuffer, unsigned int offset)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00195">ProfilingUtils.cpp:195</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml"><div class="ttname"><a href="namespacearmnn.xhtml">armnn</a></div><div class="ttdoc">Copyright (c) 2021 ARM Limited and Contributors. </div><div class="ttdef"><b>Definition:</b> <a href="01__00__software__tools_8dox_source.xhtml#l00006">01_00_software_tools.dox:6</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_directory_capture_command_handler_xhtml_a7877b37f88f6d9d8743b492a2970c837"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_directory_capture_command_handler.xhtml#a7877b37f88f6d9d8743b492a2970c837">armnn::profiling::DirectoryCaptureCommandHandler::ParsedCounterDirectory</a></div><div class="ttdeci">bool ParsedCounterDirectory()</div><div class="ttdef"><b>Definition:</b> <a href="_directory_capture_command_handler_8hpp_source.xhtml#l00048">DirectoryCaptureCommandHandler.hpp:48</a></div></div>
<div class="ttc" id="_directory_capture_command_handler_8hpp_xhtml"><div class="ttname"><a href="_directory_capture_command_handler_8hpp.xhtml">DirectoryCaptureCommandHandler.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_directory_capture_command_handler_xhtml_a7f194544050d3b16f7363a93a234b89c"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_directory_capture_command_handler.xhtml#a7f194544050d3b16f7363a93a234b89c">armnn::profiling::DirectoryCaptureCommandHandler::operator()</a></div><div class="ttdeci">void operator()(const arm::pipe::Packet &amp;packet) override</div><div class="ttdef"><b>Definition:</b> <a href="_directory_capture_command_handler_8cpp_source.xhtml#l00300">DirectoryCaptureCommandHandler.cpp:300</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_device_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_device.xhtml">armnn::profiling::Device</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00061">ICounterDirectory.hpp:61</a></div></div>
<div class="ttc" id="_backend_id_8hpp_xhtml"><div class="ttname"><a href="_backend_id_8hpp.xhtml">BackendId.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_ad56f4c3ea5e88279bb6ef1f31d9dc6df"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">armnn::profiling::ReadUint32</a></div><div class="ttdeci">uint32_t ReadUint32(const IPacketBufferPtr &amp;packetBuffer, unsigned int offset)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00181">ProfilingUtils.cpp:181</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_device_xhtml_a58ce26007b307f7e6200e4af7fbf601d"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">armnn::profiling::Device::m_Uid</a></div><div class="ttdeci">uint16_t m_Uid</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00072">ICounterDirectory.hpp:72</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_counter_directory_xhtml_a6ec101239653ba9260e1362c5381e81d"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a6ec101239653ba9260e1362c5381e81d">armnn::profiling::CounterDirectory::RegisterDevice</a></div><div class="ttdeci">const Device * RegisterDevice(const std::string &amp;deviceName, uint16_t cores=0, const Optional&lt; std::string &gt; &amp;parentCategoryName=EmptyOptional()) override</div><div class="ttdef"><b>Definition:</b> <a href="_counter_directory_8cpp_source.xhtml#l00053">CounterDirectory.cpp:53</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_directory_xhtml_a161604d904508d5b86b459c2c2ace4be"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a161604d904508d5b86b459c2c2ace4be">armnn::profiling::CounterDirectory::RegisterCounterSet</a></div><div class="ttdeci">const CounterSet * RegisterCounterSet(const std::string &amp;counterSetName, uint16_t count=0, const Optional&lt; std::string &gt; &amp;parentCategoryName=EmptyOptional()) override</div><div class="ttdef"><b>Definition:</b> <a href="_counter_directory_8cpp_source.xhtml#l00114">CounterDirectory.cpp:114</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_directory_capture_command_handler_xhtml_adfaa32654e05eab63b2adc34b2138475"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_directory_capture_command_handler.xhtml#adfaa32654e05eab63b2adc34b2138475">armnn::profiling::DirectoryCaptureCommandHandler::GetCounterDirectory</a></div><div class="ttdeci">const ICounterDirectory &amp; GetCounterDirectory() const</div><div class="ttdef"><b>Definition:</b> <a href="_directory_capture_command_handler_8cpp_source.xhtml#l00320">DirectoryCaptureCommandHandler.cpp:320</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_counter_directory_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml">armnn::profiling::ICounterDirectory</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00137">ICounterDirectory.hpp:137</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a02f98a63d0ef3a10bb359c3ac525f330"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a02f98a63d0ef3a10bb359c3ac525f330">armnn::profiling::PrintCounterDirectory</a></div><div class="ttdeci">void PrintCounterDirectory(ICounterDirectory &amp;counterDirectory)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00857">ProfilingUtils.cpp:857</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_xhtml_a58ce26007b307f7e6200e4af7fbf601d"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">armnn::profiling::Counter::m_Uid</a></div><div class="ttdeci">uint16_t m_Uid</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00123">ICounterDirectory.hpp:123</a></div></div>
<div class="ttc" id="_profiling_utils_8hpp_xhtml"><div class="ttname"><a href="_profiling_utils_8hpp.xhtml">ProfilingUtils.hpp</a></div></div>
</div><!-- fragment --></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="dir_68267d1309a1af8e8297ef4c3efbcdba.xhtml">src</a></li><li class="navelem"><a class="el" href="dir_637c692f14729569dd2eac0c18e2a54a.xhtml">profiling</a></li><li class="navelem"><a class="el" href="_directory_capture_command_handler_8cpp.xhtml">DirectoryCaptureCommandHandler.cpp</a></li>
    <li class="footer">Generated on Fri Mar 19 2021 15:26:04 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>