aboutsummaryrefslogtreecommitdiff
path: root/21.02/_profiling_tests_8cpp_source.xhtml
blob: d5086d9f7a137584c71ce9724c3b7cd33be4130e (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
<!-- 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/test/ProfilingTests.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('_profiling_tests_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">ProfilingTests.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_profiling_tests_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="_profiling_tests_8hpp.xhtml">ProfilingTests.hpp</a>&quot;</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_profiling_test_utils_8hpp.xhtml">ProfilingTestUtils.hpp</a>&quot;</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;</div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_backend_profiling_8hpp.xhtml">backends/BackendProfiling.hpp</a>&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;common/include/EncodeVersion.hpp&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &lt;common/include/PacketVersionResolver.hpp&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#include &lt;common/include/SwTrace.hpp&gt;</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_command_handler_8hpp.xhtml">CommandHandler.hpp</a>&gt;</span></div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_connection_acknowledged_command_handler_8hpp.xhtml">ConnectionAcknowledgedCommandHandler.hpp</a>&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;CounterDirectory.hpp&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_counter_id_map_8hpp.xhtml">CounterIdMap.hpp</a>&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_holder_8hpp.xhtml">Holder.hpp</a>&gt;</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_i_counter_values_8hpp.xhtml">ICounterValues.hpp</a>&gt;</span></div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_periodic_counter_capture_8hpp.xhtml">PeriodicCounterCapture.hpp</a>&gt;</span></div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_periodic_counter_selection_command_handler_8hpp.xhtml">PeriodicCounterSelectionCommandHandler.hpp</a>&gt;</span></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_profiling_state_machine_8hpp.xhtml">ProfilingStateMachine.hpp</a>&gt;</span></div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_profiling_utils_8hpp.xhtml">ProfilingUtils.hpp</a>&gt;</span></div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_register_backend_counters_8hpp.xhtml">RegisterBackendCounters.hpp</a>&gt;</span></div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_request_counter_directory_command_handler_8hpp.xhtml">RequestCounterDirectoryCommandHandler.hpp</a>&gt;</span></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_runtime_8hpp.xhtml">Runtime.hpp</a>&gt;</span></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_socket_profiling_connection_8hpp.xhtml">SocketProfilingConnection.hpp</a>&gt;</span></div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_send_counter_packet_8hpp.xhtml">SendCounterPacket.hpp</a>&gt;</span></div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_send_thread_8hpp.xhtml">SendThread.hpp</a>&gt;</span></div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_send_timeline_packet_8hpp.xhtml">SendTimelinePacket.hpp</a>&gt;</span></div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_conversion_8hpp.xhtml">armnn/Conversion.hpp</a>&gt;</span></div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_types_8hpp.xhtml">armnn/Types.hpp</a>&gt;</span></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="preprocessor">#include &lt;<a class="code" href="_utils_8hpp.xhtml">armnn/Utils.hpp</a>&gt;</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_ignore_unused_8hpp.xhtml">armnn/utility/IgnoreUnused.hpp</a>&gt;</span></div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_numeric_cast_8hpp.xhtml">armnn/utility/NumericCast.hpp</a>&gt;</span></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="preprocessor">#include &lt;common/include/CommandHandlerKey.hpp&gt;</span></div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="preprocessor">#include &lt;common/include/CommandHandlerRegistry.hpp&gt;</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="preprocessor">#include &lt;common/include/SocketConnectionException.hpp&gt;</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="preprocessor">#include &lt;common/include/Packet.hpp&gt;</span></div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="preprocessor">#include &lt;cstdint&gt;</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="preprocessor">#include &lt;cstring&gt;</span></div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="preprocessor">#include &lt;limits&gt;</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;<span class="preprocessor">#include &lt;random&gt;</span></div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacearmnn_1_1profiling.xhtml">armnn::profiling</a>;</div><div class="line"><a name="l00052"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a50c4e63be72ccec884654d07f81bc9e9">   52</a></span>&#160;<span class="keyword">using</span> <a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#a0a80a7bc045affcf10846075b88cbca0">PacketType</a> = <a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#a0a80a7bc045affcf10846075b88cbca0">MockProfilingConnection::PacketType</a>;</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;<a class="code" href="_output_shape_of_squeeze_8cpp.xhtml#ae3a6cb217a792718f2bd0e8f45e3ca9e">BOOST_AUTO_TEST_SUITE</a>(ExternalProfiling)</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a601b55f7c0a964944b26681ae3528f41">   56</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckCommandHandlerKeyComparisons)</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;{</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;    arm::pipe::CommandHandlerKey testKey1_0(1, 1, 1);</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    arm::pipe::CommandHandlerKey testKey1_1(1, 1, 1);</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    arm::pipe::CommandHandlerKey testKey1_2(1, 2, 1);</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    arm::pipe::CommandHandlerKey testKey0(0, 1, 1);</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;    arm::pipe::CommandHandlerKey testKey1(0, 1, 1);</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;    arm::pipe::CommandHandlerKey testKey2(0, 1, 1);</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;    arm::pipe::CommandHandlerKey testKey3(0, 0, 0);</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    arm::pipe::CommandHandlerKey testKey4(0, 2, 2);</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    arm::pipe::CommandHandlerKey testKey5(0, 0, 2);</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    BOOST_CHECK(testKey1_0 &gt; testKey0);</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    BOOST_CHECK(testKey1_0 == testKey1_1);</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    BOOST_CHECK(testKey1_0 &lt; testKey1_2);</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;    BOOST_CHECK(testKey1 &lt; testKey4);</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;    BOOST_CHECK(testKey1 &gt; testKey3);</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    BOOST_CHECK(testKey1 &lt;= testKey4);</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    BOOST_CHECK(testKey1 &gt;= testKey3);</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    BOOST_CHECK(testKey1 &lt;= testKey2);</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;    BOOST_CHECK(testKey1 &gt;= testKey2);</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    BOOST_CHECK(testKey1 == testKey2);</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;    BOOST_CHECK(testKey1 == testKey1);</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;    BOOST_CHECK(!(testKey1 == testKey5));</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    BOOST_CHECK(!(testKey1 != testKey1));</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    BOOST_CHECK(testKey1 != testKey5);</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;    BOOST_CHECK(testKey1 == testKey2 &amp;&amp; testKey2 == testKey1);</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;    BOOST_CHECK(testKey0 == testKey1 &amp;&amp; testKey1 == testKey2 &amp;&amp; testKey0 == testKey2);</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;    BOOST_CHECK(testKey1.GetPacketId() == 1);</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    BOOST_CHECK(testKey1.GetVersion() == 1);</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    std::vector&lt;arm::pipe::CommandHandlerKey&gt; vect = {</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;        arm::pipe::CommandHandlerKey(0, 0, 1), arm::pipe::CommandHandlerKey(0, 2, 0),</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;        arm::pipe::CommandHandlerKey(0, 1, 0), arm::pipe::CommandHandlerKey(0, 2, 1),</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;        arm::pipe::CommandHandlerKey(0, 1, 1), arm::pipe::CommandHandlerKey(0, 0, 1),</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;        arm::pipe::CommandHandlerKey(0, 2, 0), arm::pipe::CommandHandlerKey(0, 0, 0) };</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;    std::sort(vect.begin(), vect.end());</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;    std::vector&lt;arm::pipe::CommandHandlerKey&gt; expectedVect = {</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;        arm::pipe::CommandHandlerKey(0, 0, 0), arm::pipe::CommandHandlerKey(0, 0, 1),</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;        arm::pipe::CommandHandlerKey(0, 0, 1), arm::pipe::CommandHandlerKey(0, 1, 0),</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;        arm::pipe::CommandHandlerKey(0, 1, 1), arm::pipe::CommandHandlerKey(0, 2, 0),</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;        arm::pipe::CommandHandlerKey(0, 2, 0), arm::pipe::CommandHandlerKey(0, 2, 1) };</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;    BOOST_CHECK(vect == expectedVect);</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;}</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;</div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a68a1e7e8fbc0036c48a805bcc311c9dc">  109</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckPacketKeyComparisons)</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;{</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    arm::pipe::PacketKey key0(0, 0);</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    arm::pipe::PacketKey key1(0, 0);</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    arm::pipe::PacketKey key2(0, 1);</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    arm::pipe::PacketKey key3(0, 2);</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    arm::pipe::PacketKey key4(1, 0);</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    arm::pipe::PacketKey key5(1, 0);</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    arm::pipe::PacketKey key6(1, 1);</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;    BOOST_CHECK(!(key0 &lt; key1));</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    BOOST_CHECK(!(key0 &gt; key1));</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    BOOST_CHECK(key0 &lt;= key1);</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    BOOST_CHECK(key0 &gt;= key1);</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    BOOST_CHECK(key0 == key1);</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    BOOST_CHECK(key0 &lt; key2);</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    BOOST_CHECK(key2 &lt; key3);</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    BOOST_CHECK(key3 &gt; key0);</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;    BOOST_CHECK(key4 == key5);</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    BOOST_CHECK(key4 &gt; key0);</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    BOOST_CHECK(key5 &lt; key6);</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;    BOOST_CHECK(key5 &lt;= key6);</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    BOOST_CHECK(key5 != key6);</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;}</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"><a class="line" href="_profiling_tests_8cpp.xhtml#a7d8fee7c71a98b84e2a6b08e3dbd2309">  134</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckCommandHandler)</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;    arm::pipe::PacketVersionResolver packetVersionResolver;</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingStateMachine;</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_test_profiling_connection_base.xhtml">TestProfilingConnectionBase</a> testProfilingConnectionBase;</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_test_profiling_connection_timeout_error.xhtml">TestProfilingConnectionTimeoutError</a> testProfilingConnectionTimeOutError;</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_test_profiling_connection_armnn_error.xhtml">TestProfilingConnectionArmnnError</a> testProfilingConnectionArmnnError;</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml">CounterDirectory</a> counterDirectory;</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml">MockBufferManager</a> mockBuffer(1024);</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml">SendCounterPacket</a> sendCounterPacket(mockBuffer);</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_send_thread.xhtml">SendThread</a> sendThread(profilingStateMachine, mockBuffer, sendCounterPacket);</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_send_timeline_packet.xhtml">SendTimelinePacket</a> sendTimelinePacket(mockBuffer);</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_service_status.xhtml">MockProfilingServiceStatus</a> mockProfilingServiceStatus;</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;    <a class="code" href="classarmnn_1_1profiling_1_1_connection_acknowledged_command_handler.xhtml">ConnectionAcknowledgedCommandHandler</a> connectionAcknowledgedCommandHandler(0, 1, 4194304, counterDirectory,</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;                                                                              sendCounterPacket, sendTimelinePacket,</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;                                                                              profilingStateMachine,</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;                                                                              mockProfilingServiceStatus);</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    arm::pipe::CommandHandlerRegistry commandHandlerRegistry;</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;    commandHandlerRegistry.RegisterFunctor(&amp;connectionAcknowledgedCommandHandler);</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;    profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_command_handler.xhtml">CommandHandler</a> commandHandler0(1, <span class="keyword">true</span>, commandHandlerRegistry, packetVersionResolver);</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    <span class="comment">// This should start the command handler thread return the connection ack and put the profiling</span></div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    <span class="comment">// service into active state.</span></div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    commandHandler0.<a class="code" href="classarmnn_1_1profiling_1_1_command_handler.xhtml#af5f886492fa5da4ff3cde1769e9da2cb">Start</a>(testProfilingConnectionBase);</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    <span class="comment">// Try to start the send thread many times, it must only start once</span></div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;    commandHandler0.<a class="code" href="classarmnn_1_1profiling_1_1_command_handler.xhtml#af5f886492fa5da4ff3cde1769e9da2cb">Start</a>(testProfilingConnectionBase);</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">// This could take up to 20mSec but we&#39;ll check often.</span></div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 10; i++)</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;    {</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;        <span class="keywordflow">if</span> (profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</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="keywordflow">break</span>;</div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;        }</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;        std::this_thread::sleep_for(std::chrono::milliseconds(2));</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    }</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;    BOOST_CHECK(profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</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="comment">// Close the thread again.</span></div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;    commandHandler0.<a class="code" href="classarmnn_1_1profiling_1_1_command_handler.xhtml#a17a237457e57625296e6b24feb19c60a">Stop</a>();</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;    profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;    profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;    <span class="comment">// In this test we&#39;ll simulate a timeout without a connection ack packet being received.</span></div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    <span class="comment">// Stop after timeout is set so we expect the command handler to stop almost immediately.</span></div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_command_handler.xhtml">CommandHandler</a> commandHandler1(1, <span class="keyword">true</span>, commandHandlerRegistry, packetVersionResolver);</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;    commandHandler1.<a class="code" href="classarmnn_1_1profiling_1_1_command_handler.xhtml#af5f886492fa5da4ff3cde1769e9da2cb">Start</a>(testProfilingConnectionTimeOutError);</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;    <span class="comment">// Wait until we know a timeout exception has been sent at least once.</span></div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 10; i++)</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;    {</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;        <span class="keywordflow">if</span> (testProfilingConnectionTimeOutError.<a class="code" href="classarmnn_1_1profiling_1_1_test_profiling_connection_timeout_error.xhtml#afb1d388dbb6bed7623ef1d3fb52fb52b">ReadCalledCount</a>())</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;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;        }</div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;        std::this_thread::sleep_for(std::chrono::milliseconds(2));</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    }</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;    <span class="comment">// The command handler loop should have stopped after the timeout.</span></div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;    <span class="comment">// wait for the timeout exception to be processed and the loop to break.</span></div><div class="line"><a name="l00203"></a><span class="lineno">  203</span>&#160;    uint32_t timeout   = 50;</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;    uint32_t timeSlept = 0;</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;    <span class="keywordflow">while</span> (commandHandler1.<a class="code" href="classarmnn_1_1profiling_1_1_command_handler.xhtml#ad201152b05beda61e51e3594ff07c8fe">IsRunning</a>())</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;        <span class="keywordflow">if</span> (timeSlept &gt;= timeout)</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;            BOOST_FAIL(<span class="stringliteral">&quot;Timeout: The command handler loop did not stop after the timeout&quot;</span>);</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;        }</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;        std::this_thread::sleep_for(std::chrono::milliseconds(1));</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;        timeSlept ++;</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;</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    commandHandler1.<a class="code" href="classarmnn_1_1profiling_1_1_command_handler.xhtml#a17a237457e57625296e6b24feb19c60a">Stop</a>();</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;    <span class="comment">// The state machine should never have received the ack so will still be in WaitingForAck.</span></div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    BOOST_CHECK(profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</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">// Now try sending a bad connection acknowledged packet</span></div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_test_profiling_connection_bad_ack_packet.xhtml">TestProfilingConnectionBadAckPacket</a> testProfilingConnectionBadAckPacket;</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    commandHandler1.<a class="code" href="classarmnn_1_1profiling_1_1_command_handler.xhtml#af5f886492fa5da4ff3cde1769e9da2cb">Start</a>(testProfilingConnectionBadAckPacket);</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;    commandHandler1.<a class="code" href="classarmnn_1_1profiling_1_1_command_handler.xhtml#a17a237457e57625296e6b24feb19c60a">Stop</a>();</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    <span class="comment">// This should also not change the state machine</span></div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;    BOOST_CHECK(profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;    <span class="comment">// Disable stop after timeout and now commandHandler1 should persist after a timeout</span></div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;    commandHandler1.<a class="code" href="classarmnn_1_1profiling_1_1_command_handler.xhtml#ad6feb3bc1f64bb41467da55d30e9403f">SetStopAfterTimeout</a>(<span class="keyword">false</span>);</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;    <span class="comment">// Restart the thread.</span></div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;    commandHandler1.<a class="code" href="classarmnn_1_1profiling_1_1_command_handler.xhtml#af5f886492fa5da4ff3cde1769e9da2cb">Start</a>(testProfilingConnectionTimeOutError);</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">// Wait for at the three timeouts and the ack to be sent.</span></div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 10; i++)</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    {</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;        <span class="keywordflow">if</span> (testProfilingConnectionTimeOutError.<a class="code" href="classarmnn_1_1profiling_1_1_test_profiling_connection_timeout_error.xhtml#afb1d388dbb6bed7623ef1d3fb52fb52b">ReadCalledCount</a>() &gt; 3)</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;        {</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;        }</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;        std::this_thread::sleep_for(std::chrono::milliseconds(2));</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;    }</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;    commandHandler1.<a class="code" href="classarmnn_1_1profiling_1_1_command_handler.xhtml#a17a237457e57625296e6b24feb19c60a">Stop</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">// Even after the 3 exceptions the ack packet should have transitioned the command handler to active.</span></div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;    BOOST_CHECK(profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;    <span class="comment">// A command handler that gets exceptions other than timeouts should keep going.</span></div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_command_handler.xhtml">CommandHandler</a> commandHandler2(1, <span class="keyword">false</span>, commandHandlerRegistry, packetVersionResolver);</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;    commandHandler2.Start(testProfilingConnectionArmnnError);</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="comment">// Wait for two exceptions to be thrown.</span></div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 10; i++)</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="keywordflow">if</span> (testProfilingConnectionTimeOutError.<a class="code" href="classarmnn_1_1profiling_1_1_test_profiling_connection_timeout_error.xhtml#afb1d388dbb6bed7623ef1d3fb52fb52b">ReadCalledCount</a>() &gt;= 2)</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;        {</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;            <span class="keywordflow">break</span>;</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;        }</div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;        std::this_thread::sleep_for(std::chrono::milliseconds(2));</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    }</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;    BOOST_CHECK(commandHandler2.IsRunning());</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;    commandHandler2.Stop();</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;</div><div class="line"><a name="l00264"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a24033fa4ee76961a9a483ff5f1cabde2">  264</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckEncodeVersion)</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;    arm::pipe::Version version1(12);</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;    BOOST_CHECK(version1.GetMajor() == 0);</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;    BOOST_CHECK(version1.GetMinor() == 0);</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;    BOOST_CHECK(version1.GetPatch() == 12);</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;    arm::pipe::Version version2(4108);</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    BOOST_CHECK(version2.GetMajor() == 0);</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;    BOOST_CHECK(version2.GetMinor() == 1);</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;    BOOST_CHECK(version2.GetPatch() == 12);</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;    arm::pipe::Version version3(4198412);</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    BOOST_CHECK(version3.GetMajor() == 1);</div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    BOOST_CHECK(version3.GetMinor() == 1);</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    BOOST_CHECK(version3.GetPatch() == 12);</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;    arm::pipe::Version version4(0);</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;    BOOST_CHECK(version4.GetMajor() == 0);</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;    BOOST_CHECK(version4.GetMinor() == 0);</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;    BOOST_CHECK(version4.GetPatch() == 0);</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;    arm::pipe::Version version5(1, 0, 0);</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;    BOOST_CHECK(version5.GetEncodedValue() == 4194304);</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;</div><div class="line"><a name="l00294"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a5dff12db4d833f443446e309c9e0e8eb">  294</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckPacketClass)</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;    uint32_t length                              = 4;</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;    std::unique_ptr&lt;unsigned char[]&gt; packetData0 = std::make_unique&lt;unsigned char[]&gt;(length);</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    std::unique_ptr&lt;unsigned char[]&gt; packetData1 = std::make_unique&lt;unsigned char[]&gt;(0);</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;    std::unique_ptr&lt;unsigned char[]&gt; nullPacketData;</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;    arm::pipe::Packet packetTest0(472580096, length, packetData0);</div><div class="line"><a name="l00302"></a><span class="lineno">  302</span>&#160;</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    BOOST_CHECK(packetTest0.GetHeader() == 472580096);</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    BOOST_CHECK(packetTest0.GetPacketFamily() == 7);</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;    BOOST_CHECK(packetTest0.GetPacketId() == 43);</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;    BOOST_CHECK(packetTest0.GetLength() == length);</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    BOOST_CHECK(packetTest0.GetPacketType() == 3);</div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;    BOOST_CHECK(packetTest0.GetPacketClass() == 5);</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;    BOOST_CHECK_THROW(arm::pipe::Packet packetTest1(472580096, 0, packetData1), arm::pipe::InvalidArgumentException);</div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    BOOST_CHECK_NO_THROW(arm::pipe::Packet packetTest2(472580096, 0, nullPacketData));</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;    arm::pipe::Packet packetTest3(472580096, 0, nullPacketData);</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;    BOOST_CHECK(packetTest3.GetLength() == 0);</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    BOOST_CHECK(packetTest3.GetData() == <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* packetTest0Data = packetTest0.GetData();</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;    arm::pipe::Packet packetTest4(std::move(packetTest0));</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">  320</span>&#160;    BOOST_CHECK(packetTest0.GetData() == <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;    BOOST_CHECK(packetTest4.GetData() == packetTest0Data);</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;    BOOST_CHECK(packetTest4.GetHeader() == 472580096);</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;    BOOST_CHECK(packetTest4.GetPacketFamily() == 7);</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;    BOOST_CHECK(packetTest4.GetPacketId() == 43);</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;    BOOST_CHECK(packetTest4.GetLength() == length);</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;    BOOST_CHECK(packetTest4.GetPacketType() == 3);</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;    BOOST_CHECK(packetTest4.GetPacketClass() == 5);</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;</div><div class="line"><a name="l00331"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#ab3ba67a2e30032d7112c66b99953a8e5">  331</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckCommandHandlerFunctor)</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;{</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    <span class="comment">// Hard code the version as it will be the same during a single profiling session</span></div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;    uint32_t version = 1;</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;    <a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml">TestFunctorA</a> testFunctorA(7, 461, version);</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_test_functor_b.xhtml">TestFunctorB</a> testFunctorB(8, 963, version);</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_test_functor_c.xhtml">TestFunctorC</a> testFunctorC(5, 983, version);</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;    arm::pipe::CommandHandlerKey keyA(</div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;        testFunctorA.GetFamilyId(), testFunctorA.GetPacketId(), testFunctorA.GetVersion());</div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;    arm::pipe::CommandHandlerKey keyB(</div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;        testFunctorB.GetFamilyId(), testFunctorB.GetPacketId(), testFunctorB.GetVersion());</div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;    arm::pipe::CommandHandlerKey keyC(</div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;        testFunctorC.GetFamilyId(), testFunctorC.GetPacketId(), testFunctorC.GetVersion());</div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;</div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;    <span class="comment">// Create the unwrapped map to simulate the Command Handler Registry</span></div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;    std::map&lt;arm::pipe::CommandHandlerKey, arm::pipe::CommandHandlerFunctor*&gt; registry;</div><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;    registry.insert(std::make_pair(keyB, &amp;testFunctorB));</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;    registry.insert(std::make_pair(keyA, &amp;testFunctorA));</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;    registry.insert(std::make_pair(keyC, &amp;testFunctorC));</div><div class="line"><a name="l00353"></a><span class="lineno">  353</span>&#160;</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;    <span class="comment">// Check the order of the map is correct</span></div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;    <span class="keyword">auto</span> it = registry.begin();</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;    BOOST_CHECK(it-&gt;first == keyC);    <span class="comment">// familyId == 5</span></div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;    it++;</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;    BOOST_CHECK(it-&gt;first == keyA);    <span class="comment">// familyId == 7</span></div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;    it++;</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;    BOOST_CHECK(it-&gt;first == keyB);    <span class="comment">// familyId == 8</span></div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;    std::unique_ptr&lt;unsigned char[]&gt; packetDataA;</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;    std::unique_ptr&lt;unsigned char[]&gt; packetDataB;</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    std::unique_ptr&lt;unsigned char[]&gt; packetDataC;</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    arm::pipe::Packet packetA(500000000, 0, packetDataA);</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;    arm::pipe::Packet packetB(600000000, 0, packetDataB);</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    arm::pipe::Packet packetC(400000000, 0, packetDataC);</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;    <span class="comment">// Check the correct operator of derived class is called</span></div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;    registry.at(arm::pipe::CommandHandlerKey(</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;        packetA.GetPacketFamily(), packetA.GetPacketId(), version))-&gt;operator()(packetA);</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;    BOOST_CHECK(testFunctorA.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 1);</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;    BOOST_CHECK(testFunctorB.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 0);</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;    BOOST_CHECK(testFunctorC.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 0);</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;    registry.at(arm::pipe::CommandHandlerKey(</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;        packetB.GetPacketFamily(), packetB.GetPacketId(), version))-&gt;operator()(packetB);</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;    BOOST_CHECK(testFunctorA.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 1);</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;    BOOST_CHECK(testFunctorB.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 1);</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;    BOOST_CHECK(testFunctorC.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 0);</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;    registry.at(arm::pipe::CommandHandlerKey(</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;        packetC.GetPacketFamily(), packetC.GetPacketId(), version))-&gt;operator()(packetC);</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;    BOOST_CHECK(testFunctorA.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 1);</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;    BOOST_CHECK(testFunctorB.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 1);</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;    BOOST_CHECK(testFunctorC.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 1);</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;}</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;</div><div class="line"><a name="l00390"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a5b18045e34d546ad8363c8a7168226ae">  390</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckCommandHandlerRegistry)</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;{</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;    <span class="comment">// Hard code the version as it will be the same during a single profiling session</span></div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;    uint32_t version = 1;</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml">TestFunctorA</a> testFunctorA(7, 461, version);</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_test_functor_b.xhtml">TestFunctorB</a> testFunctorB(8, 963, version);</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_test_functor_c.xhtml">TestFunctorC</a> testFunctorC(5, 983, version);</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;    <span class="comment">// Create the Command Handler Registry</span></div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;    arm::pipe::CommandHandlerRegistry registry;</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;    <span class="comment">// Register multiple different derived classes</span></div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;    registry.RegisterFunctor(&amp;testFunctorA);</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;    registry.RegisterFunctor(&amp;testFunctorB);</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;    registry.RegisterFunctor(&amp;testFunctorC);</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;    std::unique_ptr&lt;unsigned char[]&gt; packetDataA;</div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;    std::unique_ptr&lt;unsigned char[]&gt; packetDataB;</div><div class="line"><a name="l00409"></a><span class="lineno">  409</span>&#160;    std::unique_ptr&lt;unsigned char[]&gt; packetDataC;</div><div class="line"><a name="l00410"></a><span class="lineno">  410</span>&#160;</div><div class="line"><a name="l00411"></a><span class="lineno">  411</span>&#160;    arm::pipe::Packet packetA(500000000, 0, packetDataA);</div><div class="line"><a name="l00412"></a><span class="lineno">  412</span>&#160;    arm::pipe::Packet packetB(600000000, 0, packetDataB);</div><div class="line"><a name="l00413"></a><span class="lineno">  413</span>&#160;    arm::pipe::Packet packetC(400000000, 0, packetDataC);</div><div class="line"><a name="l00414"></a><span class="lineno">  414</span>&#160;</div><div class="line"><a name="l00415"></a><span class="lineno">  415</span>&#160;    <span class="comment">// Check the correct operator of derived class is called</span></div><div class="line"><a name="l00416"></a><span class="lineno">  416</span>&#160;    registry.GetFunctor(packetA.GetPacketFamily(), packetA.GetPacketId(), version)-&gt;<span class="keyword">operator</span>()(packetA);</div><div class="line"><a name="l00417"></a><span class="lineno">  417</span>&#160;    BOOST_CHECK(testFunctorA.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 1);</div><div class="line"><a name="l00418"></a><span class="lineno">  418</span>&#160;    BOOST_CHECK(testFunctorB.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 0);</div><div class="line"><a name="l00419"></a><span class="lineno">  419</span>&#160;    BOOST_CHECK(testFunctorC.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 0);</div><div class="line"><a name="l00420"></a><span class="lineno">  420</span>&#160;</div><div class="line"><a name="l00421"></a><span class="lineno">  421</span>&#160;    registry.GetFunctor(packetB.GetPacketFamily(), packetB.GetPacketId(), version)-&gt;<span class="keyword">operator</span>()(packetB);</div><div class="line"><a name="l00422"></a><span class="lineno">  422</span>&#160;    BOOST_CHECK(testFunctorA.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 1);</div><div class="line"><a name="l00423"></a><span class="lineno">  423</span>&#160;    BOOST_CHECK(testFunctorB.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 1);</div><div class="line"><a name="l00424"></a><span class="lineno">  424</span>&#160;    BOOST_CHECK(testFunctorC.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 0);</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;    registry.GetFunctor(packetC.GetPacketFamily(), packetC.GetPacketId(), version)-&gt;<span class="keyword">operator</span>()(packetC);</div><div class="line"><a name="l00427"></a><span class="lineno">  427</span>&#160;    BOOST_CHECK(testFunctorA.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 1);</div><div class="line"><a name="l00428"></a><span class="lineno">  428</span>&#160;    BOOST_CHECK(testFunctorB.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 1);</div><div class="line"><a name="l00429"></a><span class="lineno">  429</span>&#160;    BOOST_CHECK(testFunctorC.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 1);</div><div class="line"><a name="l00430"></a><span class="lineno">  430</span>&#160;</div><div class="line"><a name="l00431"></a><span class="lineno">  431</span>&#160;    <span class="comment">// Re-register an existing key with a new function</span></div><div class="line"><a name="l00432"></a><span class="lineno">  432</span>&#160;    registry.RegisterFunctor(&amp;testFunctorC, testFunctorA.GetFamilyId(), testFunctorA.GetPacketId(), version);</div><div class="line"><a name="l00433"></a><span class="lineno">  433</span>&#160;    registry.GetFunctor(packetA.GetPacketFamily(), packetA.GetPacketId(), version)-&gt;<span class="keyword">operator</span>()(packetC);</div><div class="line"><a name="l00434"></a><span class="lineno">  434</span>&#160;    BOOST_CHECK(testFunctorA.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 1);</div><div class="line"><a name="l00435"></a><span class="lineno">  435</span>&#160;    BOOST_CHECK(testFunctorB.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 1);</div><div class="line"><a name="l00436"></a><span class="lineno">  436</span>&#160;    BOOST_CHECK(testFunctorC.<a class="code" href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">GetCount</a>() == 2);</div><div class="line"><a name="l00437"></a><span class="lineno">  437</span>&#160;</div><div class="line"><a name="l00438"></a><span class="lineno">  438</span>&#160;    <span class="comment">// Check that non-existent key returns nullptr for its functor</span></div><div class="line"><a name="l00439"></a><span class="lineno">  439</span>&#160;    BOOST_CHECK_THROW(registry.GetFunctor(0, 0, 0), arm::pipe::ProfilingException);</div><div class="line"><a name="l00440"></a><span class="lineno">  440</span>&#160;}</div><div class="line"><a name="l00441"></a><span class="lineno">  441</span>&#160;</div><div class="line"><a name="l00442"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a8e12b23041e320b23fbd7e7ebc8a9208">  442</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckPacketVersionResolver)</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">// Set up random number generator for generating packetId values</span></div><div class="line"><a name="l00445"></a><span class="lineno">  445</span>&#160;    std::random_device device;</div><div class="line"><a name="l00446"></a><span class="lineno">  446</span>&#160;    std::mt19937 generator(device());</div><div class="line"><a name="l00447"></a><span class="lineno">  447</span>&#160;    std::uniform_int_distribution&lt;uint32_t&gt; distribution(std::numeric_limits&lt;uint32_t&gt;::min(),</div><div class="line"><a name="l00448"></a><span class="lineno">  448</span>&#160;                                                         std::numeric_limits&lt;uint32_t&gt;::max());</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">// NOTE: Expected version is always 1.0.0, regardless of packetId</span></div><div class="line"><a name="l00451"></a><span class="lineno">  451</span>&#160;    <span class="keyword">const</span> arm::pipe::Version expectedVersion(1, 0, 0);</div><div class="line"><a name="l00452"></a><span class="lineno">  452</span>&#160;</div><div class="line"><a name="l00453"></a><span class="lineno">  453</span>&#160;    arm::pipe::PacketVersionResolver packetVersionResolver;</div><div class="line"><a name="l00454"></a><span class="lineno">  454</span>&#160;</div><div class="line"><a name="l00455"></a><span class="lineno">  455</span>&#160;    constexpr <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numTests = 10u;</div><div class="line"><a name="l00456"></a><span class="lineno">  456</span>&#160;</div><div class="line"><a name="l00457"></a><span class="lineno">  457</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0u; i &lt; numTests; ++i)</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="keyword">const</span> uint32_t familyId = distribution(generator);</div><div class="line"><a name="l00460"></a><span class="lineno">  460</span>&#160;        <span class="keyword">const</span> uint32_t packetId = distribution(generator);</div><div class="line"><a name="l00461"></a><span class="lineno">  461</span>&#160;        arm::pipe::Version resolvedVersion = packetVersionResolver.ResolvePacketVersion(familyId, packetId);</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;        BOOST_TEST(resolvedVersion == expectedVersion);</div><div class="line"><a name="l00464"></a><span class="lineno">  464</span>&#160;    }</div><div class="line"><a name="l00465"></a><span class="lineno">  465</span>&#160;}</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"><a class="line" href="_profiling_tests_8cpp.xhtml#ab4d41bacbbe4c3524a95c6d67f6037f3">  467</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_profiling_tests_8cpp.xhtml#ab4d41bacbbe4c3524a95c6d67f6037f3">ProfilingCurrentStateThreadImpl</a>(<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a>&amp; states)</div><div class="line"><a name="l00468"></a><span class="lineno">  468</span>&#160;{</div><div class="line"><a name="l00469"></a><span class="lineno">  469</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806">ProfilingState</a> newState = <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>;</div><div class="line"><a name="l00470"></a><span class="lineno">  470</span>&#160;    states.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>();</div><div class="line"><a name="l00471"></a><span class="lineno">  471</span>&#160;    states.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(newState);</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;</div><div class="line"><a name="l00474"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#ab3b930b4f87114577c94742d78e5d8d1">  474</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingStateMachine)</div><div class="line"><a name="l00475"></a><span class="lineno">  475</span>&#160;{</div><div class="line"><a name="l00476"></a><span class="lineno">  476</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingState1(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l00477"></a><span class="lineno">  477</span>&#160;    profilingState1.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l00478"></a><span class="lineno">  478</span>&#160;    BOOST_CHECK(profilingState1.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l00479"></a><span class="lineno">  479</span>&#160;</div><div class="line"><a name="l00480"></a><span class="lineno">  480</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingState2(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l00481"></a><span class="lineno">  481</span>&#160;    profilingState2.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l00482"></a><span class="lineno">  482</span>&#160;    BOOST_CHECK(profilingState2.GetCurrentState() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l00483"></a><span class="lineno">  483</span>&#160;</div><div class="line"><a name="l00484"></a><span class="lineno">  484</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingState3(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l00485"></a><span class="lineno">  485</span>&#160;    profilingState3.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l00486"></a><span class="lineno">  486</span>&#160;    BOOST_CHECK(profilingState3.GetCurrentState() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l00487"></a><span class="lineno">  487</span>&#160;</div><div class="line"><a name="l00488"></a><span class="lineno">  488</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingState4(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l00489"></a><span class="lineno">  489</span>&#160;    profilingState4.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l00490"></a><span class="lineno">  490</span>&#160;    BOOST_CHECK(profilingState4.GetCurrentState() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l00491"></a><span class="lineno">  491</span>&#160;</div><div class="line"><a name="l00492"></a><span class="lineno">  492</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingState5(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l00493"></a><span class="lineno">  493</span>&#160;    profilingState5.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l00494"></a><span class="lineno">  494</span>&#160;    BOOST_CHECK(profilingState5.GetCurrentState() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l00495"></a><span class="lineno">  495</span>&#160;</div><div class="line"><a name="l00496"></a><span class="lineno">  496</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingState6(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l00497"></a><span class="lineno">  497</span>&#160;    profilingState6.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l00498"></a><span class="lineno">  498</span>&#160;    BOOST_CHECK(profilingState6.GetCurrentState() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l00499"></a><span class="lineno">  499</span>&#160;</div><div class="line"><a name="l00500"></a><span class="lineno">  500</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingState7(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l00501"></a><span class="lineno">  501</span>&#160;    profilingState7.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l00502"></a><span class="lineno">  502</span>&#160;    BOOST_CHECK(profilingState7.GetCurrentState() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l00503"></a><span class="lineno">  503</span>&#160;</div><div class="line"><a name="l00504"></a><span class="lineno">  504</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingState8(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l00505"></a><span class="lineno">  505</span>&#160;    profilingState8.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l00506"></a><span class="lineno">  506</span>&#160;    BOOST_CHECK(profilingState8.GetCurrentState() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</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;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingState9(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l00509"></a><span class="lineno">  509</span>&#160;    BOOST_CHECK_THROW(profilingState9.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>), <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>);</div><div class="line"><a name="l00510"></a><span class="lineno">  510</span>&#160;</div><div class="line"><a name="l00511"></a><span class="lineno">  511</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingState10(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l00512"></a><span class="lineno">  512</span>&#160;    BOOST_CHECK_THROW(profilingState10.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>), <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>);</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;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingState11(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l00515"></a><span class="lineno">  515</span>&#160;    BOOST_CHECK_THROW(profilingState11.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>), <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>);</div><div class="line"><a name="l00516"></a><span class="lineno">  516</span>&#160;</div><div class="line"><a name="l00517"></a><span class="lineno">  517</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingState12(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l00518"></a><span class="lineno">  518</span>&#160;    BOOST_CHECK_THROW(profilingState12.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>), <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>);</div><div class="line"><a name="l00519"></a><span class="lineno">  519</span>&#160;</div><div class="line"><a name="l00520"></a><span class="lineno">  520</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingState13(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l00521"></a><span class="lineno">  521</span>&#160;    BOOST_CHECK_THROW(profilingState13.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>), <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>);</div><div class="line"><a name="l00522"></a><span class="lineno">  522</span>&#160;</div><div class="line"><a name="l00523"></a><span class="lineno">  523</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingState14(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l00524"></a><span class="lineno">  524</span>&#160;    profilingState14.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l00525"></a><span class="lineno">  525</span>&#160;    BOOST_CHECK(profilingState14.GetCurrentState() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l00526"></a><span class="lineno">  526</span>&#160;</div><div class="line"><a name="l00527"></a><span class="lineno">  527</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingState15(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l00528"></a><span class="lineno">  528</span>&#160;    BOOST_CHECK_THROW(profilingState15.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>), <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>);</div><div class="line"><a name="l00529"></a><span class="lineno">  529</span>&#160;</div><div class="line"><a name="l00530"></a><span class="lineno">  530</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingState16(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">armnn::profiling::ProfilingState::Active</a>);</div><div class="line"><a name="l00531"></a><span class="lineno">  531</span>&#160;    BOOST_CHECK_THROW(profilingState16.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>), <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>);</div><div class="line"><a name="l00532"></a><span class="lineno">  532</span>&#160;</div><div class="line"><a name="l00533"></a><span class="lineno">  533</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingState17(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l00534"></a><span class="lineno">  534</span>&#160;</div><div class="line"><a name="l00535"></a><span class="lineno">  535</span>&#160;    std::thread thread1(<a class="code" href="_profiling_tests_8cpp.xhtml#ab4d41bacbbe4c3524a95c6d67f6037f3">ProfilingCurrentStateThreadImpl</a>, std::ref(profilingState17));</div><div class="line"><a name="l00536"></a><span class="lineno">  536</span>&#160;    std::thread thread2(<a class="code" href="_profiling_tests_8cpp.xhtml#ab4d41bacbbe4c3524a95c6d67f6037f3">ProfilingCurrentStateThreadImpl</a>, std::ref(profilingState17));</div><div class="line"><a name="l00537"></a><span class="lineno">  537</span>&#160;    std::thread thread3(<a class="code" href="_profiling_tests_8cpp.xhtml#ab4d41bacbbe4c3524a95c6d67f6037f3">ProfilingCurrentStateThreadImpl</a>, std::ref(profilingState17));</div><div class="line"><a name="l00538"></a><span class="lineno">  538</span>&#160;    std::thread thread4(<a class="code" href="_profiling_tests_8cpp.xhtml#ab4d41bacbbe4c3524a95c6d67f6037f3">ProfilingCurrentStateThreadImpl</a>, std::ref(profilingState17));</div><div class="line"><a name="l00539"></a><span class="lineno">  539</span>&#160;    std::thread thread5(<a class="code" href="_profiling_tests_8cpp.xhtml#ab4d41bacbbe4c3524a95c6d67f6037f3">ProfilingCurrentStateThreadImpl</a>, std::ref(profilingState17));</div><div class="line"><a name="l00540"></a><span class="lineno">  540</span>&#160;</div><div class="line"><a name="l00541"></a><span class="lineno">  541</span>&#160;    thread1.join();</div><div class="line"><a name="l00542"></a><span class="lineno">  542</span>&#160;    thread2.join();</div><div class="line"><a name="l00543"></a><span class="lineno">  543</span>&#160;    thread3.join();</div><div class="line"><a name="l00544"></a><span class="lineno">  544</span>&#160;    thread4.join();</div><div class="line"><a name="l00545"></a><span class="lineno">  545</span>&#160;    thread5.join();</div><div class="line"><a name="l00546"></a><span class="lineno">  546</span>&#160;</div><div class="line"><a name="l00547"></a><span class="lineno">  547</span>&#160;    BOOST_TEST((profilingState17.GetCurrentState() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>));</div><div class="line"><a name="l00548"></a><span class="lineno">  548</span>&#160;}</div><div class="line"><a name="l00549"></a><span class="lineno">  549</span>&#160;</div><div class="line"><a name="l00550"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#ab7f1426bff6283557173d80c0d193b8b">  550</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_profiling_tests_8cpp.xhtml#ab7f1426bff6283557173d80c0d193b8b">CaptureDataWriteThreadImpl</a>(<a class="code" href="classarmnn_1_1profiling_1_1_holder.xhtml">Holder</a>&amp; holder, uint32_t capturePeriod, <span class="keyword">const</span> std::vector&lt;uint16_t&gt;&amp; counterIds)</div><div class="line"><a name="l00551"></a><span class="lineno">  551</span>&#160;{</div><div class="line"><a name="l00552"></a><span class="lineno">  552</span>&#160;    holder.<a class="code" href="classarmnn_1_1profiling_1_1_holder.xhtml#ae904af7c6336ceeeb95ab8435047c7cb">SetCaptureData</a>(capturePeriod, counterIds, {});</div><div class="line"><a name="l00553"></a><span class="lineno">  553</span>&#160;}</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"><a class="line" href="_profiling_tests_8cpp.xhtml#ad95829dbe631cef66652fb42784d9d23">  555</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_profiling_tests_8cpp.xhtml#ad95829dbe631cef66652fb42784d9d23">CaptureDataReadThreadImpl</a>(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_holder.xhtml">Holder</a>&amp; holder, <a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml">CaptureData</a>&amp; captureData)</div><div class="line"><a name="l00556"></a><span class="lineno">  556</span>&#160;{</div><div class="line"><a name="l00557"></a><span class="lineno">  557</span>&#160;    captureData = holder.<a class="code" href="classarmnn_1_1profiling_1_1_holder.xhtml#a95c8634416821480a8140c87054718f6">GetCaptureData</a>();</div><div class="line"><a name="l00558"></a><span class="lineno">  558</span>&#160;}</div><div class="line"><a name="l00559"></a><span class="lineno">  559</span>&#160;</div><div class="line"><a name="l00560"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a8f2d0090f2770d880f539327231275b3">  560</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckCaptureDataHolder)</div><div class="line"><a name="l00561"></a><span class="lineno">  561</span>&#160;{</div><div class="line"><a name="l00562"></a><span class="lineno">  562</span>&#160;    std::map&lt;uint32_t, std::vector&lt;uint16_t&gt;&gt; periodIdMap;</div><div class="line"><a name="l00563"></a><span class="lineno">  563</span>&#160;    std::vector&lt;uint16_t&gt; counterIds;</div><div class="line"><a name="l00564"></a><span class="lineno">  564</span>&#160;    uint32_t numThreads = 10;</div><div class="line"><a name="l00565"></a><span class="lineno">  565</span>&#160;    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; numThreads; ++i)</div><div class="line"><a name="l00566"></a><span class="lineno">  566</span>&#160;    {</div><div class="line"><a name="l00567"></a><span class="lineno">  567</span>&#160;        counterIds.emplace_back(i);</div><div class="line"><a name="l00568"></a><span class="lineno">  568</span>&#160;        periodIdMap.insert(std::make_pair(i, counterIds));</div><div class="line"><a name="l00569"></a><span class="lineno">  569</span>&#160;    }</div><div class="line"><a name="l00570"></a><span class="lineno">  570</span>&#160;</div><div class="line"><a name="l00571"></a><span class="lineno">  571</span>&#160;    <span class="comment">// Verify the read and write threads set the holder correctly</span></div><div class="line"><a name="l00572"></a><span class="lineno">  572</span>&#160;    <span class="comment">// and retrieve the expected values</span></div><div class="line"><a name="l00573"></a><span class="lineno">  573</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_holder.xhtml">Holder</a> holder;</div><div class="line"><a name="l00574"></a><span class="lineno">  574</span>&#160;    BOOST_CHECK((holder.<a class="code" href="classarmnn_1_1profiling_1_1_holder.xhtml#a95c8634416821480a8140c87054718f6">GetCaptureData</a>()).GetCapturePeriod() == 0);</div><div class="line"><a name="l00575"></a><span class="lineno">  575</span>&#160;    BOOST_CHECK(((holder.<a class="code" href="classarmnn_1_1profiling_1_1_holder.xhtml#a95c8634416821480a8140c87054718f6">GetCaptureData</a>()).GetCounterIds()).empty());</div><div class="line"><a name="l00576"></a><span class="lineno">  576</span>&#160;</div><div class="line"><a name="l00577"></a><span class="lineno">  577</span>&#160;    <span class="comment">// Check Holder functions</span></div><div class="line"><a name="l00578"></a><span class="lineno">  578</span>&#160;    std::thread thread1(<a class="code" href="_profiling_tests_8cpp.xhtml#ab7f1426bff6283557173d80c0d193b8b">CaptureDataWriteThreadImpl</a>, std::ref(holder), 2, std::ref(periodIdMap[2]));</div><div class="line"><a name="l00579"></a><span class="lineno">  579</span>&#160;    thread1.join();</div><div class="line"><a name="l00580"></a><span class="lineno">  580</span>&#160;    BOOST_CHECK((holder.<a class="code" href="classarmnn_1_1profiling_1_1_holder.xhtml#a95c8634416821480a8140c87054718f6">GetCaptureData</a>()).GetCapturePeriod() == 2);</div><div class="line"><a name="l00581"></a><span class="lineno">  581</span>&#160;    BOOST_CHECK((holder.<a class="code" href="classarmnn_1_1profiling_1_1_holder.xhtml#a95c8634416821480a8140c87054718f6">GetCaptureData</a>()).GetCounterIds() == periodIdMap[2]);</div><div class="line"><a name="l00582"></a><span class="lineno">  582</span>&#160;    <span class="comment">// NOTE: now that we have some initial values in the holder we don&#39;t have to worry</span></div><div class="line"><a name="l00583"></a><span class="lineno">  583</span>&#160;    <span class="comment">//       in the multi-threaded section below about a read thread accessing the holder</span></div><div class="line"><a name="l00584"></a><span class="lineno">  584</span>&#160;    <span class="comment">//       before any write thread has gotten to it so we read period = 0, counterIds empty</span></div><div class="line"><a name="l00585"></a><span class="lineno">  585</span>&#160;    <span class="comment">//       instead of period = 0, counterIds = {0} as will the case when write thread 0</span></div><div class="line"><a name="l00586"></a><span class="lineno">  586</span>&#160;    <span class="comment">//       has executed.</span></div><div class="line"><a name="l00587"></a><span class="lineno">  587</span>&#160;</div><div class="line"><a name="l00588"></a><span class="lineno">  588</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml">CaptureData</a> captureData;</div><div class="line"><a name="l00589"></a><span class="lineno">  589</span>&#160;    std::thread thread2(<a class="code" href="_profiling_tests_8cpp.xhtml#ad95829dbe631cef66652fb42784d9d23">CaptureDataReadThreadImpl</a>, std::ref(holder), std::ref(captureData));</div><div class="line"><a name="l00590"></a><span class="lineno">  590</span>&#160;    thread2.join();</div><div class="line"><a name="l00591"></a><span class="lineno">  591</span>&#160;    BOOST_CHECK(captureData.GetCapturePeriod() == 2);</div><div class="line"><a name="l00592"></a><span class="lineno">  592</span>&#160;    BOOST_CHECK(captureData.GetCounterIds() == periodIdMap[2]);</div><div class="line"><a name="l00593"></a><span class="lineno">  593</span>&#160;</div><div class="line"><a name="l00594"></a><span class="lineno">  594</span>&#160;    std::map&lt;uint32_t, CaptureData&gt; captureDataIdMap;</div><div class="line"><a name="l00595"></a><span class="lineno">  595</span>&#160;    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; numThreads; ++i)</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;        <a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml">CaptureData</a> perThreadCaptureData;</div><div class="line"><a name="l00598"></a><span class="lineno">  598</span>&#160;        captureDataIdMap.insert(std::make_pair(i, perThreadCaptureData));</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;    std::vector&lt;std::thread&gt; threadsVect;</div><div class="line"><a name="l00602"></a><span class="lineno">  602</span>&#160;    std::vector&lt;std::thread&gt; readThreadsVect;</div><div class="line"><a name="l00603"></a><span class="lineno">  603</span>&#160;    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; numThreads; ++i)</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;        threadsVect.emplace_back(</div><div class="line"><a name="l00606"></a><span class="lineno">  606</span>&#160;            std::thread(<a class="code" href="_profiling_tests_8cpp.xhtml#ab7f1426bff6283557173d80c0d193b8b">CaptureDataWriteThreadImpl</a>, std::ref(holder), i, std::ref(periodIdMap[i])));</div><div class="line"><a name="l00607"></a><span class="lineno">  607</span>&#160;</div><div class="line"><a name="l00608"></a><span class="lineno">  608</span>&#160;        <span class="comment">// Verify that the CaptureData goes into the thread in a virgin state</span></div><div class="line"><a name="l00609"></a><span class="lineno">  609</span>&#160;        BOOST_CHECK(captureDataIdMap.at(i).GetCapturePeriod() == 0);</div><div class="line"><a name="l00610"></a><span class="lineno">  610</span>&#160;        BOOST_CHECK(captureDataIdMap.at(i).GetCounterIds().empty());</div><div class="line"><a name="l00611"></a><span class="lineno">  611</span>&#160;        readThreadsVect.emplace_back(</div><div class="line"><a name="l00612"></a><span class="lineno">  612</span>&#160;            std::thread(<a class="code" href="_profiling_tests_8cpp.xhtml#ad95829dbe631cef66652fb42784d9d23">CaptureDataReadThreadImpl</a>, std::ref(holder), std::ref(captureDataIdMap.at(i))));</div><div class="line"><a name="l00613"></a><span class="lineno">  613</span>&#160;    }</div><div class="line"><a name="l00614"></a><span class="lineno">  614</span>&#160;</div><div class="line"><a name="l00615"></a><span class="lineno">  615</span>&#160;    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; numThreads; ++i)</div><div class="line"><a name="l00616"></a><span class="lineno">  616</span>&#160;    {</div><div class="line"><a name="l00617"></a><span class="lineno">  617</span>&#160;        threadsVect[i].join();</div><div class="line"><a name="l00618"></a><span class="lineno">  618</span>&#160;        readThreadsVect[i].join();</div><div class="line"><a name="l00619"></a><span class="lineno">  619</span>&#160;    }</div><div class="line"><a name="l00620"></a><span class="lineno">  620</span>&#160;</div><div class="line"><a name="l00621"></a><span class="lineno">  621</span>&#160;    <span class="comment">// Look at the CaptureData that each read thread has filled</span></div><div class="line"><a name="l00622"></a><span class="lineno">  622</span>&#160;    <span class="comment">// the capture period it read should match the counter ids entry</span></div><div class="line"><a name="l00623"></a><span class="lineno">  623</span>&#160;    <span class="keywordflow">for</span> (uint32_t i = 0; i &lt; numThreads; ++i)</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;        <a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml">CaptureData</a> perThreadCaptureData = captureDataIdMap.at(i);</div><div class="line"><a name="l00626"></a><span class="lineno">  626</span>&#160;        BOOST_CHECK(perThreadCaptureData.<a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml#a47fc9ce6c654658dfeb9f8ed2071885e">GetCounterIds</a>() == periodIdMap.at(perThreadCaptureData.<a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml#a8386da56facf23364a6005a4769bf962">GetCapturePeriod</a>()));</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;}</div><div class="line"><a name="l00629"></a><span class="lineno">  629</span>&#160;</div><div class="line"><a name="l00630"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#aace9ebcf963bc1c86bd9ca8148a60649">  630</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CaptureDataMethods)</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;    <span class="comment">// Check CaptureData setter and getter functions</span></div><div class="line"><a name="l00633"></a><span class="lineno">  633</span>&#160;    std::vector&lt;uint16_t&gt; counterIds = { 42, 29, 13 };</div><div class="line"><a name="l00634"></a><span class="lineno">  634</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml">CaptureData</a> captureData;</div><div class="line"><a name="l00635"></a><span class="lineno">  635</span>&#160;    BOOST_CHECK(captureData.<a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml#a8386da56facf23364a6005a4769bf962">GetCapturePeriod</a>() == 0);</div><div class="line"><a name="l00636"></a><span class="lineno">  636</span>&#160;    BOOST_CHECK((captureData.<a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml#a47fc9ce6c654658dfeb9f8ed2071885e">GetCounterIds</a>()).empty());</div><div class="line"><a name="l00637"></a><span class="lineno">  637</span>&#160;    captureData.<a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml#afe10396cc1bc0b90637e6070351661e9">SetCapturePeriod</a>(150);</div><div class="line"><a name="l00638"></a><span class="lineno">  638</span>&#160;    captureData.<a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml#af3d98d2ad9e92c4aa5fe7ef4732ac143">SetCounterIds</a>(counterIds);</div><div class="line"><a name="l00639"></a><span class="lineno">  639</span>&#160;    BOOST_CHECK(captureData.<a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml#a8386da56facf23364a6005a4769bf962">GetCapturePeriod</a>() == 150);</div><div class="line"><a name="l00640"></a><span class="lineno">  640</span>&#160;    BOOST_CHECK(captureData.<a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml#a47fc9ce6c654658dfeb9f8ed2071885e">GetCounterIds</a>() == counterIds);</div><div class="line"><a name="l00641"></a><span class="lineno">  641</span>&#160;</div><div class="line"><a name="l00642"></a><span class="lineno">  642</span>&#160;    <span class="comment">// Check assignment operator</span></div><div class="line"><a name="l00643"></a><span class="lineno">  643</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml">CaptureData</a> secondCaptureData;</div><div class="line"><a name="l00644"></a><span class="lineno">  644</span>&#160;</div><div class="line"><a name="l00645"></a><span class="lineno">  645</span>&#160;    secondCaptureData = captureData;</div><div class="line"><a name="l00646"></a><span class="lineno">  646</span>&#160;    BOOST_CHECK(secondCaptureData.GetCapturePeriod() == 150);</div><div class="line"><a name="l00647"></a><span class="lineno">  647</span>&#160;    BOOST_CHECK(secondCaptureData.GetCounterIds() == counterIds);</div><div class="line"><a name="l00648"></a><span class="lineno">  648</span>&#160;</div><div class="line"><a name="l00649"></a><span class="lineno">  649</span>&#160;    <span class="comment">// Check copy constructor</span></div><div class="line"><a name="l00650"></a><span class="lineno">  650</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml">CaptureData</a> copyConstructedCaptureData(captureData);</div><div class="line"><a name="l00651"></a><span class="lineno">  651</span>&#160;</div><div class="line"><a name="l00652"></a><span class="lineno">  652</span>&#160;    BOOST_CHECK(copyConstructedCaptureData.GetCapturePeriod() == 150);</div><div class="line"><a name="l00653"></a><span class="lineno">  653</span>&#160;    BOOST_CHECK(copyConstructedCaptureData.GetCounterIds() == counterIds);</div><div class="line"><a name="l00654"></a><span class="lineno">  654</span>&#160;}</div><div class="line"><a name="l00655"></a><span class="lineno">  655</span>&#160;</div><div class="line"><a name="l00656"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#ac08498cfb5986f8bbb26cb39bfb5d8db">  656</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingServiceDisabled)</div><div class="line"><a name="l00657"></a><span class="lineno">  657</span>&#160;{</div><div class="line"><a name="l00658"></a><span class="lineno">  658</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l00659"></a><span class="lineno">  659</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l00660"></a><span class="lineno">  660</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l00661"></a><span class="lineno">  661</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l00662"></a><span class="lineno">  662</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();</div><div class="line"><a name="l00663"></a><span class="lineno">  663</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l00664"></a><span class="lineno">  664</span>&#160;}</div><div class="line"><a name="l00665"></a><span class="lineno">  665</span>&#160;</div><div class="line"><a name="l00666"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a16da597789ec1e2dd708f41857e583cd">  666</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingServiceCounterDirectory)</div><div class="line"><a name="l00667"></a><span class="lineno">  667</span>&#160;{</div><div class="line"><a name="l00668"></a><span class="lineno">  668</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l00669"></a><span class="lineno">  669</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l00670"></a><span class="lineno">  670</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l00671"></a><span class="lineno">  671</span>&#160;</div><div class="line"><a name="l00672"></a><span class="lineno">  672</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml">ICounterDirectory</a>&amp; counterDirectory0 = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#adfaa32654e05eab63b2adc34b2138475">GetCounterDirectory</a>();</div><div class="line"><a name="l00673"></a><span class="lineno">  673</span>&#160;    BOOST_CHECK(counterDirectory0.<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#acab78d0987a9cca5a9cac957be610a7d">GetCounterCount</a>() == 0);</div><div class="line"><a name="l00674"></a><span class="lineno">  674</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();</div><div class="line"><a name="l00675"></a><span class="lineno">  675</span>&#160;    BOOST_CHECK(counterDirectory0.<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#acab78d0987a9cca5a9cac957be610a7d">GetCounterCount</a>() == 0);</div><div class="line"><a name="l00676"></a><span class="lineno">  676</span>&#160;</div><div class="line"><a name="l00677"></a><span class="lineno">  677</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l00678"></a><span class="lineno">  678</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options);</div><div class="line"><a name="l00679"></a><span class="lineno">  679</span>&#160;</div><div class="line"><a name="l00680"></a><span class="lineno">  680</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml">ICounterDirectory</a>&amp; counterDirectory1 = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#adfaa32654e05eab63b2adc34b2138475">GetCounterDirectory</a>();</div><div class="line"><a name="l00681"></a><span class="lineno">  681</span>&#160;    BOOST_CHECK(counterDirectory1.<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#acab78d0987a9cca5a9cac957be610a7d">GetCounterCount</a>() == 0);</div><div class="line"><a name="l00682"></a><span class="lineno">  682</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();</div><div class="line"><a name="l00683"></a><span class="lineno">  683</span>&#160;    BOOST_CHECK(counterDirectory1.<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#acab78d0987a9cca5a9cac957be610a7d">GetCounterCount</a>() != 0);</div><div class="line"><a name="l00684"></a><span class="lineno">  684</span>&#160;    <span class="comment">// Reset the profiling service to stop any running thread</span></div><div class="line"><a name="l00685"></a><span class="lineno">  685</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00686"></a><span class="lineno">  686</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</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;</div><div class="line"><a name="l00689"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a7cb5bd6f60aeea79ab41efe96376ce6f">  689</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingServiceCounterValues)</div><div class="line"><a name="l00690"></a><span class="lineno">  690</span>&#160;{</div><div class="line"><a name="l00691"></a><span class="lineno">  691</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l00692"></a><span class="lineno">  692</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>          = <span class="keyword">true</span>;</div><div class="line"><a name="l00693"></a><span class="lineno">  693</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l00694"></a><span class="lineno">  694</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l00695"></a><span class="lineno">  695</span>&#160;</div><div class="line"><a name="l00696"></a><span class="lineno">  696</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();</div><div class="line"><a name="l00697"></a><span class="lineno">  697</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml">ICounterDirectory</a>&amp; counterDirectory = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#adfaa32654e05eab63b2adc34b2138475">GetCounterDirectory</a>();</div><div class="line"><a name="l00698"></a><span class="lineno">  698</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn_1_1profiling.xhtml#aeeb6904ffbae435c8d0a7138427688f4">Counters</a>&amp; counters                  = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#ad9fa9b8364fcaa2c940ef8e78eff8df2">GetCounters</a>();</div><div class="line"><a name="l00699"></a><span class="lineno">  699</span>&#160;    BOOST_CHECK(!counters.empty());</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;    std::vector&lt;std::thread&gt; writers;</div><div class="line"><a name="l00702"></a><span class="lineno">  702</span>&#160;</div><div class="line"><a name="l00703"></a><span class="lineno">  703</span>&#160;    BOOST_CHECK(!counters.empty());</div><div class="line"><a name="l00704"></a><span class="lineno">  704</span>&#160;</div><div class="line"><a name="l00705"></a><span class="lineno">  705</span>&#160;    <span class="comment">// Test GetAbsoluteCounterValue</span></div><div class="line"><a name="l00706"></a><span class="lineno">  706</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 4; ++i)</div><div class="line"><a name="l00707"></a><span class="lineno">  707</span>&#160;    {</div><div class="line"><a name="l00708"></a><span class="lineno">  708</span>&#160;        <span class="comment">// Increment and decrement the INFERENCES_RUN counter 250 times</span></div><div class="line"><a name="l00709"></a><span class="lineno">  709</span>&#160;        writers.push_back(std::thread([&amp;profilingService]()</div><div class="line"><a name="l00710"></a><span class="lineno">  710</span>&#160;                                      {</div><div class="line"><a name="l00711"></a><span class="lineno">  711</span>&#160;                                          <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 250; ++i)</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;                                              profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a6c2d955d387944f5b7ad37ebb435a37f">IncrementCounterValue</a>(INFERENCES_RUN);</div><div class="line"><a name="l00714"></a><span class="lineno">  714</span>&#160;                                          }</div><div class="line"><a name="l00715"></a><span class="lineno">  715</span>&#160;                                      }));</div><div class="line"><a name="l00716"></a><span class="lineno">  716</span>&#160;        <span class="comment">// Add 10 to the INFERENCES_RUN counter 200 times</span></div><div class="line"><a name="l00717"></a><span class="lineno">  717</span>&#160;        writers.push_back(std::thread([&amp;profilingService]()</div><div class="line"><a name="l00718"></a><span class="lineno">  718</span>&#160;                                      {</div><div class="line"><a name="l00719"></a><span class="lineno">  719</span>&#160;                                          <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 200; ++i)</div><div class="line"><a name="l00720"></a><span class="lineno">  720</span>&#160;                                          {</div><div class="line"><a name="l00721"></a><span class="lineno">  721</span>&#160;                                              profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a2d1ab72611dfc67cf1b491849ea386a4">AddCounterValue</a>(INFERENCES_RUN, 10);</div><div class="line"><a name="l00722"></a><span class="lineno">  722</span>&#160;                                          }</div><div class="line"><a name="l00723"></a><span class="lineno">  723</span>&#160;                                      }));</div><div class="line"><a name="l00724"></a><span class="lineno">  724</span>&#160;        <span class="comment">// Subtract 5 from the INFERENCES_RUN counter 200 times</span></div><div class="line"><a name="l00725"></a><span class="lineno">  725</span>&#160;        writers.push_back(std::thread([&amp;profilingService]()</div><div class="line"><a name="l00726"></a><span class="lineno">  726</span>&#160;                                      {</div><div class="line"><a name="l00727"></a><span class="lineno">  727</span>&#160;                                          <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 200; ++i)</div><div class="line"><a name="l00728"></a><span class="lineno">  728</span>&#160;                                          {</div><div class="line"><a name="l00729"></a><span class="lineno">  729</span>&#160;                                              profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a2e08a9bc2818fb46503c1720562de8d7">SubtractCounterValue</a>(INFERENCES_RUN, 5);</div><div class="line"><a name="l00730"></a><span class="lineno">  730</span>&#160;                                          }</div><div class="line"><a name="l00731"></a><span class="lineno">  731</span>&#160;                                      }));</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;</div><div class="line"><a name="l00734"></a><span class="lineno">  734</span>&#160;    std::for_each(writers.begin(), writers.end(), mem_fn(&amp;std::thread::join));</div><div class="line"><a name="l00735"></a><span class="lineno">  735</span>&#160;</div><div class="line"><a name="l00736"></a><span class="lineno">  736</span>&#160;    uint32_t absoluteCounterValue = 0;</div><div class="line"><a name="l00737"></a><span class="lineno">  737</span>&#160;</div><div class="line"><a name="l00738"></a><span class="lineno">  738</span>&#160;    BOOST_CHECK_NO_THROW(absoluteCounterValue = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a5a8454419fcb43e456ad6ad1b2143402">GetAbsoluteCounterValue</a>(INFERENCES_RUN));</div><div class="line"><a name="l00739"></a><span class="lineno">  739</span>&#160;    BOOST_CHECK(absoluteCounterValue = 5000);</div><div class="line"><a name="l00740"></a><span class="lineno">  740</span>&#160;</div><div class="line"><a name="l00741"></a><span class="lineno">  741</span>&#160;    <span class="comment">// Test SetCounterValue</span></div><div class="line"><a name="l00742"></a><span class="lineno">  742</span>&#160;    BOOST_CHECK_NO_THROW(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a5468b88e2e2e65892f9589d00ed06775">SetCounterValue</a>(INFERENCES_RUN, 0));</div><div class="line"><a name="l00743"></a><span class="lineno">  743</span>&#160;    BOOST_CHECK_NO_THROW(absoluteCounterValue = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a5a8454419fcb43e456ad6ad1b2143402">GetAbsoluteCounterValue</a>(INFERENCES_RUN));</div><div class="line"><a name="l00744"></a><span class="lineno">  744</span>&#160;    BOOST_CHECK(absoluteCounterValue == 0);</div><div class="line"><a name="l00745"></a><span class="lineno">  745</span>&#160;</div><div class="line"><a name="l00746"></a><span class="lineno">  746</span>&#160;    <span class="comment">// Test GetDeltaCounterValue</span></div><div class="line"><a name="l00747"></a><span class="lineno">  747</span>&#160;    writers.clear();</div><div class="line"><a name="l00748"></a><span class="lineno">  748</span>&#160;    uint32_t deltaCounterValue = 0;</div><div class="line"><a name="l00749"></a><span class="lineno">  749</span>&#160;    <span class="comment">//Start a reading thread to randomly read the INFERENCES_RUN counter value</span></div><div class="line"><a name="l00750"></a><span class="lineno">  750</span>&#160;    std::thread reader([&amp;profilingService](uint32_t&amp; deltaCounterValue)</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="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 300; ++i)</div><div class="line"><a name="l00753"></a><span class="lineno">  753</span>&#160;                           {</div><div class="line"><a name="l00754"></a><span class="lineno">  754</span>&#160;                               deltaCounterValue += profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a8f9bcec7e9c0fb2fe463c120a0fb43fe">GetDeltaCounterValue</a>(INFERENCES_RUN);</div><div class="line"><a name="l00755"></a><span class="lineno">  755</span>&#160;                           }</div><div class="line"><a name="l00756"></a><span class="lineno">  756</span>&#160;                       }, std::ref(deltaCounterValue));</div><div class="line"><a name="l00757"></a><span class="lineno">  757</span>&#160;</div><div class="line"><a name="l00758"></a><span class="lineno">  758</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 4; ++i)</div><div class="line"><a name="l00759"></a><span class="lineno">  759</span>&#160;    {</div><div class="line"><a name="l00760"></a><span class="lineno">  760</span>&#160;        <span class="comment">// Increment and decrement the INFERENCES_RUN counter 250 times</span></div><div class="line"><a name="l00761"></a><span class="lineno">  761</span>&#160;        writers.push_back(std::thread([&amp;profilingService]()</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;                                          <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 250; ++i)</div><div class="line"><a name="l00764"></a><span class="lineno">  764</span>&#160;                                          {</div><div class="line"><a name="l00765"></a><span class="lineno">  765</span>&#160;                                              profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a6c2d955d387944f5b7ad37ebb435a37f">IncrementCounterValue</a>(INFERENCES_RUN);</div><div class="line"><a name="l00766"></a><span class="lineno">  766</span>&#160;                                          }</div><div class="line"><a name="l00767"></a><span class="lineno">  767</span>&#160;                                      }));</div><div class="line"><a name="l00768"></a><span class="lineno">  768</span>&#160;        <span class="comment">// Add 10 to the INFERENCES_RUN counter 200 times</span></div><div class="line"><a name="l00769"></a><span class="lineno">  769</span>&#160;        writers.push_back(std::thread([&amp;profilingService]()</div><div class="line"><a name="l00770"></a><span class="lineno">  770</span>&#160;                                      {</div><div class="line"><a name="l00771"></a><span class="lineno">  771</span>&#160;                                          <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 200; ++i)</div><div class="line"><a name="l00772"></a><span class="lineno">  772</span>&#160;                                          {</div><div class="line"><a name="l00773"></a><span class="lineno">  773</span>&#160;                                              profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a2d1ab72611dfc67cf1b491849ea386a4">AddCounterValue</a>(INFERENCES_RUN, 10);</div><div class="line"><a name="l00774"></a><span class="lineno">  774</span>&#160;                                          }</div><div class="line"><a name="l00775"></a><span class="lineno">  775</span>&#160;                                      }));</div><div class="line"><a name="l00776"></a><span class="lineno">  776</span>&#160;        <span class="comment">// Subtract 5 from the INFERENCES_RUN counter 200 times</span></div><div class="line"><a name="l00777"></a><span class="lineno">  777</span>&#160;        writers.push_back(std::thread([&amp;profilingService]()</div><div class="line"><a name="l00778"></a><span class="lineno">  778</span>&#160;                                      {</div><div class="line"><a name="l00779"></a><span class="lineno">  779</span>&#160;                                          <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 200; ++i)</div><div class="line"><a name="l00780"></a><span class="lineno">  780</span>&#160;                                          {</div><div class="line"><a name="l00781"></a><span class="lineno">  781</span>&#160;                                              profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a2e08a9bc2818fb46503c1720562de8d7">SubtractCounterValue</a>(INFERENCES_RUN, 5);</div><div class="line"><a name="l00782"></a><span class="lineno">  782</span>&#160;                                          }</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;    }</div><div class="line"><a name="l00785"></a><span class="lineno">  785</span>&#160;</div><div class="line"><a name="l00786"></a><span class="lineno">  786</span>&#160;    std::for_each(writers.begin(), writers.end(), mem_fn(&amp;std::thread::join));</div><div class="line"><a name="l00787"></a><span class="lineno">  787</span>&#160;    reader.join();</div><div class="line"><a name="l00788"></a><span class="lineno">  788</span>&#160;</div><div class="line"><a name="l00789"></a><span class="lineno">  789</span>&#160;    <span class="comment">// Do one last read in case the reader stopped early</span></div><div class="line"><a name="l00790"></a><span class="lineno">  790</span>&#160;    deltaCounterValue += profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a8f9bcec7e9c0fb2fe463c120a0fb43fe">GetDeltaCounterValue</a>(INFERENCES_RUN);</div><div class="line"><a name="l00791"></a><span class="lineno">  791</span>&#160;    BOOST_CHECK(deltaCounterValue == 5000);</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">// Reset the profiling service to stop any running thread</span></div><div class="line"><a name="l00794"></a><span class="lineno">  794</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l00795"></a><span class="lineno">  795</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l00796"></a><span class="lineno">  796</span>&#160;}</div><div class="line"><a name="l00797"></a><span class="lineno">  797</span>&#160;</div><div class="line"><a name="l00798"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#af2d0fd8e4ed0c07f211d047c7fe460f0">  798</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingObjectUids)</div><div class="line"><a name="l00799"></a><span class="lineno">  799</span>&#160;{</div><div class="line"><a name="l00800"></a><span class="lineno">  800</span>&#160;    uint16_t uid = 0;</div><div class="line"><a name="l00801"></a><span class="lineno">  801</span>&#160;    BOOST_CHECK_NO_THROW(uid = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a982b094fe2faa67a3560cdaf3901d0f8">GetNextUid</a>());</div><div class="line"><a name="l00802"></a><span class="lineno">  802</span>&#160;    BOOST_CHECK(uid &gt;= 1);</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;    uint16_t nextUid = 0;</div><div class="line"><a name="l00805"></a><span class="lineno">  805</span>&#160;    BOOST_CHECK_NO_THROW(nextUid = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a982b094fe2faa67a3560cdaf3901d0f8">GetNextUid</a>());</div><div class="line"><a name="l00806"></a><span class="lineno">  806</span>&#160;    BOOST_CHECK(nextUid &gt; uid);</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;    std::vector&lt;uint16_t&gt; counterUids;</div><div class="line"><a name="l00809"></a><span class="lineno">  809</span>&#160;    BOOST_CHECK_NO_THROW(counterUids = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a6605c82bc625fbd40f24d35edee15fe3">GetNextCounterUids</a>(uid,0));</div><div class="line"><a name="l00810"></a><span class="lineno">  810</span>&#160;    BOOST_CHECK(counterUids.size() == 1);</div><div class="line"><a name="l00811"></a><span class="lineno">  811</span>&#160;</div><div class="line"><a name="l00812"></a><span class="lineno">  812</span>&#160;    std::vector&lt;uint16_t&gt; nextCounterUids;</div><div class="line"><a name="l00813"></a><span class="lineno">  813</span>&#160;    BOOST_CHECK_NO_THROW(nextCounterUids = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a6605c82bc625fbd40f24d35edee15fe3">GetNextCounterUids</a>(nextUid, 2));</div><div class="line"><a name="l00814"></a><span class="lineno">  814</span>&#160;    BOOST_CHECK(nextCounterUids.size() == 2);</div><div class="line"><a name="l00815"></a><span class="lineno">  815</span>&#160;    BOOST_CHECK(nextCounterUids[0] &gt; counterUids[0]);</div><div class="line"><a name="l00816"></a><span class="lineno">  816</span>&#160;</div><div class="line"><a name="l00817"></a><span class="lineno">  817</span>&#160;    std::vector&lt;uint16_t&gt; counterUidsMultiCore;</div><div class="line"><a name="l00818"></a><span class="lineno">  818</span>&#160;    uint16_t thirdUid = 4;</div><div class="line"><a name="l00819"></a><span class="lineno">  819</span>&#160;    uint16_t numberOfCores = 13;</div><div class="line"><a name="l00820"></a><span class="lineno">  820</span>&#160;    BOOST_CHECK_NO_THROW(counterUidsMultiCore = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a6605c82bc625fbd40f24d35edee15fe3">GetNextCounterUids</a>(thirdUid, numberOfCores));</div><div class="line"><a name="l00821"></a><span class="lineno">  821</span>&#160;    BOOST_CHECK(counterUidsMultiCore.size() == numberOfCores);</div><div class="line"><a name="l00822"></a><span class="lineno">  822</span>&#160;    BOOST_CHECK(counterUidsMultiCore.front() &gt;= nextCounterUids[0]);</div><div class="line"><a name="l00823"></a><span class="lineno">  823</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 1; i &lt; numberOfCores; i++)</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;        BOOST_CHECK(counterUidsMultiCore[i] == counterUidsMultiCore[i - 1] + 1);</div><div class="line"><a name="l00826"></a><span class="lineno">  826</span>&#160;    }</div><div class="line"><a name="l00827"></a><span class="lineno">  827</span>&#160;    BOOST_CHECK(counterUidsMultiCore.back() == counterUidsMultiCore.front() + numberOfCores - 1);</div><div class="line"><a name="l00828"></a><span class="lineno">  828</span>&#160;}</div><div class="line"><a name="l00829"></a><span class="lineno">  829</span>&#160;</div><div class="line"><a name="l00830"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#ab6e1696a242b05827ce2b2fa08368ea6">  830</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckCounterDirectoryRegisterCategory)</div><div class="line"><a name="l00831"></a><span class="lineno">  831</span>&#160;{</div><div class="line"><a name="l00832"></a><span class="lineno">  832</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml">CounterDirectory</a> counterDirectory;</div><div class="line"><a name="l00833"></a><span class="lineno">  833</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 0);</div><div class="line"><a name="l00834"></a><span class="lineno">  834</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">GetDeviceCount</a>() == 0);</div><div class="line"><a name="l00835"></a><span class="lineno">  835</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ae3b7dbaa7317dacbcec25f30f6a16075">GetCounterSetCount</a>() == 0);</div><div class="line"><a name="l00836"></a><span class="lineno">  836</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 0);</div><div class="line"><a name="l00837"></a><span class="lineno">  837</span>&#160;</div><div class="line"><a name="l00838"></a><span class="lineno">  838</span>&#160;    <span class="comment">// Register a category with an invalid name</span></div><div class="line"><a name="l00839"></a><span class="lineno">  839</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml">Category</a>* noCategory = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00840"></a><span class="lineno">  840</span>&#160;    BOOST_CHECK_THROW(noCategory = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a220a83a3433b6da68d41efe07c39b552">RegisterCategory</a>(<span class="stringliteral">&quot;&quot;</span>), <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l00841"></a><span class="lineno">  841</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 0);</div><div class="line"><a name="l00842"></a><span class="lineno">  842</span>&#160;    BOOST_CHECK(!noCategory);</div><div class="line"><a name="l00843"></a><span class="lineno">  843</span>&#160;</div><div class="line"><a name="l00844"></a><span class="lineno">  844</span>&#160;    <span class="comment">// Register a category with an invalid name</span></div><div class="line"><a name="l00845"></a><span class="lineno">  845</span>&#160;    BOOST_CHECK_THROW(noCategory = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a220a83a3433b6da68d41efe07c39b552">RegisterCategory</a>(<span class="stringliteral">&quot;invalid category&quot;</span>),</div><div class="line"><a name="l00846"></a><span class="lineno">  846</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l00847"></a><span class="lineno">  847</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 0);</div><div class="line"><a name="l00848"></a><span class="lineno">  848</span>&#160;    BOOST_CHECK(!noCategory);</div><div class="line"><a name="l00849"></a><span class="lineno">  849</span>&#160;</div><div class="line"><a name="l00850"></a><span class="lineno">  850</span>&#160;    <span class="comment">// Register a new category</span></div><div class="line"><a name="l00851"></a><span class="lineno">  851</span>&#160;    <span class="keyword">const</span> std::string categoryName = <span class="stringliteral">&quot;some_category&quot;</span>;</div><div class="line"><a name="l00852"></a><span class="lineno">  852</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml">Category</a>* category       = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00853"></a><span class="lineno">  853</span>&#160;    BOOST_CHECK_NO_THROW(category = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a220a83a3433b6da68d41efe07c39b552">RegisterCategory</a>(categoryName));</div><div class="line"><a name="l00854"></a><span class="lineno">  854</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 1);</div><div class="line"><a name="l00855"></a><span class="lineno">  855</span>&#160;    BOOST_CHECK(category);</div><div class="line"><a name="l00856"></a><span class="lineno">  856</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == categoryName);</div><div class="line"><a name="l00857"></a><span class="lineno">  857</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.empty());</div><div class="line"><a name="l00858"></a><span class="lineno">  858</span>&#160;</div><div class="line"><a name="l00859"></a><span class="lineno">  859</span>&#160;    <span class="comment">// Get the registered category</span></div><div class="line"><a name="l00860"></a><span class="lineno">  860</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml">Category</a>* registeredCategory = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#aab31f60f412b119002a465e13d5165f0">GetCategory</a>(categoryName);</div><div class="line"><a name="l00861"></a><span class="lineno">  861</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 1);</div><div class="line"><a name="l00862"></a><span class="lineno">  862</span>&#160;    BOOST_CHECK(registeredCategory);</div><div class="line"><a name="l00863"></a><span class="lineno">  863</span>&#160;    BOOST_CHECK(registeredCategory == category);</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">// Try to get a category not registered</span></div><div class="line"><a name="l00866"></a><span class="lineno">  866</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml">Category</a>* notRegisteredCategory = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#aab31f60f412b119002a465e13d5165f0">GetCategory</a>(<span class="stringliteral">&quot;not_registered_category&quot;</span>);</div><div class="line"><a name="l00867"></a><span class="lineno">  867</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 1);</div><div class="line"><a name="l00868"></a><span class="lineno">  868</span>&#160;    BOOST_CHECK(!notRegisteredCategory);</div><div class="line"><a name="l00869"></a><span class="lineno">  869</span>&#160;</div><div class="line"><a name="l00870"></a><span class="lineno">  870</span>&#160;    <span class="comment">// Register a category already registered</span></div><div class="line"><a name="l00871"></a><span class="lineno">  871</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml">Category</a>* anotherCategory = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00872"></a><span class="lineno">  872</span>&#160;    BOOST_CHECK_THROW(anotherCategory = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a220a83a3433b6da68d41efe07c39b552">RegisterCategory</a>(categoryName),</div><div class="line"><a name="l00873"></a><span class="lineno">  873</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l00874"></a><span class="lineno">  874</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 1);</div><div class="line"><a name="l00875"></a><span class="lineno">  875</span>&#160;    BOOST_CHECK(!anotherCategory);</div><div class="line"><a name="l00876"></a><span class="lineno">  876</span>&#160;</div><div class="line"><a name="l00877"></a><span class="lineno">  877</span>&#160;    <span class="comment">// Register a device for testing</span></div><div class="line"><a name="l00878"></a><span class="lineno">  878</span>&#160;    <span class="keyword">const</span> std::string deviceName = <span class="stringliteral">&quot;some_device&quot;</span>;</div><div class="line"><a name="l00879"></a><span class="lineno">  879</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml">Device</a>* device         = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00880"></a><span class="lineno">  880</span>&#160;    BOOST_CHECK_NO_THROW(device = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a6ec101239653ba9260e1362c5381e81d">RegisterDevice</a>(deviceName));</div><div class="line"><a name="l00881"></a><span class="lineno">  881</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">GetDeviceCount</a>() == 1);</div><div class="line"><a name="l00882"></a><span class="lineno">  882</span>&#160;    BOOST_CHECK(device);</div><div class="line"><a name="l00883"></a><span class="lineno">  883</span>&#160;    BOOST_CHECK(device-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt;= 1);</div><div class="line"><a name="l00884"></a><span class="lineno">  884</span>&#160;    BOOST_CHECK(device-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == deviceName);</div><div class="line"><a name="l00885"></a><span class="lineno">  885</span>&#160;    BOOST_CHECK(device-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a28e8394686112e495caf069eb46b44ca">m_Cores</a> == 0);</div><div class="line"><a name="l00886"></a><span class="lineno">  886</span>&#160;</div><div class="line"><a name="l00887"></a><span class="lineno">  887</span>&#160;    <span class="comment">// Register a new category not associated to any device</span></div><div class="line"><a name="l00888"></a><span class="lineno">  888</span>&#160;    <span class="keyword">const</span> std::string categoryWoDeviceName = <span class="stringliteral">&quot;some_category_without_device&quot;</span>;</div><div class="line"><a name="l00889"></a><span class="lineno">  889</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml">Category</a>* categoryWoDevice       = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00890"></a><span class="lineno">  890</span>&#160;    BOOST_CHECK_NO_THROW(categoryWoDevice = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a220a83a3433b6da68d41efe07c39b552">RegisterCategory</a>(categoryWoDeviceName));</div><div class="line"><a name="l00891"></a><span class="lineno">  891</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 2);</div><div class="line"><a name="l00892"></a><span class="lineno">  892</span>&#160;    BOOST_CHECK(categoryWoDevice);</div><div class="line"><a name="l00893"></a><span class="lineno">  893</span>&#160;    BOOST_CHECK(categoryWoDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == categoryWoDeviceName);</div><div class="line"><a name="l00894"></a><span class="lineno">  894</span>&#160;    BOOST_CHECK(categoryWoDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.empty());</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;    <span class="comment">// Register a new category associated to an invalid device name (already exist)</span></div><div class="line"><a name="l00897"></a><span class="lineno">  897</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml">Category</a>* categoryInvalidDeviceName = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00898"></a><span class="lineno">  898</span>&#160;    BOOST_CHECK_THROW(categoryInvalidDeviceName =</div><div class="line"><a name="l00899"></a><span class="lineno">  899</span>&#160;                          counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a220a83a3433b6da68d41efe07c39b552">RegisterCategory</a>(categoryWoDeviceName),</div><div class="line"><a name="l00900"></a><span class="lineno">  900</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l00901"></a><span class="lineno">  901</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 2);</div><div class="line"><a name="l00902"></a><span class="lineno">  902</span>&#160;    BOOST_CHECK(!categoryInvalidDeviceName);</div><div class="line"><a name="l00903"></a><span class="lineno">  903</span>&#160;</div><div class="line"><a name="l00904"></a><span class="lineno">  904</span>&#160;    <span class="comment">// Register a new category associated to a valid device</span></div><div class="line"><a name="l00905"></a><span class="lineno">  905</span>&#160;    <span class="keyword">const</span> std::string categoryWValidDeviceName = <span class="stringliteral">&quot;some_category_with_valid_device&quot;</span>;</div><div class="line"><a name="l00906"></a><span class="lineno">  906</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml">Category</a>* categoryWValidDevice       = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00907"></a><span class="lineno">  907</span>&#160;    BOOST_CHECK_NO_THROW(categoryWValidDevice =</div><div class="line"><a name="l00908"></a><span class="lineno">  908</span>&#160;                             counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a220a83a3433b6da68d41efe07c39b552">RegisterCategory</a>(categoryWValidDeviceName));</div><div class="line"><a name="l00909"></a><span class="lineno">  909</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 3);</div><div class="line"><a name="l00910"></a><span class="lineno">  910</span>&#160;    BOOST_CHECK(categoryWValidDevice);</div><div class="line"><a name="l00911"></a><span class="lineno">  911</span>&#160;    BOOST_CHECK(categoryWValidDevice != category);</div><div class="line"><a name="l00912"></a><span class="lineno">  912</span>&#160;    BOOST_CHECK(categoryWValidDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == categoryWValidDeviceName);</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;    <span class="comment">// Register a counter set for testing</span></div><div class="line"><a name="l00915"></a><span class="lineno">  915</span>&#160;    <span class="keyword">const</span> std::string counterSetName = <span class="stringliteral">&quot;some_counter_set&quot;</span>;</div><div class="line"><a name="l00916"></a><span class="lineno">  916</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml">CounterSet</a>* counterSet     = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00917"></a><span class="lineno">  917</span>&#160;    BOOST_CHECK_NO_THROW(counterSet = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a161604d904508d5b86b459c2c2ace4be">RegisterCounterSet</a>(counterSetName));</div><div class="line"><a name="l00918"></a><span class="lineno">  918</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ae3b7dbaa7317dacbcec25f30f6a16075">GetCounterSetCount</a>() == 1);</div><div class="line"><a name="l00919"></a><span class="lineno">  919</span>&#160;    BOOST_CHECK(counterSet);</div><div class="line"><a name="l00920"></a><span class="lineno">  920</span>&#160;    BOOST_CHECK(counterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt;= 1);</div><div class="line"><a name="l00921"></a><span class="lineno">  921</span>&#160;    BOOST_CHECK(counterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == counterSetName);</div><div class="line"><a name="l00922"></a><span class="lineno">  922</span>&#160;    BOOST_CHECK(counterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#ab4676c63d2f2d14922a8f7cc768d1618">m_Count</a> == 0);</div><div class="line"><a name="l00923"></a><span class="lineno">  923</span>&#160;</div><div class="line"><a name="l00924"></a><span class="lineno">  924</span>&#160;    <span class="comment">// Register a new category not associated to any counter set</span></div><div class="line"><a name="l00925"></a><span class="lineno">  925</span>&#160;    <span class="keyword">const</span> std::string categoryWoCounterSetName = <span class="stringliteral">&quot;some_category_without_counter_set&quot;</span>;</div><div class="line"><a name="l00926"></a><span class="lineno">  926</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml">Category</a>* categoryWoCounterSet       = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00927"></a><span class="lineno">  927</span>&#160;    BOOST_CHECK_NO_THROW(categoryWoCounterSet =</div><div class="line"><a name="l00928"></a><span class="lineno">  928</span>&#160;                             counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a220a83a3433b6da68d41efe07c39b552">RegisterCategory</a>(categoryWoCounterSetName));</div><div class="line"><a name="l00929"></a><span class="lineno">  929</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 4);</div><div class="line"><a name="l00930"></a><span class="lineno">  930</span>&#160;    BOOST_CHECK(categoryWoCounterSet);</div><div class="line"><a name="l00931"></a><span class="lineno">  931</span>&#160;    BOOST_CHECK(categoryWoCounterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == categoryWoCounterSetName);</div><div class="line"><a name="l00932"></a><span class="lineno">  932</span>&#160;</div><div class="line"><a name="l00933"></a><span class="lineno">  933</span>&#160;    <span class="comment">// Register a new category associated to a valid counter set</span></div><div class="line"><a name="l00934"></a><span class="lineno">  934</span>&#160;    <span class="keyword">const</span> std::string categoryWValidCounterSetName = <span class="stringliteral">&quot;some_category_with_valid_counter_set&quot;</span>;</div><div class="line"><a name="l00935"></a><span class="lineno">  935</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml">Category</a>* categoryWValidCounterSet       = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00936"></a><span class="lineno">  936</span>&#160;    BOOST_CHECK_NO_THROW(categoryWValidCounterSet = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a220a83a3433b6da68d41efe07c39b552">RegisterCategory</a>(categoryWValidCounterSetName));</div><div class="line"><a name="l00937"></a><span class="lineno">  937</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 5);</div><div class="line"><a name="l00938"></a><span class="lineno">  938</span>&#160;    BOOST_CHECK(categoryWValidCounterSet);</div><div class="line"><a name="l00939"></a><span class="lineno">  939</span>&#160;    BOOST_CHECK(categoryWValidCounterSet != category);</div><div class="line"><a name="l00940"></a><span class="lineno">  940</span>&#160;    BOOST_CHECK(categoryWValidCounterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == categoryWValidCounterSetName);</div><div class="line"><a name="l00941"></a><span class="lineno">  941</span>&#160;</div><div class="line"><a name="l00942"></a><span class="lineno">  942</span>&#160;    <span class="comment">// Register a new category associated to a valid device and counter set</span></div><div class="line"><a name="l00943"></a><span class="lineno">  943</span>&#160;    <span class="keyword">const</span> std::string categoryWValidDeviceAndValidCounterSetName = <span class="stringliteral">&quot;some_category_with_valid_device_and_counter_set&quot;</span>;</div><div class="line"><a name="l00944"></a><span class="lineno">  944</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml">Category</a>* categoryWValidDeviceAndValidCounterSet       = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00945"></a><span class="lineno">  945</span>&#160;    BOOST_CHECK_NO_THROW(categoryWValidDeviceAndValidCounterSet = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a220a83a3433b6da68d41efe07c39b552">RegisterCategory</a>(</div><div class="line"><a name="l00946"></a><span class="lineno">  946</span>&#160;                             categoryWValidDeviceAndValidCounterSetName));</div><div class="line"><a name="l00947"></a><span class="lineno">  947</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 6);</div><div class="line"><a name="l00948"></a><span class="lineno">  948</span>&#160;    BOOST_CHECK(categoryWValidDeviceAndValidCounterSet);</div><div class="line"><a name="l00949"></a><span class="lineno">  949</span>&#160;    BOOST_CHECK(categoryWValidDeviceAndValidCounterSet != category);</div><div class="line"><a name="l00950"></a><span class="lineno">  950</span>&#160;    BOOST_CHECK(categoryWValidDeviceAndValidCounterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == categoryWValidDeviceAndValidCounterSetName);</div><div class="line"><a name="l00951"></a><span class="lineno">  951</span>&#160;}</div><div class="line"><a name="l00952"></a><span class="lineno">  952</span>&#160;</div><div class="line"><a name="l00953"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a3f998bdfba344876c7baa32d1aa9c67c">  953</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckCounterDirectoryRegisterDevice)</div><div class="line"><a name="l00954"></a><span class="lineno">  954</span>&#160;{</div><div class="line"><a name="l00955"></a><span class="lineno">  955</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml">CounterDirectory</a> counterDirectory;</div><div class="line"><a name="l00956"></a><span class="lineno">  956</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 0);</div><div class="line"><a name="l00957"></a><span class="lineno">  957</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">GetDeviceCount</a>() == 0);</div><div class="line"><a name="l00958"></a><span class="lineno">  958</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ae3b7dbaa7317dacbcec25f30f6a16075">GetCounterSetCount</a>() == 0);</div><div class="line"><a name="l00959"></a><span class="lineno">  959</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 0);</div><div class="line"><a name="l00960"></a><span class="lineno">  960</span>&#160;</div><div class="line"><a name="l00961"></a><span class="lineno">  961</span>&#160;    <span class="comment">// Register a device with an invalid name</span></div><div class="line"><a name="l00962"></a><span class="lineno">  962</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml">Device</a>* noDevice = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00963"></a><span class="lineno">  963</span>&#160;    BOOST_CHECK_THROW(noDevice = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a6ec101239653ba9260e1362c5381e81d">RegisterDevice</a>(<span class="stringliteral">&quot;&quot;</span>), <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l00964"></a><span class="lineno">  964</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">GetDeviceCount</a>() == 0);</div><div class="line"><a name="l00965"></a><span class="lineno">  965</span>&#160;    BOOST_CHECK(!noDevice);</div><div class="line"><a name="l00966"></a><span class="lineno">  966</span>&#160;</div><div class="line"><a name="l00967"></a><span class="lineno">  967</span>&#160;    <span class="comment">// Register a device with an invalid name</span></div><div class="line"><a name="l00968"></a><span class="lineno">  968</span>&#160;    BOOST_CHECK_THROW(noDevice = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a6ec101239653ba9260e1362c5381e81d">RegisterDevice</a>(<span class="stringliteral">&quot;inv@lid nam€&quot;</span>), <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l00969"></a><span class="lineno">  969</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">GetDeviceCount</a>() == 0);</div><div class="line"><a name="l00970"></a><span class="lineno">  970</span>&#160;    BOOST_CHECK(!noDevice);</div><div class="line"><a name="l00971"></a><span class="lineno">  971</span>&#160;</div><div class="line"><a name="l00972"></a><span class="lineno">  972</span>&#160;    <span class="comment">// Register a new device with no cores or parent category</span></div><div class="line"><a name="l00973"></a><span class="lineno">  973</span>&#160;    <span class="keyword">const</span> std::string deviceName = <span class="stringliteral">&quot;some_device&quot;</span>;</div><div class="line"><a name="l00974"></a><span class="lineno">  974</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml">Device</a>* device         = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00975"></a><span class="lineno">  975</span>&#160;    BOOST_CHECK_NO_THROW(device = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a6ec101239653ba9260e1362c5381e81d">RegisterDevice</a>(deviceName));</div><div class="line"><a name="l00976"></a><span class="lineno">  976</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">GetDeviceCount</a>() == 1);</div><div class="line"><a name="l00977"></a><span class="lineno">  977</span>&#160;    BOOST_CHECK(device);</div><div class="line"><a name="l00978"></a><span class="lineno">  978</span>&#160;    BOOST_CHECK(device-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == deviceName);</div><div class="line"><a name="l00979"></a><span class="lineno">  979</span>&#160;    BOOST_CHECK(device-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt;= 1);</div><div class="line"><a name="l00980"></a><span class="lineno">  980</span>&#160;    BOOST_CHECK(device-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a28e8394686112e495caf069eb46b44ca">m_Cores</a> == 0);</div><div class="line"><a name="l00981"></a><span class="lineno">  981</span>&#160;</div><div class="line"><a name="l00982"></a><span class="lineno">  982</span>&#160;    <span class="comment">// Try getting an unregistered device</span></div><div class="line"><a name="l00983"></a><span class="lineno">  983</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml">Device</a>* unregisteredDevice = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#aa898e858d26d200fbc3788ac6d14fd90">GetDevice</a>(9999);</div><div class="line"><a name="l00984"></a><span class="lineno">  984</span>&#160;    BOOST_CHECK(!unregisteredDevice);</div><div class="line"><a name="l00985"></a><span class="lineno">  985</span>&#160;</div><div class="line"><a name="l00986"></a><span class="lineno">  986</span>&#160;    <span class="comment">// Get the registered device</span></div><div class="line"><a name="l00987"></a><span class="lineno">  987</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml">Device</a>* registeredDevice = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#aa898e858d26d200fbc3788ac6d14fd90">GetDevice</a>(device-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l00988"></a><span class="lineno">  988</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">GetDeviceCount</a>() == 1);</div><div class="line"><a name="l00989"></a><span class="lineno">  989</span>&#160;    BOOST_CHECK(registeredDevice);</div><div class="line"><a name="l00990"></a><span class="lineno">  990</span>&#160;    BOOST_CHECK(registeredDevice == device);</div><div class="line"><a name="l00991"></a><span class="lineno">  991</span>&#160;</div><div class="line"><a name="l00992"></a><span class="lineno">  992</span>&#160;    <span class="comment">// Register a device with the name of a device already registered</span></div><div class="line"><a name="l00993"></a><span class="lineno">  993</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml">Device</a>* deviceSameName = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00994"></a><span class="lineno">  994</span>&#160;    BOOST_CHECK_THROW(deviceSameName = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a6ec101239653ba9260e1362c5381e81d">RegisterDevice</a>(deviceName), <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l00995"></a><span class="lineno">  995</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">GetDeviceCount</a>() == 1);</div><div class="line"><a name="l00996"></a><span class="lineno">  996</span>&#160;    BOOST_CHECK(!deviceSameName);</div><div class="line"><a name="l00997"></a><span class="lineno">  997</span>&#160;</div><div class="line"><a name="l00998"></a><span class="lineno">  998</span>&#160;    <span class="comment">// Register a new device with cores and no parent category</span></div><div class="line"><a name="l00999"></a><span class="lineno">  999</span>&#160;    <span class="keyword">const</span> std::string deviceWCoresName = <span class="stringliteral">&quot;some_device_with_cores&quot;</span>;</div><div class="line"><a name="l01000"></a><span class="lineno"> 1000</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml">Device</a>* deviceWCores         = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01001"></a><span class="lineno"> 1001</span>&#160;    BOOST_CHECK_NO_THROW(deviceWCores = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a6ec101239653ba9260e1362c5381e81d">RegisterDevice</a>(deviceWCoresName, 2));</div><div class="line"><a name="l01002"></a><span class="lineno"> 1002</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">GetDeviceCount</a>() == 2);</div><div class="line"><a name="l01003"></a><span class="lineno"> 1003</span>&#160;    BOOST_CHECK(deviceWCores);</div><div class="line"><a name="l01004"></a><span class="lineno"> 1004</span>&#160;    BOOST_CHECK(deviceWCores-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == deviceWCoresName);</div><div class="line"><a name="l01005"></a><span class="lineno"> 1005</span>&#160;    BOOST_CHECK(deviceWCores-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt;= 1);</div><div class="line"><a name="l01006"></a><span class="lineno"> 1006</span>&#160;    BOOST_CHECK(deviceWCores-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt; device-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01007"></a><span class="lineno"> 1007</span>&#160;    BOOST_CHECK(deviceWCores-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a28e8394686112e495caf069eb46b44ca">m_Cores</a> == 2);</div><div class="line"><a name="l01008"></a><span class="lineno"> 1008</span>&#160;</div><div class="line"><a name="l01009"></a><span class="lineno"> 1009</span>&#160;    <span class="comment">// Get the registered device</span></div><div class="line"><a name="l01010"></a><span class="lineno"> 1010</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml">Device</a>* registeredDeviceWCores = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#aa898e858d26d200fbc3788ac6d14fd90">GetDevice</a>(deviceWCores-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01011"></a><span class="lineno"> 1011</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">GetDeviceCount</a>() == 2);</div><div class="line"><a name="l01012"></a><span class="lineno"> 1012</span>&#160;    BOOST_CHECK(registeredDeviceWCores);</div><div class="line"><a name="l01013"></a><span class="lineno"> 1013</span>&#160;    BOOST_CHECK(registeredDeviceWCores == deviceWCores);</div><div class="line"><a name="l01014"></a><span class="lineno"> 1014</span>&#160;    BOOST_CHECK(registeredDeviceWCores != device);</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160;</div><div class="line"><a name="l01016"></a><span class="lineno"> 1016</span>&#160;    <span class="comment">// Register a new device with cores and invalid parent category</span></div><div class="line"><a name="l01017"></a><span class="lineno"> 1017</span>&#160;    <span class="keyword">const</span> std::string deviceWCoresWInvalidParentCategoryName = <span class="stringliteral">&quot;some_device_with_cores_with_invalid_parent_category&quot;</span>;</div><div class="line"><a name="l01018"></a><span class="lineno"> 1018</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml">Device</a>* deviceWCoresWInvalidParentCategory         = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01019"></a><span class="lineno"> 1019</span>&#160;    BOOST_CHECK_THROW(deviceWCoresWInvalidParentCategory =</div><div class="line"><a name="l01020"></a><span class="lineno"> 1020</span>&#160;                          counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a6ec101239653ba9260e1362c5381e81d">RegisterDevice</a>(deviceWCoresWInvalidParentCategoryName, 3, std::string(<span class="stringliteral">&quot;&quot;</span>)),</div><div class="line"><a name="l01021"></a><span class="lineno"> 1021</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01022"></a><span class="lineno"> 1022</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">GetDeviceCount</a>() == 2);</div><div class="line"><a name="l01023"></a><span class="lineno"> 1023</span>&#160;    BOOST_CHECK(!deviceWCoresWInvalidParentCategory);</div><div class="line"><a name="l01024"></a><span class="lineno"> 1024</span>&#160;</div><div class="line"><a name="l01025"></a><span class="lineno"> 1025</span>&#160;    <span class="comment">// Register a new device with cores and invalid parent category</span></div><div class="line"><a name="l01026"></a><span class="lineno"> 1026</span>&#160;    <span class="keyword">const</span> std::string deviceWCoresWInvalidParentCategoryName2 = <span class="stringliteral">&quot;some_device_with_cores_with_invalid_parent_category2&quot;</span>;</div><div class="line"><a name="l01027"></a><span class="lineno"> 1027</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml">Device</a>* deviceWCoresWInvalidParentCategory2         = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01028"></a><span class="lineno"> 1028</span>&#160;    BOOST_CHECK_THROW(deviceWCoresWInvalidParentCategory2 = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a6ec101239653ba9260e1362c5381e81d">RegisterDevice</a>(</div><div class="line"><a name="l01029"></a><span class="lineno"> 1029</span>&#160;                          deviceWCoresWInvalidParentCategoryName2, 3, std::string(<span class="stringliteral">&quot;invalid_parent_category&quot;</span>)),</div><div class="line"><a name="l01030"></a><span class="lineno"> 1030</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01031"></a><span class="lineno"> 1031</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">GetDeviceCount</a>() == 2);</div><div class="line"><a name="l01032"></a><span class="lineno"> 1032</span>&#160;    BOOST_CHECK(!deviceWCoresWInvalidParentCategory2);</div><div class="line"><a name="l01033"></a><span class="lineno"> 1033</span>&#160;</div><div class="line"><a name="l01034"></a><span class="lineno"> 1034</span>&#160;    <span class="comment">// Register a category for testing</span></div><div class="line"><a name="l01035"></a><span class="lineno"> 1035</span>&#160;    <span class="keyword">const</span> std::string categoryName = <span class="stringliteral">&quot;some_category&quot;</span>;</div><div class="line"><a name="l01036"></a><span class="lineno"> 1036</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml">Category</a>* category       = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01037"></a><span class="lineno"> 1037</span>&#160;    BOOST_CHECK_NO_THROW(category = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a220a83a3433b6da68d41efe07c39b552">RegisterCategory</a>(categoryName));</div><div class="line"><a name="l01038"></a><span class="lineno"> 1038</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 1);</div><div class="line"><a name="l01039"></a><span class="lineno"> 1039</span>&#160;    BOOST_CHECK(category);</div><div class="line"><a name="l01040"></a><span class="lineno"> 1040</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == categoryName);</div><div class="line"><a name="l01041"></a><span class="lineno"> 1041</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.empty());</div><div class="line"><a name="l01042"></a><span class="lineno"> 1042</span>&#160;</div><div class="line"><a name="l01043"></a><span class="lineno"> 1043</span>&#160;    <span class="comment">// Register a new device with cores and valid parent category</span></div><div class="line"><a name="l01044"></a><span class="lineno"> 1044</span>&#160;    <span class="keyword">const</span> std::string deviceWCoresWValidParentCategoryName = <span class="stringliteral">&quot;some_device_with_cores_with_valid_parent_category&quot;</span>;</div><div class="line"><a name="l01045"></a><span class="lineno"> 1045</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml">Device</a>* deviceWCoresWValidParentCategory         = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01046"></a><span class="lineno"> 1046</span>&#160;    BOOST_CHECK_NO_THROW(deviceWCoresWValidParentCategory =</div><div class="line"><a name="l01047"></a><span class="lineno"> 1047</span>&#160;                             counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a6ec101239653ba9260e1362c5381e81d">RegisterDevice</a>(deviceWCoresWValidParentCategoryName, 4, categoryName));</div><div class="line"><a name="l01048"></a><span class="lineno"> 1048</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">GetDeviceCount</a>() == 3);</div><div class="line"><a name="l01049"></a><span class="lineno"> 1049</span>&#160;    BOOST_CHECK(deviceWCoresWValidParentCategory);</div><div class="line"><a name="l01050"></a><span class="lineno"> 1050</span>&#160;    BOOST_CHECK(deviceWCoresWValidParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == deviceWCoresWValidParentCategoryName);</div><div class="line"><a name="l01051"></a><span class="lineno"> 1051</span>&#160;    BOOST_CHECK(deviceWCoresWValidParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt;= 1);</div><div class="line"><a name="l01052"></a><span class="lineno"> 1052</span>&#160;    BOOST_CHECK(deviceWCoresWValidParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt; device-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01053"></a><span class="lineno"> 1053</span>&#160;    BOOST_CHECK(deviceWCoresWValidParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt; deviceWCores-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01054"></a><span class="lineno"> 1054</span>&#160;    BOOST_CHECK(deviceWCoresWValidParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a28e8394686112e495caf069eb46b44ca">m_Cores</a> == 4);</div><div class="line"><a name="l01055"></a><span class="lineno"> 1055</span>&#160;}</div><div class="line"><a name="l01056"></a><span class="lineno"> 1056</span>&#160;</div><div class="line"><a name="l01057"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a48ae230dddd08ccef8aa065fc79501b6"> 1057</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckCounterDirectoryRegisterCounterSet)</div><div class="line"><a name="l01058"></a><span class="lineno"> 1058</span>&#160;{</div><div class="line"><a name="l01059"></a><span class="lineno"> 1059</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml">CounterDirectory</a> counterDirectory;</div><div class="line"><a name="l01060"></a><span class="lineno"> 1060</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 0);</div><div class="line"><a name="l01061"></a><span class="lineno"> 1061</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">GetDeviceCount</a>() == 0);</div><div class="line"><a name="l01062"></a><span class="lineno"> 1062</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ae3b7dbaa7317dacbcec25f30f6a16075">GetCounterSetCount</a>() == 0);</div><div class="line"><a name="l01063"></a><span class="lineno"> 1063</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 0);</div><div class="line"><a name="l01064"></a><span class="lineno"> 1064</span>&#160;</div><div class="line"><a name="l01065"></a><span class="lineno"> 1065</span>&#160;    <span class="comment">// Register a counter set with an invalid name</span></div><div class="line"><a name="l01066"></a><span class="lineno"> 1066</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml">CounterSet</a>* noCounterSet = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01067"></a><span class="lineno"> 1067</span>&#160;    BOOST_CHECK_THROW(noCounterSet = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a161604d904508d5b86b459c2c2ace4be">RegisterCounterSet</a>(<span class="stringliteral">&quot;&quot;</span>), <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01068"></a><span class="lineno"> 1068</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ae3b7dbaa7317dacbcec25f30f6a16075">GetCounterSetCount</a>() == 0);</div><div class="line"><a name="l01069"></a><span class="lineno"> 1069</span>&#160;    BOOST_CHECK(!noCounterSet);</div><div class="line"><a name="l01070"></a><span class="lineno"> 1070</span>&#160;</div><div class="line"><a name="l01071"></a><span class="lineno"> 1071</span>&#160;    <span class="comment">// Register a counter set with an invalid name</span></div><div class="line"><a name="l01072"></a><span class="lineno"> 1072</span>&#160;    BOOST_CHECK_THROW(noCounterSet = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a161604d904508d5b86b459c2c2ace4be">RegisterCounterSet</a>(<span class="stringliteral">&quot;invalid name&quot;</span>),</div><div class="line"><a name="l01073"></a><span class="lineno"> 1073</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01074"></a><span class="lineno"> 1074</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ae3b7dbaa7317dacbcec25f30f6a16075">GetCounterSetCount</a>() == 0);</div><div class="line"><a name="l01075"></a><span class="lineno"> 1075</span>&#160;    BOOST_CHECK(!noCounterSet);</div><div class="line"><a name="l01076"></a><span class="lineno"> 1076</span>&#160;</div><div class="line"><a name="l01077"></a><span class="lineno"> 1077</span>&#160;    <span class="comment">// Register a new counter set with no count or parent category</span></div><div class="line"><a name="l01078"></a><span class="lineno"> 1078</span>&#160;    <span class="keyword">const</span> std::string counterSetName = <span class="stringliteral">&quot;some_counter_set&quot;</span>;</div><div class="line"><a name="l01079"></a><span class="lineno"> 1079</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml">CounterSet</a>* counterSet     = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01080"></a><span class="lineno"> 1080</span>&#160;    BOOST_CHECK_NO_THROW(counterSet = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a161604d904508d5b86b459c2c2ace4be">RegisterCounterSet</a>(counterSetName));</div><div class="line"><a name="l01081"></a><span class="lineno"> 1081</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ae3b7dbaa7317dacbcec25f30f6a16075">GetCounterSetCount</a>() == 1);</div><div class="line"><a name="l01082"></a><span class="lineno"> 1082</span>&#160;    BOOST_CHECK(counterSet);</div><div class="line"><a name="l01083"></a><span class="lineno"> 1083</span>&#160;    BOOST_CHECK(counterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == counterSetName);</div><div class="line"><a name="l01084"></a><span class="lineno"> 1084</span>&#160;    BOOST_CHECK(counterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt;= 1);</div><div class="line"><a name="l01085"></a><span class="lineno"> 1085</span>&#160;    BOOST_CHECK(counterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#ab4676c63d2f2d14922a8f7cc768d1618">m_Count</a> == 0);</div><div class="line"><a name="l01086"></a><span class="lineno"> 1086</span>&#160;</div><div class="line"><a name="l01087"></a><span class="lineno"> 1087</span>&#160;    <span class="comment">// Try getting an unregistered counter set</span></div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml">CounterSet</a>* unregisteredCounterSet = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad368fc6d788ff64cc25cafe2b40265c6">GetCounterSet</a>(9999);</div><div class="line"><a name="l01089"></a><span class="lineno"> 1089</span>&#160;    BOOST_CHECK(!unregisteredCounterSet);</div><div class="line"><a name="l01090"></a><span class="lineno"> 1090</span>&#160;</div><div class="line"><a name="l01091"></a><span class="lineno"> 1091</span>&#160;    <span class="comment">// Get the registered counter set</span></div><div class="line"><a name="l01092"></a><span class="lineno"> 1092</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml">CounterSet</a>* registeredCounterSet = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad368fc6d788ff64cc25cafe2b40265c6">GetCounterSet</a>(counterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01093"></a><span class="lineno"> 1093</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ae3b7dbaa7317dacbcec25f30f6a16075">GetCounterSetCount</a>() == 1);</div><div class="line"><a name="l01094"></a><span class="lineno"> 1094</span>&#160;    BOOST_CHECK(registeredCounterSet);</div><div class="line"><a name="l01095"></a><span class="lineno"> 1095</span>&#160;    BOOST_CHECK(registeredCounterSet == counterSet);</div><div class="line"><a name="l01096"></a><span class="lineno"> 1096</span>&#160;</div><div class="line"><a name="l01097"></a><span class="lineno"> 1097</span>&#160;    <span class="comment">// Register a counter set with the name of a counter set already registered</span></div><div class="line"><a name="l01098"></a><span class="lineno"> 1098</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml">CounterSet</a>* counterSetSameName = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01099"></a><span class="lineno"> 1099</span>&#160;    BOOST_CHECK_THROW(counterSetSameName = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a161604d904508d5b86b459c2c2ace4be">RegisterCounterSet</a>(counterSetName),</div><div class="line"><a name="l01100"></a><span class="lineno"> 1100</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01101"></a><span class="lineno"> 1101</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ae3b7dbaa7317dacbcec25f30f6a16075">GetCounterSetCount</a>() == 1);</div><div class="line"><a name="l01102"></a><span class="lineno"> 1102</span>&#160;    BOOST_CHECK(!counterSetSameName);</div><div class="line"><a name="l01103"></a><span class="lineno"> 1103</span>&#160;</div><div class="line"><a name="l01104"></a><span class="lineno"> 1104</span>&#160;    <span class="comment">// Register a new counter set with count and no parent category</span></div><div class="line"><a name="l01105"></a><span class="lineno"> 1105</span>&#160;    <span class="keyword">const</span> std::string counterSetWCountName = <span class="stringliteral">&quot;some_counter_set_with_count&quot;</span>;</div><div class="line"><a name="l01106"></a><span class="lineno"> 1106</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml">CounterSet</a>* counterSetWCount     = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01107"></a><span class="lineno"> 1107</span>&#160;    BOOST_CHECK_NO_THROW(counterSetWCount = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a161604d904508d5b86b459c2c2ace4be">RegisterCounterSet</a>(counterSetWCountName, 37));</div><div class="line"><a name="l01108"></a><span class="lineno"> 1108</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ae3b7dbaa7317dacbcec25f30f6a16075">GetCounterSetCount</a>() == 2);</div><div class="line"><a name="l01109"></a><span class="lineno"> 1109</span>&#160;    BOOST_CHECK(counterSetWCount);</div><div class="line"><a name="l01110"></a><span class="lineno"> 1110</span>&#160;    BOOST_CHECK(counterSetWCount-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == counterSetWCountName);</div><div class="line"><a name="l01111"></a><span class="lineno"> 1111</span>&#160;    BOOST_CHECK(counterSetWCount-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt;= 1);</div><div class="line"><a name="l01112"></a><span class="lineno"> 1112</span>&#160;    BOOST_CHECK(counterSetWCount-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt; counterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01113"></a><span class="lineno"> 1113</span>&#160;    BOOST_CHECK(counterSetWCount-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#ab4676c63d2f2d14922a8f7cc768d1618">m_Count</a> == 37);</div><div class="line"><a name="l01114"></a><span class="lineno"> 1114</span>&#160;</div><div class="line"><a name="l01115"></a><span class="lineno"> 1115</span>&#160;    <span class="comment">// Get the registered counter set</span></div><div class="line"><a name="l01116"></a><span class="lineno"> 1116</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml">CounterSet</a>* registeredCounterSetWCount = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad368fc6d788ff64cc25cafe2b40265c6">GetCounterSet</a>(counterSetWCount-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01117"></a><span class="lineno"> 1117</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ae3b7dbaa7317dacbcec25f30f6a16075">GetCounterSetCount</a>() == 2);</div><div class="line"><a name="l01118"></a><span class="lineno"> 1118</span>&#160;    BOOST_CHECK(registeredCounterSetWCount);</div><div class="line"><a name="l01119"></a><span class="lineno"> 1119</span>&#160;    BOOST_CHECK(registeredCounterSetWCount == counterSetWCount);</div><div class="line"><a name="l01120"></a><span class="lineno"> 1120</span>&#160;    BOOST_CHECK(registeredCounterSetWCount != counterSet);</div><div class="line"><a name="l01121"></a><span class="lineno"> 1121</span>&#160;</div><div class="line"><a name="l01122"></a><span class="lineno"> 1122</span>&#160;    <span class="comment">// Register a new counter set with count and invalid parent category</span></div><div class="line"><a name="l01123"></a><span class="lineno"> 1123</span>&#160;    <span class="keyword">const</span> std::string counterSetWCountWInvalidParentCategoryName = <span class="stringliteral">&quot;some_counter_set_with_count_&quot;</span></div><div class="line"><a name="l01124"></a><span class="lineno"> 1124</span>&#160;                                                                   <span class="stringliteral">&quot;with_invalid_parent_category&quot;</span>;</div><div class="line"><a name="l01125"></a><span class="lineno"> 1125</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml">CounterSet</a>* counterSetWCountWInvalidParentCategory = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01126"></a><span class="lineno"> 1126</span>&#160;    BOOST_CHECK_THROW(counterSetWCountWInvalidParentCategory = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a161604d904508d5b86b459c2c2ace4be">RegisterCounterSet</a>(</div><div class="line"><a name="l01127"></a><span class="lineno"> 1127</span>&#160;                          counterSetWCountWInvalidParentCategoryName, 42, std::string(<span class="stringliteral">&quot;&quot;</span>)),</div><div class="line"><a name="l01128"></a><span class="lineno"> 1128</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01129"></a><span class="lineno"> 1129</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ae3b7dbaa7317dacbcec25f30f6a16075">GetCounterSetCount</a>() == 2);</div><div class="line"><a name="l01130"></a><span class="lineno"> 1130</span>&#160;    BOOST_CHECK(!counterSetWCountWInvalidParentCategory);</div><div class="line"><a name="l01131"></a><span class="lineno"> 1131</span>&#160;</div><div class="line"><a name="l01132"></a><span class="lineno"> 1132</span>&#160;    <span class="comment">// Register a new counter set with count and invalid parent category</span></div><div class="line"><a name="l01133"></a><span class="lineno"> 1133</span>&#160;    <span class="keyword">const</span> std::string counterSetWCountWInvalidParentCategoryName2 = <span class="stringliteral">&quot;some_counter_set_with_count_&quot;</span></div><div class="line"><a name="l01134"></a><span class="lineno"> 1134</span>&#160;                                                                    <span class="stringliteral">&quot;with_invalid_parent_category2&quot;</span>;</div><div class="line"><a name="l01135"></a><span class="lineno"> 1135</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml">CounterSet</a>* counterSetWCountWInvalidParentCategory2 = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01136"></a><span class="lineno"> 1136</span>&#160;    BOOST_CHECK_THROW(counterSetWCountWInvalidParentCategory2 = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a161604d904508d5b86b459c2c2ace4be">RegisterCounterSet</a>(</div><div class="line"><a name="l01137"></a><span class="lineno"> 1137</span>&#160;                          counterSetWCountWInvalidParentCategoryName2, 42, std::string(<span class="stringliteral">&quot;invalid_parent_category&quot;</span>)),</div><div class="line"><a name="l01138"></a><span class="lineno"> 1138</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01139"></a><span class="lineno"> 1139</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ae3b7dbaa7317dacbcec25f30f6a16075">GetCounterSetCount</a>() == 2);</div><div class="line"><a name="l01140"></a><span class="lineno"> 1140</span>&#160;    BOOST_CHECK(!counterSetWCountWInvalidParentCategory2);</div><div class="line"><a name="l01141"></a><span class="lineno"> 1141</span>&#160;</div><div class="line"><a name="l01142"></a><span class="lineno"> 1142</span>&#160;    <span class="comment">// Register a category for testing</span></div><div class="line"><a name="l01143"></a><span class="lineno"> 1143</span>&#160;    <span class="keyword">const</span> std::string categoryName = <span class="stringliteral">&quot;some_category&quot;</span>;</div><div class="line"><a name="l01144"></a><span class="lineno"> 1144</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml">Category</a>* category       = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01145"></a><span class="lineno"> 1145</span>&#160;    BOOST_CHECK_NO_THROW(category = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a220a83a3433b6da68d41efe07c39b552">RegisterCategory</a>(categoryName));</div><div class="line"><a name="l01146"></a><span class="lineno"> 1146</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 1);</div><div class="line"><a name="l01147"></a><span class="lineno"> 1147</span>&#160;    BOOST_CHECK(category);</div><div class="line"><a name="l01148"></a><span class="lineno"> 1148</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == categoryName);</div><div class="line"><a name="l01149"></a><span class="lineno"> 1149</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.empty());</div><div class="line"><a name="l01150"></a><span class="lineno"> 1150</span>&#160;</div><div class="line"><a name="l01151"></a><span class="lineno"> 1151</span>&#160;    <span class="comment">// Register a new counter set with count and valid parent category</span></div><div class="line"><a name="l01152"></a><span class="lineno"> 1152</span>&#160;    <span class="keyword">const</span> std::string counterSetWCountWValidParentCategoryName = <span class="stringliteral">&quot;some_counter_set_with_count_&quot;</span></div><div class="line"><a name="l01153"></a><span class="lineno"> 1153</span>&#160;                                                                 <span class="stringliteral">&quot;with_valid_parent_category&quot;</span>;</div><div class="line"><a name="l01154"></a><span class="lineno"> 1154</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml">CounterSet</a>* counterSetWCountWValidParentCategory = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01155"></a><span class="lineno"> 1155</span>&#160;    BOOST_CHECK_NO_THROW(counterSetWCountWValidParentCategory = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a161604d904508d5b86b459c2c2ace4be">RegisterCounterSet</a>(</div><div class="line"><a name="l01156"></a><span class="lineno"> 1156</span>&#160;                             counterSetWCountWValidParentCategoryName, 42, categoryName));</div><div class="line"><a name="l01157"></a><span class="lineno"> 1157</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ae3b7dbaa7317dacbcec25f30f6a16075">GetCounterSetCount</a>() == 3);</div><div class="line"><a name="l01158"></a><span class="lineno"> 1158</span>&#160;    BOOST_CHECK(counterSetWCountWValidParentCategory);</div><div class="line"><a name="l01159"></a><span class="lineno"> 1159</span>&#160;    BOOST_CHECK(counterSetWCountWValidParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == counterSetWCountWValidParentCategoryName);</div><div class="line"><a name="l01160"></a><span class="lineno"> 1160</span>&#160;    BOOST_CHECK(counterSetWCountWValidParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt;= 1);</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160;    BOOST_CHECK(counterSetWCountWValidParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt; counterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01162"></a><span class="lineno"> 1162</span>&#160;    BOOST_CHECK(counterSetWCountWValidParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt; counterSetWCount-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01163"></a><span class="lineno"> 1163</span>&#160;    BOOST_CHECK(counterSetWCountWValidParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#ab4676c63d2f2d14922a8f7cc768d1618">m_Count</a> == 42);</div><div class="line"><a name="l01164"></a><span class="lineno"> 1164</span>&#160;</div><div class="line"><a name="l01165"></a><span class="lineno"> 1165</span>&#160;    <span class="comment">// Register a counter set associated to a category with invalid name</span></div><div class="line"><a name="l01166"></a><span class="lineno"> 1166</span>&#160;    <span class="keyword">const</span> std::string counterSetSameCategoryName = <span class="stringliteral">&quot;some_counter_set_with_invalid_parent_category&quot;</span>;</div><div class="line"><a name="l01167"></a><span class="lineno"> 1167</span>&#160;    <span class="keyword">const</span> std::string invalidCategoryName = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l01168"></a><span class="lineno"> 1168</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml">CounterSet</a>* counterSetSameCategory     = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01169"></a><span class="lineno"> 1169</span>&#160;    BOOST_CHECK_THROW(counterSetSameCategory =</div><div class="line"><a name="l01170"></a><span class="lineno"> 1170</span>&#160;                          counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a161604d904508d5b86b459c2c2ace4be">RegisterCounterSet</a>(counterSetSameCategoryName, 0, invalidCategoryName),</div><div class="line"><a name="l01171"></a><span class="lineno"> 1171</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01172"></a><span class="lineno"> 1172</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ae3b7dbaa7317dacbcec25f30f6a16075">GetCounterSetCount</a>() == 3);</div><div class="line"><a name="l01173"></a><span class="lineno"> 1173</span>&#160;    BOOST_CHECK(!counterSetSameCategory);</div><div class="line"><a name="l01174"></a><span class="lineno"> 1174</span>&#160;}</div><div class="line"><a name="l01175"></a><span class="lineno"> 1175</span>&#160;</div><div class="line"><a name="l01176"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#aae86e648486c328f7f21c2a8e0bbea08"> 1176</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckCounterDirectoryRegisterCounter)</div><div class="line"><a name="l01177"></a><span class="lineno"> 1177</span>&#160;{</div><div class="line"><a name="l01178"></a><span class="lineno"> 1178</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml">CounterDirectory</a> counterDirectory;</div><div class="line"><a name="l01179"></a><span class="lineno"> 1179</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 0);</div><div class="line"><a name="l01180"></a><span class="lineno"> 1180</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">GetDeviceCount</a>() == 0);</div><div class="line"><a name="l01181"></a><span class="lineno"> 1181</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ae3b7dbaa7317dacbcec25f30f6a16075">GetCounterSetCount</a>() == 0);</div><div class="line"><a name="l01182"></a><span class="lineno"> 1182</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 0);</div><div class="line"><a name="l01183"></a><span class="lineno"> 1183</span>&#160;</div><div class="line"><a name="l01184"></a><span class="lineno"> 1184</span>&#160;    <span class="comment">// Register a counter with an invalid parent category name</span></div><div class="line"><a name="l01185"></a><span class="lineno"> 1185</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml">Counter</a>* noCounter = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01186"></a><span class="lineno"> 1186</span>&#160;    BOOST_CHECK_THROW(noCounter =</div><div class="line"><a name="l01187"></a><span class="lineno"> 1187</span>&#160;                          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="l01188"></a><span class="lineno"> 1188</span>&#160;                                                           0,</div><div class="line"><a name="l01189"></a><span class="lineno"> 1189</span>&#160;                                                           <span class="stringliteral">&quot;&quot;</span>,</div><div class="line"><a name="l01190"></a><span class="lineno"> 1190</span>&#160;                                                           0,</div><div class="line"><a name="l01191"></a><span class="lineno"> 1191</span>&#160;                                                           1,</div><div class="line"><a name="l01192"></a><span class="lineno"> 1192</span>&#160;                                                           123.45f,</div><div class="line"><a name="l01193"></a><span class="lineno"> 1193</span>&#160;                                                           <span class="stringliteral">&quot;valid &quot;</span>,</div><div class="line"><a name="l01194"></a><span class="lineno"> 1194</span>&#160;                                                           <span class="stringliteral">&quot;name&quot;</span>),</div><div class="line"><a name="l01195"></a><span class="lineno"> 1195</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01196"></a><span class="lineno"> 1196</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 0);</div><div class="line"><a name="l01197"></a><span class="lineno"> 1197</span>&#160;    BOOST_CHECK(!noCounter);</div><div class="line"><a name="l01198"></a><span class="lineno"> 1198</span>&#160;</div><div class="line"><a name="l01199"></a><span class="lineno"> 1199</span>&#160;    <span class="comment">// Register a counter with an invalid parent category name</span></div><div class="line"><a name="l01200"></a><span class="lineno"> 1200</span>&#160;    BOOST_CHECK_THROW(noCounter = 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="l01201"></a><span class="lineno"> 1201</span>&#160;                                                                   1,</div><div class="line"><a name="l01202"></a><span class="lineno"> 1202</span>&#160;                                                                   <span class="stringliteral">&quot;invalid parent category&quot;</span>,</div><div class="line"><a name="l01203"></a><span class="lineno"> 1203</span>&#160;                                                                   0,</div><div class="line"><a name="l01204"></a><span class="lineno"> 1204</span>&#160;                                                                   1,</div><div class="line"><a name="l01205"></a><span class="lineno"> 1205</span>&#160;                                                                   123.45f,</div><div class="line"><a name="l01206"></a><span class="lineno"> 1206</span>&#160;                                                                   <span class="stringliteral">&quot;valid name&quot;</span>,</div><div class="line"><a name="l01207"></a><span class="lineno"> 1207</span>&#160;                                                                   <span class="stringliteral">&quot;valid description&quot;</span>),</div><div class="line"><a name="l01208"></a><span class="lineno"> 1208</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01209"></a><span class="lineno"> 1209</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 0);</div><div class="line"><a name="l01210"></a><span class="lineno"> 1210</span>&#160;    BOOST_CHECK(!noCounter);</div><div class="line"><a name="l01211"></a><span class="lineno"> 1211</span>&#160;</div><div class="line"><a name="l01212"></a><span class="lineno"> 1212</span>&#160;    <span class="comment">// Register a counter with an invalid class</span></div><div class="line"><a name="l01213"></a><span class="lineno"> 1213</span>&#160;    BOOST_CHECK_THROW(noCounter = 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="l01214"></a><span class="lineno"> 1214</span>&#160;                                                                   2,</div><div class="line"><a name="l01215"></a><span class="lineno"> 1215</span>&#160;                                                                   <span class="stringliteral">&quot;valid_parent_category&quot;</span>,</div><div class="line"><a name="l01216"></a><span class="lineno"> 1216</span>&#160;                                                                   2,</div><div class="line"><a name="l01217"></a><span class="lineno"> 1217</span>&#160;                                                                   1,</div><div class="line"><a name="l01218"></a><span class="lineno"> 1218</span>&#160;                                                                   123.45f,</div><div class="line"><a name="l01219"></a><span class="lineno"> 1219</span>&#160;                                                                   <span class="stringliteral">&quot;valid &quot;</span></div><div class="line"><a name="l01220"></a><span class="lineno"> 1220</span>&#160;                                                                   <span class="stringliteral">&quot;name&quot;</span>,</div><div class="line"><a name="l01221"></a><span class="lineno"> 1221</span>&#160;                                                                   <span class="stringliteral">&quot;valid description&quot;</span>),</div><div class="line"><a name="l01222"></a><span class="lineno"> 1222</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01223"></a><span class="lineno"> 1223</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 0);</div><div class="line"><a name="l01224"></a><span class="lineno"> 1224</span>&#160;    BOOST_CHECK(!noCounter);</div><div class="line"><a name="l01225"></a><span class="lineno"> 1225</span>&#160;</div><div class="line"><a name="l01226"></a><span class="lineno"> 1226</span>&#160;    <span class="comment">// Register a counter with an invalid interpolation</span></div><div class="line"><a name="l01227"></a><span class="lineno"> 1227</span>&#160;    BOOST_CHECK_THROW(noCounter = 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="l01228"></a><span class="lineno"> 1228</span>&#160;                                                                   4,</div><div class="line"><a name="l01229"></a><span class="lineno"> 1229</span>&#160;                                                                   <span class="stringliteral">&quot;valid_parent_category&quot;</span>,</div><div class="line"><a name="l01230"></a><span class="lineno"> 1230</span>&#160;                                                                   0,</div><div class="line"><a name="l01231"></a><span class="lineno"> 1231</span>&#160;                                                                   3,</div><div class="line"><a name="l01232"></a><span class="lineno"> 1232</span>&#160;                                                                   123.45f,</div><div class="line"><a name="l01233"></a><span class="lineno"> 1233</span>&#160;                                                                   <span class="stringliteral">&quot;valid &quot;</span></div><div class="line"><a name="l01234"></a><span class="lineno"> 1234</span>&#160;                                                                   <span class="stringliteral">&quot;name&quot;</span>,</div><div class="line"><a name="l01235"></a><span class="lineno"> 1235</span>&#160;                                                                   <span class="stringliteral">&quot;valid description&quot;</span>),</div><div class="line"><a name="l01236"></a><span class="lineno"> 1236</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 0);</div><div class="line"><a name="l01238"></a><span class="lineno"> 1238</span>&#160;    BOOST_CHECK(!noCounter);</div><div class="line"><a name="l01239"></a><span class="lineno"> 1239</span>&#160;</div><div class="line"><a name="l01240"></a><span class="lineno"> 1240</span>&#160;    <span class="comment">// Register a counter with an invalid multiplier</span></div><div class="line"><a name="l01241"></a><span class="lineno"> 1241</span>&#160;    BOOST_CHECK_THROW(noCounter = 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="l01242"></a><span class="lineno"> 1242</span>&#160;                                                                   5,</div><div class="line"><a name="l01243"></a><span class="lineno"> 1243</span>&#160;                                                                   <span class="stringliteral">&quot;valid_parent_category&quot;</span>,</div><div class="line"><a name="l01244"></a><span class="lineno"> 1244</span>&#160;                                                                   0,</div><div class="line"><a name="l01245"></a><span class="lineno"> 1245</span>&#160;                                                                   1,</div><div class="line"><a name="l01246"></a><span class="lineno"> 1246</span>&#160;                                                                   .0f,</div><div class="line"><a name="l01247"></a><span class="lineno"> 1247</span>&#160;                                                                   <span class="stringliteral">&quot;valid &quot;</span></div><div class="line"><a name="l01248"></a><span class="lineno"> 1248</span>&#160;                                                                   <span class="stringliteral">&quot;name&quot;</span>,</div><div class="line"><a name="l01249"></a><span class="lineno"> 1249</span>&#160;                                                                   <span class="stringliteral">&quot;valid description&quot;</span>),</div><div class="line"><a name="l01250"></a><span class="lineno"> 1250</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01251"></a><span class="lineno"> 1251</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 0);</div><div class="line"><a name="l01252"></a><span class="lineno"> 1252</span>&#160;    BOOST_CHECK(!noCounter);</div><div class="line"><a name="l01253"></a><span class="lineno"> 1253</span>&#160;</div><div class="line"><a name="l01254"></a><span class="lineno"> 1254</span>&#160;    <span class="comment">// Register a counter with an invalid name</span></div><div class="line"><a name="l01255"></a><span class="lineno"> 1255</span>&#160;    BOOST_CHECK_THROW(</div><div class="line"><a name="l01256"></a><span class="lineno"> 1256</span>&#160;        noCounter = 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="l01257"></a><span class="lineno"> 1257</span>&#160;                                                     6,</div><div class="line"><a name="l01258"></a><span class="lineno"> 1258</span>&#160;                                                     <span class="stringliteral">&quot;valid_parent_category&quot;</span>,</div><div class="line"><a name="l01259"></a><span class="lineno"> 1259</span>&#160;                                                     0,</div><div class="line"><a name="l01260"></a><span class="lineno"> 1260</span>&#160;                                                     1,</div><div class="line"><a name="l01261"></a><span class="lineno"> 1261</span>&#160;                                                     123.45f,</div><div class="line"><a name="l01262"></a><span class="lineno"> 1262</span>&#160;                                                     <span class="stringliteral">&quot;&quot;</span>,</div><div class="line"><a name="l01263"></a><span class="lineno"> 1263</span>&#160;                                                     <span class="stringliteral">&quot;valid description&quot;</span>),</div><div class="line"><a name="l01264"></a><span class="lineno"> 1264</span>&#160;        <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01265"></a><span class="lineno"> 1265</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 0);</div><div class="line"><a name="l01266"></a><span class="lineno"> 1266</span>&#160;    BOOST_CHECK(!noCounter);</div><div class="line"><a name="l01267"></a><span class="lineno"> 1267</span>&#160;</div><div class="line"><a name="l01268"></a><span class="lineno"> 1268</span>&#160;    <span class="comment">// Register a counter with an invalid name</span></div><div class="line"><a name="l01269"></a><span class="lineno"> 1269</span>&#160;    BOOST_CHECK_THROW(noCounter = 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="l01270"></a><span class="lineno"> 1270</span>&#160;                                                                   7,</div><div class="line"><a name="l01271"></a><span class="lineno"> 1271</span>&#160;                                                                   <span class="stringliteral">&quot;valid_parent_category&quot;</span>,</div><div class="line"><a name="l01272"></a><span class="lineno"> 1272</span>&#160;                                                                   0,</div><div class="line"><a name="l01273"></a><span class="lineno"> 1273</span>&#160;                                                                   1,</div><div class="line"><a name="l01274"></a><span class="lineno"> 1274</span>&#160;                                                                   123.45f,</div><div class="line"><a name="l01275"></a><span class="lineno"> 1275</span>&#160;                                                                   <span class="stringliteral">&quot;invalid nam€&quot;</span>,</div><div class="line"><a name="l01276"></a><span class="lineno"> 1276</span>&#160;                                                                   <span class="stringliteral">&quot;valid description&quot;</span>),</div><div class="line"><a name="l01277"></a><span class="lineno"> 1277</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01278"></a><span class="lineno"> 1278</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 0);</div><div class="line"><a name="l01279"></a><span class="lineno"> 1279</span>&#160;    BOOST_CHECK(!noCounter);</div><div class="line"><a name="l01280"></a><span class="lineno"> 1280</span>&#160;</div><div class="line"><a name="l01281"></a><span class="lineno"> 1281</span>&#160;    <span class="comment">// Register a counter with an invalid description</span></div><div class="line"><a name="l01282"></a><span class="lineno"> 1282</span>&#160;    BOOST_CHECK_THROW(noCounter =</div><div class="line"><a name="l01283"></a><span class="lineno"> 1283</span>&#160;                          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="l01284"></a><span class="lineno"> 1284</span>&#160;                                                           8,</div><div class="line"><a name="l01285"></a><span class="lineno"> 1285</span>&#160;                                                           <span class="stringliteral">&quot;valid_parent_category&quot;</span>,</div><div class="line"><a name="l01286"></a><span class="lineno"> 1286</span>&#160;                                                           0,</div><div class="line"><a name="l01287"></a><span class="lineno"> 1287</span>&#160;                                                           1,</div><div class="line"><a name="l01288"></a><span class="lineno"> 1288</span>&#160;                                                           123.45f,</div><div class="line"><a name="l01289"></a><span class="lineno"> 1289</span>&#160;                                                           <span class="stringliteral">&quot;valid name&quot;</span>,</div><div class="line"><a name="l01290"></a><span class="lineno"> 1290</span>&#160;                                                           <span class="stringliteral">&quot;&quot;</span>),</div><div class="line"><a name="l01291"></a><span class="lineno"> 1291</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01292"></a><span class="lineno"> 1292</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 0);</div><div class="line"><a name="l01293"></a><span class="lineno"> 1293</span>&#160;    BOOST_CHECK(!noCounter);</div><div class="line"><a name="l01294"></a><span class="lineno"> 1294</span>&#160;</div><div class="line"><a name="l01295"></a><span class="lineno"> 1295</span>&#160;    <span class="comment">// Register a counter with an invalid description</span></div><div class="line"><a name="l01296"></a><span class="lineno"> 1296</span>&#160;    BOOST_CHECK_THROW(noCounter = 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="l01297"></a><span class="lineno"> 1297</span>&#160;                                                                   9,</div><div class="line"><a name="l01298"></a><span class="lineno"> 1298</span>&#160;                                                                   <span class="stringliteral">&quot;valid_parent_category&quot;</span>,</div><div class="line"><a name="l01299"></a><span class="lineno"> 1299</span>&#160;                                                                   0,</div><div class="line"><a name="l01300"></a><span class="lineno"> 1300</span>&#160;                                                                   1,</div><div class="line"><a name="l01301"></a><span class="lineno"> 1301</span>&#160;                                                                   123.45f,</div><div class="line"><a name="l01302"></a><span class="lineno"> 1302</span>&#160;                                                                   <span class="stringliteral">&quot;valid &quot;</span></div><div class="line"><a name="l01303"></a><span class="lineno"> 1303</span>&#160;                                                                   <span class="stringliteral">&quot;name&quot;</span>,</div><div class="line"><a name="l01304"></a><span class="lineno"> 1304</span>&#160;                                                                   <span class="stringliteral">&quot;inv@lid description&quot;</span>),</div><div class="line"><a name="l01305"></a><span class="lineno"> 1305</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01306"></a><span class="lineno"> 1306</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 0);</div><div class="line"><a name="l01307"></a><span class="lineno"> 1307</span>&#160;    BOOST_CHECK(!noCounter);</div><div class="line"><a name="l01308"></a><span class="lineno"> 1308</span>&#160;</div><div class="line"><a name="l01309"></a><span class="lineno"> 1309</span>&#160;    <span class="comment">// Register a counter with an invalid unit2</span></div><div class="line"><a name="l01310"></a><span class="lineno"> 1310</span>&#160;    BOOST_CHECK_THROW(noCounter = 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="l01311"></a><span class="lineno"> 1311</span>&#160;                                                                   10,</div><div class="line"><a name="l01312"></a><span class="lineno"> 1312</span>&#160;                                                                   <span class="stringliteral">&quot;valid_parent_category&quot;</span>,</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160;                                                                   0,</div><div class="line"><a name="l01314"></a><span class="lineno"> 1314</span>&#160;                                                                   1,</div><div class="line"><a name="l01315"></a><span class="lineno"> 1315</span>&#160;                                                                   123.45f,</div><div class="line"><a name="l01316"></a><span class="lineno"> 1316</span>&#160;                                                                   <span class="stringliteral">&quot;valid name&quot;</span>,</div><div class="line"><a name="l01317"></a><span class="lineno"> 1317</span>&#160;                                                                   <span class="stringliteral">&quot;valid description&quot;</span>,</div><div class="line"><a name="l01318"></a><span class="lineno"> 1318</span>&#160;                                                                   std::string(<span class="stringliteral">&quot;Mb/s2&quot;</span>)),</div><div class="line"><a name="l01319"></a><span class="lineno"> 1319</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01320"></a><span class="lineno"> 1320</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 0);</div><div class="line"><a name="l01321"></a><span class="lineno"> 1321</span>&#160;    BOOST_CHECK(!noCounter);</div><div class="line"><a name="l01322"></a><span class="lineno"> 1322</span>&#160;</div><div class="line"><a name="l01323"></a><span class="lineno"> 1323</span>&#160;    <span class="comment">// Register a counter with a non-existing parent category name</span></div><div class="line"><a name="l01324"></a><span class="lineno"> 1324</span>&#160;    BOOST_CHECK_THROW(noCounter = 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="l01325"></a><span class="lineno"> 1325</span>&#160;                                                                   11,</div><div class="line"><a name="l01326"></a><span class="lineno"> 1326</span>&#160;                                                                   <span class="stringliteral">&quot;invalid_parent_category&quot;</span>,</div><div class="line"><a name="l01327"></a><span class="lineno"> 1327</span>&#160;                                                                   0,</div><div class="line"><a name="l01328"></a><span class="lineno"> 1328</span>&#160;                                                                   1,</div><div class="line"><a name="l01329"></a><span class="lineno"> 1329</span>&#160;                                                                   123.45f,</div><div class="line"><a name="l01330"></a><span class="lineno"> 1330</span>&#160;                                                                   <span class="stringliteral">&quot;valid name&quot;</span>,</div><div class="line"><a name="l01331"></a><span class="lineno"> 1331</span>&#160;                                                                   <span class="stringliteral">&quot;valid description&quot;</span>),</div><div class="line"><a name="l01332"></a><span class="lineno"> 1332</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01333"></a><span class="lineno"> 1333</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 0);</div><div class="line"><a name="l01334"></a><span class="lineno"> 1334</span>&#160;    BOOST_CHECK(!noCounter);</div><div class="line"><a name="l01335"></a><span class="lineno"> 1335</span>&#160;</div><div class="line"><a name="l01336"></a><span class="lineno"> 1336</span>&#160;    <span class="comment">// Try getting an unregistered counter</span></div><div class="line"><a name="l01337"></a><span class="lineno"> 1337</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml">Counter</a>* unregisteredCounter = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#aefdd6df4feb698935d16311be966fda5">GetCounter</a>(9999);</div><div class="line"><a name="l01338"></a><span class="lineno"> 1338</span>&#160;    BOOST_CHECK(!unregisteredCounter);</div><div class="line"><a name="l01339"></a><span class="lineno"> 1339</span>&#160;</div><div class="line"><a name="l01340"></a><span class="lineno"> 1340</span>&#160;    <span class="comment">// Register a category for testing</span></div><div class="line"><a name="l01341"></a><span class="lineno"> 1341</span>&#160;    <span class="keyword">const</span> std::string categoryName = <span class="stringliteral">&quot;some_category&quot;</span>;</div><div class="line"><a name="l01342"></a><span class="lineno"> 1342</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml">Category</a>* category       = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01343"></a><span class="lineno"> 1343</span>&#160;    BOOST_CHECK_NO_THROW(category = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a220a83a3433b6da68d41efe07c39b552">RegisterCategory</a>(categoryName));</div><div class="line"><a name="l01344"></a><span class="lineno"> 1344</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 1);</div><div class="line"><a name="l01345"></a><span class="lineno"> 1345</span>&#160;    BOOST_CHECK(category);</div><div class="line"><a name="l01346"></a><span class="lineno"> 1346</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == categoryName);</div><div class="line"><a name="l01347"></a><span class="lineno"> 1347</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.empty());</div><div class="line"><a name="l01348"></a><span class="lineno"> 1348</span>&#160;</div><div class="line"><a name="l01349"></a><span class="lineno"> 1349</span>&#160;    <span class="comment">// Register a counter with a valid parent category name</span></div><div class="line"><a name="l01350"></a><span class="lineno"> 1350</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml">Counter</a>* counter = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01351"></a><span class="lineno"> 1351</span>&#160;    BOOST_CHECK_NO_THROW(</div><div class="line"><a name="l01352"></a><span class="lineno"> 1352</span>&#160;        counter = 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="l01353"></a><span class="lineno"> 1353</span>&#160;                                                   12,</div><div class="line"><a name="l01354"></a><span class="lineno"> 1354</span>&#160;                                                   categoryName,</div><div class="line"><a name="l01355"></a><span class="lineno"> 1355</span>&#160;                                                   0,</div><div class="line"><a name="l01356"></a><span class="lineno"> 1356</span>&#160;                                                   1,</div><div class="line"><a name="l01357"></a><span class="lineno"> 1357</span>&#160;                                                   123.45f,</div><div class="line"><a name="l01358"></a><span class="lineno"> 1358</span>&#160;                                                   <span class="stringliteral">&quot;valid name&quot;</span>,</div><div class="line"><a name="l01359"></a><span class="lineno"> 1359</span>&#160;                                                   <span class="stringliteral">&quot;valid description&quot;</span>));</div><div class="line"><a name="l01360"></a><span class="lineno"> 1360</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 1);</div><div class="line"><a name="l01361"></a><span class="lineno"> 1361</span>&#160;    BOOST_CHECK(counter);</div><div class="line"><a name="l01362"></a><span class="lineno"> 1362</span>&#160;    BOOST_CHECK(counter-&gt;m_MaxCounterUid == counter-&gt;m_Uid);</div><div class="line"><a name="l01363"></a><span class="lineno"> 1363</span>&#160;    BOOST_CHECK(counter-&gt;m_Class == 0);</div><div class="line"><a name="l01364"></a><span class="lineno"> 1364</span>&#160;    BOOST_CHECK(counter-&gt;m_Interpolation == 1);</div><div class="line"><a name="l01365"></a><span class="lineno"> 1365</span>&#160;    BOOST_CHECK(counter-&gt;m_Multiplier == 123.45f);</div><div class="line"><a name="l01366"></a><span class="lineno"> 1366</span>&#160;    BOOST_CHECK(counter-&gt;m_Name == <span class="stringliteral">&quot;valid name&quot;</span>);</div><div class="line"><a name="l01367"></a><span class="lineno"> 1367</span>&#160;    BOOST_CHECK(counter-&gt;m_Description == <span class="stringliteral">&quot;valid description&quot;</span>);</div><div class="line"><a name="l01368"></a><span class="lineno"> 1368</span>&#160;    BOOST_CHECK(counter-&gt;m_Units == <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01369"></a><span class="lineno"> 1369</span>&#160;    BOOST_CHECK(counter-&gt;m_DeviceUid == 0);</div><div class="line"><a name="l01370"></a><span class="lineno"> 1370</span>&#160;    BOOST_CHECK(counter-&gt;m_CounterSetUid == 0);</div><div class="line"><a name="l01371"></a><span class="lineno"> 1371</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.size() == 1);</div><div class="line"><a name="l01372"></a><span class="lineno"> 1372</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.back() == counter-&gt;m_Uid);</div><div class="line"><a name="l01373"></a><span class="lineno"> 1373</span>&#160;</div><div class="line"><a name="l01374"></a><span class="lineno"> 1374</span>&#160;    <span class="comment">// Register a counter with a name of a counter already registered for the given parent category name</span></div><div class="line"><a name="l01375"></a><span class="lineno"> 1375</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml">Counter</a>* counterSameName = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01376"></a><span class="lineno"> 1376</span>&#160;    BOOST_CHECK_THROW(counterSameName =</div><div class="line"><a name="l01377"></a><span class="lineno"> 1377</span>&#160;                          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="l01378"></a><span class="lineno"> 1378</span>&#160;                                                           13,</div><div class="line"><a name="l01379"></a><span class="lineno"> 1379</span>&#160;                                                           categoryName,</div><div class="line"><a name="l01380"></a><span class="lineno"> 1380</span>&#160;                                                           0,</div><div class="line"><a name="l01381"></a><span class="lineno"> 1381</span>&#160;                                                           0,</div><div class="line"><a name="l01382"></a><span class="lineno"> 1382</span>&#160;                                                           1.0f,</div><div class="line"><a name="l01383"></a><span class="lineno"> 1383</span>&#160;                                                           <span class="stringliteral">&quot;valid name&quot;</span>,</div><div class="line"><a name="l01384"></a><span class="lineno"> 1384</span>&#160;                                                           <span class="stringliteral">&quot;valid description&quot;</span>,</div><div class="line"><a name="l01385"></a><span class="lineno"> 1385</span>&#160;                                                           std::string(<span class="stringliteral">&quot;description&quot;</span>)),</div><div class="line"><a name="l01386"></a><span class="lineno"> 1386</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01387"></a><span class="lineno"> 1387</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 1);</div><div class="line"><a name="l01388"></a><span class="lineno"> 1388</span>&#160;    BOOST_CHECK(!counterSameName);</div><div class="line"><a name="l01389"></a><span class="lineno"> 1389</span>&#160;</div><div class="line"><a name="l01390"></a><span class="lineno"> 1390</span>&#160;    <span class="comment">// Register a counter with a valid parent category name and units</span></div><div class="line"><a name="l01391"></a><span class="lineno"> 1391</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml">Counter</a>* counterWUnits = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160;    BOOST_CHECK_NO_THROW(counterWUnits = 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="l01393"></a><span class="lineno"> 1393</span>&#160;                                                                             14,</div><div class="line"><a name="l01394"></a><span class="lineno"> 1394</span>&#160;                                                                             categoryName,</div><div class="line"><a name="l01395"></a><span class="lineno"> 1395</span>&#160;                                                                             0,</div><div class="line"><a name="l01396"></a><span class="lineno"> 1396</span>&#160;                                                                             1,</div><div class="line"><a name="l01397"></a><span class="lineno"> 1397</span>&#160;                                                                             123.45f,</div><div class="line"><a name="l01398"></a><span class="lineno"> 1398</span>&#160;                                                                             <span class="stringliteral">&quot;valid name 2&quot;</span>,</div><div class="line"><a name="l01399"></a><span class="lineno"> 1399</span>&#160;                                                                             <span class="stringliteral">&quot;valid description&quot;</span>,</div><div class="line"><a name="l01400"></a><span class="lineno"> 1400</span>&#160;                                                                             std::string(<span class="stringliteral">&quot;Mnnsq2&quot;</span>)));    <span class="comment">// Units</span></div><div class="line"><a name="l01401"></a><span class="lineno"> 1401</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 2);</div><div class="line"><a name="l01402"></a><span class="lineno"> 1402</span>&#160;    BOOST_CHECK(counterWUnits);</div><div class="line"><a name="l01403"></a><span class="lineno"> 1403</span>&#160;    BOOST_CHECK(counterWUnits-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt; counter-&gt;m_Uid);</div><div class="line"><a name="l01404"></a><span class="lineno"> 1404</span>&#160;    BOOST_CHECK(counterWUnits-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#ae4a480dde76c2182ba3611d43cc0d109">m_MaxCounterUid</a> == counterWUnits-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01405"></a><span class="lineno"> 1405</span>&#160;    BOOST_CHECK(counterWUnits-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a7aa5f39e2eddecaa9b1b5730c0481b11">m_Class</a> == 0);</div><div class="line"><a name="l01406"></a><span class="lineno"> 1406</span>&#160;    BOOST_CHECK(counterWUnits-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a69719c180aafcdf5a25f81a851c74809">m_Interpolation</a> == 1);</div><div class="line"><a name="l01407"></a><span class="lineno"> 1407</span>&#160;    BOOST_CHECK(counterWUnits-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#ad5399f5bba038956f1fbde241bc44096">m_Multiplier</a> == 123.45f);</div><div class="line"><a name="l01408"></a><span class="lineno"> 1408</span>&#160;    BOOST_CHECK(counterWUnits-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == <span class="stringliteral">&quot;valid name 2&quot;</span>);</div><div class="line"><a name="l01409"></a><span class="lineno"> 1409</span>&#160;    BOOST_CHECK(counterWUnits-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a5edaa2326b1410fae32c5253ed0188d8">m_Description</a> == <span class="stringliteral">&quot;valid description&quot;</span>);</div><div class="line"><a name="l01410"></a><span class="lineno"> 1410</span>&#160;    BOOST_CHECK(counterWUnits-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a84079a1f364c37c59230bc52332d8d19">m_Units</a> == <span class="stringliteral">&quot;Mnnsq2&quot;</span>);</div><div class="line"><a name="l01411"></a><span class="lineno"> 1411</span>&#160;    BOOST_CHECK(counterWUnits-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#af734583ef63236e643f64bc6f3f93c3d">m_DeviceUid</a> == 0);</div><div class="line"><a name="l01412"></a><span class="lineno"> 1412</span>&#160;    BOOST_CHECK(counterWUnits-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a3b95c70c6d9c60fe7b25a4fa9bf20ea0">m_CounterSetUid</a> == 0);</div><div class="line"><a name="l01413"></a><span class="lineno"> 1413</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.size() == 2);</div><div class="line"><a name="l01414"></a><span class="lineno"> 1414</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.back() == counterWUnits-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01415"></a><span class="lineno"> 1415</span>&#160;</div><div class="line"><a name="l01416"></a><span class="lineno"> 1416</span>&#160;    <span class="comment">// Register a counter with a valid parent category name and not associated with a device</span></div><div class="line"><a name="l01417"></a><span class="lineno"> 1417</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml">Counter</a>* counterWoDevice = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01418"></a><span class="lineno"> 1418</span>&#160;    BOOST_CHECK_NO_THROW(counterWoDevice = 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="l01419"></a><span class="lineno"> 1419</span>&#160;                                                                            26,</div><div class="line"><a name="l01420"></a><span class="lineno"> 1420</span>&#160;                                                                            categoryName,</div><div class="line"><a name="l01421"></a><span class="lineno"> 1421</span>&#160;                                                                            0,</div><div class="line"><a name="l01422"></a><span class="lineno"> 1422</span>&#160;                                                                            1,</div><div class="line"><a name="l01423"></a><span class="lineno"> 1423</span>&#160;                                                                            123.45f,</div><div class="line"><a name="l01424"></a><span class="lineno"> 1424</span>&#160;                                                                            <span class="stringliteral">&quot;valid name 3&quot;</span>,</div><div class="line"><a name="l01425"></a><span class="lineno"> 1425</span>&#160;                                                                            <span class="stringliteral">&quot;valid description&quot;</span>,</div><div class="line"><a name="l01426"></a><span class="lineno"> 1426</span>&#160;                                                                            <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(),<span class="comment">// Units</span></div><div class="line"><a name="l01427"></a><span class="lineno"> 1427</span>&#160;                                                                            <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(),<span class="comment">// Number of cores</span></div><div class="line"><a name="l01428"></a><span class="lineno"> 1428</span>&#160;                                                                            0));                   <span class="comment">// Device UID</span></div><div class="line"><a name="l01429"></a><span class="lineno"> 1429</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 3);</div><div class="line"><a name="l01430"></a><span class="lineno"> 1430</span>&#160;    BOOST_CHECK(counterWoDevice);</div><div class="line"><a name="l01431"></a><span class="lineno"> 1431</span>&#160;    BOOST_CHECK(counterWoDevice-&gt;m_Uid &gt; counter-&gt;m_Uid);</div><div class="line"><a name="l01432"></a><span class="lineno"> 1432</span>&#160;    BOOST_CHECK(counterWoDevice-&gt;m_MaxCounterUid == counterWoDevice-&gt;m_Uid);</div><div class="line"><a name="l01433"></a><span class="lineno"> 1433</span>&#160;    BOOST_CHECK(counterWoDevice-&gt;m_Class == 0);</div><div class="line"><a name="l01434"></a><span class="lineno"> 1434</span>&#160;    BOOST_CHECK(counterWoDevice-&gt;m_Interpolation == 1);</div><div class="line"><a name="l01435"></a><span class="lineno"> 1435</span>&#160;    BOOST_CHECK(counterWoDevice-&gt;m_Multiplier == 123.45f);</div><div class="line"><a name="l01436"></a><span class="lineno"> 1436</span>&#160;    BOOST_CHECK(counterWoDevice-&gt;m_Name == <span class="stringliteral">&quot;valid name 3&quot;</span>);</div><div class="line"><a name="l01437"></a><span class="lineno"> 1437</span>&#160;    BOOST_CHECK(counterWoDevice-&gt;m_Description == <span class="stringliteral">&quot;valid description&quot;</span>);</div><div class="line"><a name="l01438"></a><span class="lineno"> 1438</span>&#160;    BOOST_CHECK(counterWoDevice-&gt;m_Units == <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01439"></a><span class="lineno"> 1439</span>&#160;    BOOST_CHECK(counterWoDevice-&gt;m_DeviceUid == 0);</div><div class="line"><a name="l01440"></a><span class="lineno"> 1440</span>&#160;    BOOST_CHECK(counterWoDevice-&gt;m_CounterSetUid == 0);</div><div class="line"><a name="l01441"></a><span class="lineno"> 1441</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.size() == 3);</div><div class="line"><a name="l01442"></a><span class="lineno"> 1442</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.back() == counterWoDevice-&gt;m_Uid);</div><div class="line"><a name="l01443"></a><span class="lineno"> 1443</span>&#160;</div><div class="line"><a name="l01444"></a><span class="lineno"> 1444</span>&#160;    <span class="comment">// Register a counter with a valid parent category name and associated to an invalid device</span></div><div class="line"><a name="l01445"></a><span class="lineno"> 1445</span>&#160;    BOOST_CHECK_THROW(noCounter = 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="l01446"></a><span class="lineno"> 1446</span>&#160;                                                                   15,</div><div class="line"><a name="l01447"></a><span class="lineno"> 1447</span>&#160;                                                                   categoryName,</div><div class="line"><a name="l01448"></a><span class="lineno"> 1448</span>&#160;                                                                   0,</div><div class="line"><a name="l01449"></a><span class="lineno"> 1449</span>&#160;                                                                   1,</div><div class="line"><a name="l01450"></a><span class="lineno"> 1450</span>&#160;                                                                   123.45f,</div><div class="line"><a name="l01451"></a><span class="lineno"> 1451</span>&#160;                                                                   <span class="stringliteral">&quot;valid name 4&quot;</span>,</div><div class="line"><a name="l01452"></a><span class="lineno"> 1452</span>&#160;                                                                   <span class="stringliteral">&quot;valid description&quot;</span>,</div><div class="line"><a name="l01453"></a><span class="lineno"> 1453</span>&#160;                                                                   <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(),    <span class="comment">// Units</span></div><div class="line"><a name="l01454"></a><span class="lineno"> 1454</span>&#160;                                                                   <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(),    <span class="comment">// Number of cores</span></div><div class="line"><a name="l01455"></a><span class="lineno"> 1455</span>&#160;                                                                   100),                      <span class="comment">// Device UID</span></div><div class="line"><a name="l01456"></a><span class="lineno"> 1456</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01457"></a><span class="lineno"> 1457</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 3);</div><div class="line"><a name="l01458"></a><span class="lineno"> 1458</span>&#160;    BOOST_CHECK(!noCounter);</div><div class="line"><a name="l01459"></a><span class="lineno"> 1459</span>&#160;</div><div class="line"><a name="l01460"></a><span class="lineno"> 1460</span>&#160;    <span class="comment">// Register a device for testing</span></div><div class="line"><a name="l01461"></a><span class="lineno"> 1461</span>&#160;    <span class="keyword">const</span> std::string deviceName = <span class="stringliteral">&quot;some_device&quot;</span>;</div><div class="line"><a name="l01462"></a><span class="lineno"> 1462</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml">Device</a>* device         = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01463"></a><span class="lineno"> 1463</span>&#160;    BOOST_CHECK_NO_THROW(device = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a6ec101239653ba9260e1362c5381e81d">RegisterDevice</a>(deviceName));</div><div class="line"><a name="l01464"></a><span class="lineno"> 1464</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">GetDeviceCount</a>() == 1);</div><div class="line"><a name="l01465"></a><span class="lineno"> 1465</span>&#160;    BOOST_CHECK(device);</div><div class="line"><a name="l01466"></a><span class="lineno"> 1466</span>&#160;    BOOST_CHECK(device-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == deviceName);</div><div class="line"><a name="l01467"></a><span class="lineno"> 1467</span>&#160;    BOOST_CHECK(device-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt;= 1);</div><div class="line"><a name="l01468"></a><span class="lineno"> 1468</span>&#160;    BOOST_CHECK(device-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a28e8394686112e495caf069eb46b44ca">m_Cores</a> == 0);</div><div class="line"><a name="l01469"></a><span class="lineno"> 1469</span>&#160;</div><div class="line"><a name="l01470"></a><span class="lineno"> 1470</span>&#160;    <span class="comment">// Register a counter with a valid parent category name and associated to a device</span></div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml">Counter</a>* counterWDevice = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01472"></a><span class="lineno"> 1472</span>&#160;    BOOST_CHECK_NO_THROW(counterWDevice = 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="l01473"></a><span class="lineno"> 1473</span>&#160;                                                                           16,</div><div class="line"><a name="l01474"></a><span class="lineno"> 1474</span>&#160;                                                                           categoryName,</div><div class="line"><a name="l01475"></a><span class="lineno"> 1475</span>&#160;                                                                           0,</div><div class="line"><a name="l01476"></a><span class="lineno"> 1476</span>&#160;                                                                           1,</div><div class="line"><a name="l01477"></a><span class="lineno"> 1477</span>&#160;                                                                           123.45f,</div><div class="line"><a name="l01478"></a><span class="lineno"> 1478</span>&#160;                                                                           <span class="stringliteral">&quot;valid name 5&quot;</span>,</div><div class="line"><a name="l01479"></a><span class="lineno"> 1479</span>&#160;                                                                           std::string(<span class="stringliteral">&quot;valid description&quot;</span>),</div><div class="line"><a name="l01480"></a><span class="lineno"> 1480</span>&#160;                                                                           <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(), <span class="comment">// Units</span></div><div class="line"><a name="l01481"></a><span class="lineno"> 1481</span>&#160;                                                                           <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(), <span class="comment">// Number of cores</span></div><div class="line"><a name="l01482"></a><span class="lineno"> 1482</span>&#160;                                                                           device-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>));        <span class="comment">// Device UID</span></div><div class="line"><a name="l01483"></a><span class="lineno"> 1483</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 4);</div><div class="line"><a name="l01484"></a><span class="lineno"> 1484</span>&#160;    BOOST_CHECK(counterWDevice);</div><div class="line"><a name="l01485"></a><span class="lineno"> 1485</span>&#160;    BOOST_CHECK(counterWDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt; counter-&gt;m_Uid);</div><div class="line"><a name="l01486"></a><span class="lineno"> 1486</span>&#160;    BOOST_CHECK(counterWDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#ae4a480dde76c2182ba3611d43cc0d109">m_MaxCounterUid</a> == counterWDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01487"></a><span class="lineno"> 1487</span>&#160;    BOOST_CHECK(counterWDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a7aa5f39e2eddecaa9b1b5730c0481b11">m_Class</a> == 0);</div><div class="line"><a name="l01488"></a><span class="lineno"> 1488</span>&#160;    BOOST_CHECK(counterWDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a69719c180aafcdf5a25f81a851c74809">m_Interpolation</a> == 1);</div><div class="line"><a name="l01489"></a><span class="lineno"> 1489</span>&#160;    BOOST_CHECK(counterWDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#ad5399f5bba038956f1fbde241bc44096">m_Multiplier</a> == 123.45f);</div><div class="line"><a name="l01490"></a><span class="lineno"> 1490</span>&#160;    BOOST_CHECK(counterWDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == <span class="stringliteral">&quot;valid name 5&quot;</span>);</div><div class="line"><a name="l01491"></a><span class="lineno"> 1491</span>&#160;    BOOST_CHECK(counterWDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a5edaa2326b1410fae32c5253ed0188d8">m_Description</a> == <span class="stringliteral">&quot;valid description&quot;</span>);</div><div class="line"><a name="l01492"></a><span class="lineno"> 1492</span>&#160;    BOOST_CHECK(counterWDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a84079a1f364c37c59230bc52332d8d19">m_Units</a> == <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01493"></a><span class="lineno"> 1493</span>&#160;    BOOST_CHECK(counterWDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#af734583ef63236e643f64bc6f3f93c3d">m_DeviceUid</a> == device-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01494"></a><span class="lineno"> 1494</span>&#160;    BOOST_CHECK(counterWDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a3b95c70c6d9c60fe7b25a4fa9bf20ea0">m_CounterSetUid</a> == 0);</div><div class="line"><a name="l01495"></a><span class="lineno"> 1495</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.size() == 4);</div><div class="line"><a name="l01496"></a><span class="lineno"> 1496</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.back() == counterWDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01497"></a><span class="lineno"> 1497</span>&#160;</div><div class="line"><a name="l01498"></a><span class="lineno"> 1498</span>&#160;    <span class="comment">// Register a counter with a valid parent category name and not associated with a counter set</span></div><div class="line"><a name="l01499"></a><span class="lineno"> 1499</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml">Counter</a>* counterWoCounterSet = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01500"></a><span class="lineno"> 1500</span>&#160;    BOOST_CHECK_NO_THROW(counterWoCounterSet = 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="l01501"></a><span class="lineno"> 1501</span>&#160;                                                                                17,</div><div class="line"><a name="l01502"></a><span class="lineno"> 1502</span>&#160;                                                                                categoryName,</div><div class="line"><a name="l01503"></a><span class="lineno"> 1503</span>&#160;                                                                                0,</div><div class="line"><a name="l01504"></a><span class="lineno"> 1504</span>&#160;                                                                                1,</div><div class="line"><a name="l01505"></a><span class="lineno"> 1505</span>&#160;                                                                                123.45f,</div><div class="line"><a name="l01506"></a><span class="lineno"> 1506</span>&#160;                                                                                <span class="stringliteral">&quot;valid name 6&quot;</span>,</div><div class="line"><a name="l01507"></a><span class="lineno"> 1507</span>&#160;                                                                                <span class="stringliteral">&quot;valid description&quot;</span>,</div><div class="line"><a name="l01508"></a><span class="lineno"> 1508</span>&#160;                                                                                <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(),<span class="comment">// Units</span></div><div class="line"><a name="l01509"></a><span class="lineno"> 1509</span>&#160;                                                                                <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(),<span class="comment">// No of cores</span></div><div class="line"><a name="l01510"></a><span class="lineno"> 1510</span>&#160;                                                                                <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(),<span class="comment">// Device UID</span></div><div class="line"><a name="l01511"></a><span class="lineno"> 1511</span>&#160;                                                                                0));               <span class="comment">// CounterSet UID</span></div><div class="line"><a name="l01512"></a><span class="lineno"> 1512</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 5);</div><div class="line"><a name="l01513"></a><span class="lineno"> 1513</span>&#160;    BOOST_CHECK(counterWoCounterSet);</div><div class="line"><a name="l01514"></a><span class="lineno"> 1514</span>&#160;    BOOST_CHECK(counterWoCounterSet-&gt;m_Uid &gt; counter-&gt;m_Uid);</div><div class="line"><a name="l01515"></a><span class="lineno"> 1515</span>&#160;    BOOST_CHECK(counterWoCounterSet-&gt;m_MaxCounterUid == counterWoCounterSet-&gt;m_Uid);</div><div class="line"><a name="l01516"></a><span class="lineno"> 1516</span>&#160;    BOOST_CHECK(counterWoCounterSet-&gt;m_Class == 0);</div><div class="line"><a name="l01517"></a><span class="lineno"> 1517</span>&#160;    BOOST_CHECK(counterWoCounterSet-&gt;m_Interpolation == 1);</div><div class="line"><a name="l01518"></a><span class="lineno"> 1518</span>&#160;    BOOST_CHECK(counterWoCounterSet-&gt;m_Multiplier == 123.45f);</div><div class="line"><a name="l01519"></a><span class="lineno"> 1519</span>&#160;    BOOST_CHECK(counterWoCounterSet-&gt;m_Name == <span class="stringliteral">&quot;valid name 6&quot;</span>);</div><div class="line"><a name="l01520"></a><span class="lineno"> 1520</span>&#160;    BOOST_CHECK(counterWoCounterSet-&gt;m_Description == <span class="stringliteral">&quot;valid description&quot;</span>);</div><div class="line"><a name="l01521"></a><span class="lineno"> 1521</span>&#160;    BOOST_CHECK(counterWoCounterSet-&gt;m_Units == <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01522"></a><span class="lineno"> 1522</span>&#160;    BOOST_CHECK(counterWoCounterSet-&gt;m_DeviceUid == 0);</div><div class="line"><a name="l01523"></a><span class="lineno"> 1523</span>&#160;    BOOST_CHECK(counterWoCounterSet-&gt;m_CounterSetUid == 0);</div><div class="line"><a name="l01524"></a><span class="lineno"> 1524</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.size() == 5);</div><div class="line"><a name="l01525"></a><span class="lineno"> 1525</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.back() == counterWoCounterSet-&gt;m_Uid);</div><div class="line"><a name="l01526"></a><span class="lineno"> 1526</span>&#160;</div><div class="line"><a name="l01527"></a><span class="lineno"> 1527</span>&#160;    <span class="comment">// Register a counter with a valid parent category name and associated to an invalid counter set</span></div><div class="line"><a name="l01528"></a><span class="lineno"> 1528</span>&#160;    BOOST_CHECK_THROW(noCounter = 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="l01529"></a><span class="lineno"> 1529</span>&#160;                                                                   18,</div><div class="line"><a name="l01530"></a><span class="lineno"> 1530</span>&#160;                                                                   categoryName,</div><div class="line"><a name="l01531"></a><span class="lineno"> 1531</span>&#160;                                                                   0,</div><div class="line"><a name="l01532"></a><span class="lineno"> 1532</span>&#160;                                                                   1,</div><div class="line"><a name="l01533"></a><span class="lineno"> 1533</span>&#160;                                                                   123.45f,</div><div class="line"><a name="l01534"></a><span class="lineno"> 1534</span>&#160;                                                                   <span class="stringliteral">&quot;valid &quot;</span>,</div><div class="line"><a name="l01535"></a><span class="lineno"> 1535</span>&#160;                                                                   <span class="stringliteral">&quot;name 7&quot;</span>,</div><div class="line"><a name="l01536"></a><span class="lineno"> 1536</span>&#160;                                                                   std::string(<span class="stringliteral">&quot;valid description&quot;</span>),</div><div class="line"><a name="l01537"></a><span class="lineno"> 1537</span>&#160;                                                                   <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(),    <span class="comment">// Units</span></div><div class="line"><a name="l01538"></a><span class="lineno"> 1538</span>&#160;                                                                   <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(),    <span class="comment">// Number of cores</span></div><div class="line"><a name="l01539"></a><span class="lineno"> 1539</span>&#160;                                                                   100),            <span class="comment">// Counter set UID</span></div><div class="line"><a name="l01540"></a><span class="lineno"> 1540</span>&#160;                      <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>);</div><div class="line"><a name="l01541"></a><span class="lineno"> 1541</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 5);</div><div class="line"><a name="l01542"></a><span class="lineno"> 1542</span>&#160;    BOOST_CHECK(!noCounter);</div><div class="line"><a name="l01543"></a><span class="lineno"> 1543</span>&#160;</div><div class="line"><a name="l01544"></a><span class="lineno"> 1544</span>&#160;    <span class="comment">// Register a counter with a valid parent category name and with a given number of cores</span></div><div class="line"><a name="l01545"></a><span class="lineno"> 1545</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml">Counter</a>* counterWNumberOfCores = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01546"></a><span class="lineno"> 1546</span>&#160;    uint16_t numberOfCores               = 15;</div><div class="line"><a name="l01547"></a><span class="lineno"> 1547</span>&#160;    BOOST_CHECK_NO_THROW(counterWNumberOfCores = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ab9756dfaf9b36cc51262369a27d1384f">RegisterCounter</a>(</div><div class="line"><a name="l01548"></a><span class="lineno"> 1548</span>&#160;                             armnn::profiling::BACKEND_ID, 50,</div><div class="line"><a name="l01549"></a><span class="lineno"> 1549</span>&#160;                             categoryName, 0, 1, 123.45f, <span class="stringliteral">&quot;valid name 8&quot;</span>, <span class="stringliteral">&quot;valid description&quot;</span>,</div><div class="line"><a name="l01550"></a><span class="lineno"> 1550</span>&#160;                             <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(),      <span class="comment">// Units</span></div><div class="line"><a name="l01551"></a><span class="lineno"> 1551</span>&#160;                             numberOfCores,               <span class="comment">// Number of cores</span></div><div class="line"><a name="l01552"></a><span class="lineno"> 1552</span>&#160;                             <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(),      <span class="comment">// Device UID</span></div><div class="line"><a name="l01553"></a><span class="lineno"> 1553</span>&#160;                             <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>()));    <span class="comment">// Counter set UID</span></div><div class="line"><a name="l01554"></a><span class="lineno"> 1554</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 20);</div><div class="line"><a name="l01555"></a><span class="lineno"> 1555</span>&#160;    BOOST_CHECK(counterWNumberOfCores);</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160;    BOOST_CHECK(counterWNumberOfCores-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt; counter-&gt;m_Uid);</div><div class="line"><a name="l01557"></a><span class="lineno"> 1557</span>&#160;    BOOST_CHECK(counterWNumberOfCores-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#ae4a480dde76c2182ba3611d43cc0d109">m_MaxCounterUid</a> == counterWNumberOfCores-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> + numberOfCores - 1);</div><div class="line"><a name="l01558"></a><span class="lineno"> 1558</span>&#160;    BOOST_CHECK(counterWNumberOfCores-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a7aa5f39e2eddecaa9b1b5730c0481b11">m_Class</a> == 0);</div><div class="line"><a name="l01559"></a><span class="lineno"> 1559</span>&#160;    BOOST_CHECK(counterWNumberOfCores-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a69719c180aafcdf5a25f81a851c74809">m_Interpolation</a> == 1);</div><div class="line"><a name="l01560"></a><span class="lineno"> 1560</span>&#160;    BOOST_CHECK(counterWNumberOfCores-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#ad5399f5bba038956f1fbde241bc44096">m_Multiplier</a> == 123.45f);</div><div class="line"><a name="l01561"></a><span class="lineno"> 1561</span>&#160;    BOOST_CHECK(counterWNumberOfCores-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == <span class="stringliteral">&quot;valid name 8&quot;</span>);</div><div class="line"><a name="l01562"></a><span class="lineno"> 1562</span>&#160;    BOOST_CHECK(counterWNumberOfCores-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a5edaa2326b1410fae32c5253ed0188d8">m_Description</a> == <span class="stringliteral">&quot;valid description&quot;</span>);</div><div class="line"><a name="l01563"></a><span class="lineno"> 1563</span>&#160;    BOOST_CHECK(counterWNumberOfCores-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a84079a1f364c37c59230bc52332d8d19">m_Units</a> == <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01564"></a><span class="lineno"> 1564</span>&#160;    BOOST_CHECK(counterWNumberOfCores-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#af734583ef63236e643f64bc6f3f93c3d">m_DeviceUid</a> == 0);</div><div class="line"><a name="l01565"></a><span class="lineno"> 1565</span>&#160;    BOOST_CHECK(counterWNumberOfCores-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a3b95c70c6d9c60fe7b25a4fa9bf20ea0">m_CounterSetUid</a> == 0);</div><div class="line"><a name="l01566"></a><span class="lineno"> 1566</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.size() == 20);</div><div class="line"><a name="l01567"></a><span class="lineno"> 1567</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; numberOfCores; i++)</div><div class="line"><a name="l01568"></a><span class="lineno"> 1568</span>&#160;    {</div><div class="line"><a name="l01569"></a><span class="lineno"> 1569</span>&#160;        BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>[category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.size() - numberOfCores + i] ==</div><div class="line"><a name="l01570"></a><span class="lineno"> 1570</span>&#160;                    counterWNumberOfCores-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> + i);</div><div class="line"><a name="l01571"></a><span class="lineno"> 1571</span>&#160;    }</div><div class="line"><a name="l01572"></a><span class="lineno"> 1572</span>&#160;</div><div class="line"><a name="l01573"></a><span class="lineno"> 1573</span>&#160;    <span class="comment">// Register a multi-core device for testing</span></div><div class="line"><a name="l01574"></a><span class="lineno"> 1574</span>&#160;    <span class="keyword">const</span> std::string multiCoreDeviceName = <span class="stringliteral">&quot;some_multi_core_device&quot;</span>;</div><div class="line"><a name="l01575"></a><span class="lineno"> 1575</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml">Device</a>* multiCoreDevice         = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01576"></a><span class="lineno"> 1576</span>&#160;    BOOST_CHECK_NO_THROW(multiCoreDevice = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a6ec101239653ba9260e1362c5381e81d">RegisterDevice</a>(multiCoreDeviceName, 4));</div><div class="line"><a name="l01577"></a><span class="lineno"> 1577</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">GetDeviceCount</a>() == 2);</div><div class="line"><a name="l01578"></a><span class="lineno"> 1578</span>&#160;    BOOST_CHECK(multiCoreDevice);</div><div class="line"><a name="l01579"></a><span class="lineno"> 1579</span>&#160;    BOOST_CHECK(multiCoreDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == multiCoreDeviceName);</div><div class="line"><a name="l01580"></a><span class="lineno"> 1580</span>&#160;    BOOST_CHECK(multiCoreDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt;= 1);</div><div class="line"><a name="l01581"></a><span class="lineno"> 1581</span>&#160;    BOOST_CHECK(multiCoreDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a28e8394686112e495caf069eb46b44ca">m_Cores</a> == 4);</div><div class="line"><a name="l01582"></a><span class="lineno"> 1582</span>&#160;</div><div class="line"><a name="l01583"></a><span class="lineno"> 1583</span>&#160;    <span class="comment">// Register a counter with a valid parent category name and associated to the multi-core device</span></div><div class="line"><a name="l01584"></a><span class="lineno"> 1584</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml">Counter</a>* counterWMultiCoreDevice = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01585"></a><span class="lineno"> 1585</span>&#160;    BOOST_CHECK_NO_THROW(counterWMultiCoreDevice = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ab9756dfaf9b36cc51262369a27d1384f">RegisterCounter</a>(</div><div class="line"><a name="l01586"></a><span class="lineno"> 1586</span>&#160;                             armnn::profiling::BACKEND_ID, 19, categoryName, 0, 1,</div><div class="line"><a name="l01587"></a><span class="lineno"> 1587</span>&#160;                             123.45f, <span class="stringliteral">&quot;valid name 9&quot;</span>, <span class="stringliteral">&quot;valid description&quot;</span>,</div><div class="line"><a name="l01588"></a><span class="lineno"> 1588</span>&#160;                             <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(),      <span class="comment">// Units</span></div><div class="line"><a name="l01589"></a><span class="lineno"> 1589</span>&#160;                             <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(),      <span class="comment">// Number of cores</span></div><div class="line"><a name="l01590"></a><span class="lineno"> 1590</span>&#160;                             multiCoreDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>,      <span class="comment">// Device UID</span></div><div class="line"><a name="l01591"></a><span class="lineno"> 1591</span>&#160;                             <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>()));    <span class="comment">// Counter set UID</span></div><div class="line"><a name="l01592"></a><span class="lineno"> 1592</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 24);</div><div class="line"><a name="l01593"></a><span class="lineno"> 1593</span>&#160;    BOOST_CHECK(counterWMultiCoreDevice);</div><div class="line"><a name="l01594"></a><span class="lineno"> 1594</span>&#160;    BOOST_CHECK(counterWMultiCoreDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt; counter-&gt;m_Uid);</div><div class="line"><a name="l01595"></a><span class="lineno"> 1595</span>&#160;    BOOST_CHECK(counterWMultiCoreDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#ae4a480dde76c2182ba3611d43cc0d109">m_MaxCounterUid</a> ==</div><div class="line"><a name="l01596"></a><span class="lineno"> 1596</span>&#160;                counterWMultiCoreDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> + multiCoreDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a28e8394686112e495caf069eb46b44ca">m_Cores</a> - 1);</div><div class="line"><a name="l01597"></a><span class="lineno"> 1597</span>&#160;    BOOST_CHECK(counterWMultiCoreDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a7aa5f39e2eddecaa9b1b5730c0481b11">m_Class</a> == 0);</div><div class="line"><a name="l01598"></a><span class="lineno"> 1598</span>&#160;    BOOST_CHECK(counterWMultiCoreDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a69719c180aafcdf5a25f81a851c74809">m_Interpolation</a> == 1);</div><div class="line"><a name="l01599"></a><span class="lineno"> 1599</span>&#160;    BOOST_CHECK(counterWMultiCoreDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#ad5399f5bba038956f1fbde241bc44096">m_Multiplier</a> == 123.45f);</div><div class="line"><a name="l01600"></a><span class="lineno"> 1600</span>&#160;    BOOST_CHECK(counterWMultiCoreDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == <span class="stringliteral">&quot;valid name 9&quot;</span>);</div><div class="line"><a name="l01601"></a><span class="lineno"> 1601</span>&#160;    BOOST_CHECK(counterWMultiCoreDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a5edaa2326b1410fae32c5253ed0188d8">m_Description</a> == <span class="stringliteral">&quot;valid description&quot;</span>);</div><div class="line"><a name="l01602"></a><span class="lineno"> 1602</span>&#160;    BOOST_CHECK(counterWMultiCoreDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a84079a1f364c37c59230bc52332d8d19">m_Units</a> == <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01603"></a><span class="lineno"> 1603</span>&#160;    BOOST_CHECK(counterWMultiCoreDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#af734583ef63236e643f64bc6f3f93c3d">m_DeviceUid</a> == multiCoreDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01604"></a><span class="lineno"> 1604</span>&#160;    BOOST_CHECK(counterWMultiCoreDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a3b95c70c6d9c60fe7b25a4fa9bf20ea0">m_CounterSetUid</a> == 0);</div><div class="line"><a name="l01605"></a><span class="lineno"> 1605</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.size() == 24);</div><div class="line"><a name="l01606"></a><span class="lineno"> 1606</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; 4; i++)</div><div class="line"><a name="l01607"></a><span class="lineno"> 1607</span>&#160;    {</div><div class="line"><a name="l01608"></a><span class="lineno"> 1608</span>&#160;        BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>[category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.size() - 4 + i] == counterWMultiCoreDevice-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> + i);</div><div class="line"><a name="l01609"></a><span class="lineno"> 1609</span>&#160;    }</div><div class="line"><a name="l01610"></a><span class="lineno"> 1610</span>&#160;</div><div class="line"><a name="l01611"></a><span class="lineno"> 1611</span>&#160;    <span class="comment">// Register a multi-core device associate to a parent category for testing</span></div><div class="line"><a name="l01612"></a><span class="lineno"> 1612</span>&#160;    <span class="keyword">const</span> std::string multiCoreDeviceNameWParentCategory = <span class="stringliteral">&quot;some_multi_core_device_with_parent_category&quot;</span>;</div><div class="line"><a name="l01613"></a><span class="lineno"> 1613</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml">Device</a>* multiCoreDeviceWParentCategory         = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01614"></a><span class="lineno"> 1614</span>&#160;    BOOST_CHECK_NO_THROW(multiCoreDeviceWParentCategory =</div><div class="line"><a name="l01615"></a><span class="lineno"> 1615</span>&#160;                             counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a6ec101239653ba9260e1362c5381e81d">RegisterDevice</a>(multiCoreDeviceNameWParentCategory, 2, categoryName));</div><div class="line"><a name="l01616"></a><span class="lineno"> 1616</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">GetDeviceCount</a>() == 3);</div><div class="line"><a name="l01617"></a><span class="lineno"> 1617</span>&#160;    BOOST_CHECK(multiCoreDeviceWParentCategory);</div><div class="line"><a name="l01618"></a><span class="lineno"> 1618</span>&#160;    BOOST_CHECK(multiCoreDeviceWParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == multiCoreDeviceNameWParentCategory);</div><div class="line"><a name="l01619"></a><span class="lineno"> 1619</span>&#160;    BOOST_CHECK(multiCoreDeviceWParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt;= 1);</div><div class="line"><a name="l01620"></a><span class="lineno"> 1620</span>&#160;    BOOST_CHECK(multiCoreDeviceWParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a28e8394686112e495caf069eb46b44ca">m_Cores</a> == 2);</div><div class="line"><a name="l01621"></a><span class="lineno"> 1621</span>&#160;</div><div class="line"><a name="l01622"></a><span class="lineno"> 1622</span>&#160;    <span class="comment">// Register a counter with a valid parent category name and getting the number of cores of the multi-core device</span></div><div class="line"><a name="l01623"></a><span class="lineno"> 1623</span>&#160;    <span class="comment">// associated to that category</span></div><div class="line"><a name="l01624"></a><span class="lineno"> 1624</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml">Counter</a>* counterWMultiCoreDeviceWParentCategory = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01625"></a><span class="lineno"> 1625</span>&#160;    uint16_t numberOfCourse = multiCoreDeviceWParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a28e8394686112e495caf069eb46b44ca">m_Cores</a>;</div><div class="line"><a name="l01626"></a><span class="lineno"> 1626</span>&#160;    BOOST_CHECK_NO_THROW(counterWMultiCoreDeviceWParentCategory =</div><div class="line"><a name="l01627"></a><span class="lineno"> 1627</span>&#160;                                                counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ab9756dfaf9b36cc51262369a27d1384f">RegisterCounter</a>(</div><div class="line"><a name="l01628"></a><span class="lineno"> 1628</span>&#160;                                                    armnn::profiling::BACKEND_ID,</div><div class="line"><a name="l01629"></a><span class="lineno"> 1629</span>&#160;                                                    100,</div><div class="line"><a name="l01630"></a><span class="lineno"> 1630</span>&#160;                                                    categoryName,</div><div class="line"><a name="l01631"></a><span class="lineno"> 1631</span>&#160;                                                    0,</div><div class="line"><a name="l01632"></a><span class="lineno"> 1632</span>&#160;                                                    1,</div><div class="line"><a name="l01633"></a><span class="lineno"> 1633</span>&#160;                                                    123.45f,</div><div class="line"><a name="l01634"></a><span class="lineno"> 1634</span>&#160;                                                    <span class="stringliteral">&quot;valid name 10&quot;</span>,</div><div class="line"><a name="l01635"></a><span class="lineno"> 1635</span>&#160;                                                    <span class="stringliteral">&quot;valid description&quot;</span>,</div><div class="line"><a name="l01636"></a><span class="lineno"> 1636</span>&#160;                                                    <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(),  <span class="comment">// Units</span></div><div class="line"><a name="l01637"></a><span class="lineno"> 1637</span>&#160;                                                    numberOfCourse,          <span class="comment">// Number of cores</span></div><div class="line"><a name="l01638"></a><span class="lineno"> 1638</span>&#160;                                                    <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(),  <span class="comment">// Device UID</span></div><div class="line"><a name="l01639"></a><span class="lineno"> 1639</span>&#160;                                                    <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>()));<span class="comment">// Counter set UID</span></div><div class="line"><a name="l01640"></a><span class="lineno"> 1640</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 26);</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160;    BOOST_CHECK(counterWMultiCoreDeviceWParentCategory);</div><div class="line"><a name="l01642"></a><span class="lineno"> 1642</span>&#160;    BOOST_CHECK(counterWMultiCoreDeviceWParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt; counter-&gt;m_Uid);</div><div class="line"><a name="l01643"></a><span class="lineno"> 1643</span>&#160;    BOOST_CHECK(counterWMultiCoreDeviceWParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#ae4a480dde76c2182ba3611d43cc0d109">m_MaxCounterUid</a> ==</div><div class="line"><a name="l01644"></a><span class="lineno"> 1644</span>&#160;                counterWMultiCoreDeviceWParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> + multiCoreDeviceWParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a28e8394686112e495caf069eb46b44ca">m_Cores</a> - 1);</div><div class="line"><a name="l01645"></a><span class="lineno"> 1645</span>&#160;    BOOST_CHECK(counterWMultiCoreDeviceWParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a7aa5f39e2eddecaa9b1b5730c0481b11">m_Class</a> == 0);</div><div class="line"><a name="l01646"></a><span class="lineno"> 1646</span>&#160;    BOOST_CHECK(counterWMultiCoreDeviceWParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a69719c180aafcdf5a25f81a851c74809">m_Interpolation</a> == 1);</div><div class="line"><a name="l01647"></a><span class="lineno"> 1647</span>&#160;    BOOST_CHECK(counterWMultiCoreDeviceWParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#ad5399f5bba038956f1fbde241bc44096">m_Multiplier</a> == 123.45f);</div><div class="line"><a name="l01648"></a><span class="lineno"> 1648</span>&#160;    BOOST_CHECK(counterWMultiCoreDeviceWParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == <span class="stringliteral">&quot;valid name 10&quot;</span>);</div><div class="line"><a name="l01649"></a><span class="lineno"> 1649</span>&#160;    BOOST_CHECK(counterWMultiCoreDeviceWParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a5edaa2326b1410fae32c5253ed0188d8">m_Description</a> == <span class="stringliteral">&quot;valid description&quot;</span>);</div><div class="line"><a name="l01650"></a><span class="lineno"> 1650</span>&#160;    BOOST_CHECK(counterWMultiCoreDeviceWParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a84079a1f364c37c59230bc52332d8d19">m_Units</a> == <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01651"></a><span class="lineno"> 1651</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.size() == 26);</div><div class="line"><a name="l01652"></a><span class="lineno"> 1652</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i &lt; 2; i++)</div><div class="line"><a name="l01653"></a><span class="lineno"> 1653</span>&#160;    {</div><div class="line"><a name="l01654"></a><span class="lineno"> 1654</span>&#160;        BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>[category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.size() - 2 + i] ==</div><div class="line"><a name="l01655"></a><span class="lineno"> 1655</span>&#160;                    counterWMultiCoreDeviceWParentCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> + i);</div><div class="line"><a name="l01656"></a><span class="lineno"> 1656</span>&#160;    }</div><div class="line"><a name="l01657"></a><span class="lineno"> 1657</span>&#160;</div><div class="line"><a name="l01658"></a><span class="lineno"> 1658</span>&#160;    <span class="comment">// Register a counter set for testing</span></div><div class="line"><a name="l01659"></a><span class="lineno"> 1659</span>&#160;    <span class="keyword">const</span> std::string counterSetName = <span class="stringliteral">&quot;some_counter_set&quot;</span>;</div><div class="line"><a name="l01660"></a><span class="lineno"> 1660</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml">CounterSet</a>* counterSet     = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01661"></a><span class="lineno"> 1661</span>&#160;    BOOST_CHECK_NO_THROW(counterSet = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a161604d904508d5b86b459c2c2ace4be">RegisterCounterSet</a>(counterSetName));</div><div class="line"><a name="l01662"></a><span class="lineno"> 1662</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ae3b7dbaa7317dacbcec25f30f6a16075">GetCounterSetCount</a>() == 1);</div><div class="line"><a name="l01663"></a><span class="lineno"> 1663</span>&#160;    BOOST_CHECK(counterSet);</div><div class="line"><a name="l01664"></a><span class="lineno"> 1664</span>&#160;    BOOST_CHECK(counterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == counterSetName);</div><div class="line"><a name="l01665"></a><span class="lineno"> 1665</span>&#160;    BOOST_CHECK(counterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt;= 1);</div><div class="line"><a name="l01666"></a><span class="lineno"> 1666</span>&#160;    BOOST_CHECK(counterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#ab4676c63d2f2d14922a8f7cc768d1618">m_Count</a> == 0);</div><div class="line"><a name="l01667"></a><span class="lineno"> 1667</span>&#160;</div><div class="line"><a name="l01668"></a><span class="lineno"> 1668</span>&#160;    <span class="comment">// Register a counter with a valid parent category name and associated to a counter set</span></div><div class="line"><a name="l01669"></a><span class="lineno"> 1669</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml">Counter</a>* counterWCounterSet = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01670"></a><span class="lineno"> 1670</span>&#160;    BOOST_CHECK_NO_THROW(counterWCounterSet = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ab9756dfaf9b36cc51262369a27d1384f">RegisterCounter</a>(</div><div class="line"><a name="l01671"></a><span class="lineno"> 1671</span>&#160;                             armnn::profiling::BACKEND_ID, 300,</div><div class="line"><a name="l01672"></a><span class="lineno"> 1672</span>&#160;                             categoryName, 0, 1, 123.45f, <span class="stringliteral">&quot;valid name 11&quot;</span>, <span class="stringliteral">&quot;valid description&quot;</span>,</div><div class="line"><a name="l01673"></a><span class="lineno"> 1673</span>&#160;                             <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(),    <span class="comment">// Units</span></div><div class="line"><a name="l01674"></a><span class="lineno"> 1674</span>&#160;                             0,                         <span class="comment">// Number of cores</span></div><div class="line"><a name="l01675"></a><span class="lineno"> 1675</span>&#160;                             <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(),    <span class="comment">// Device UID</span></div><div class="line"><a name="l01676"></a><span class="lineno"> 1676</span>&#160;                             counterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>));       <span class="comment">// Counter set UID</span></div><div class="line"><a name="l01677"></a><span class="lineno"> 1677</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 27);</div><div class="line"><a name="l01678"></a><span class="lineno"> 1678</span>&#160;    BOOST_CHECK(counterWCounterSet);</div><div class="line"><a name="l01679"></a><span class="lineno"> 1679</span>&#160;    BOOST_CHECK(counterWCounterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a> &gt; counter-&gt;m_Uid);</div><div class="line"><a name="l01680"></a><span class="lineno"> 1680</span>&#160;    BOOST_CHECK(counterWCounterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#ae4a480dde76c2182ba3611d43cc0d109">m_MaxCounterUid</a> == counterWCounterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01681"></a><span class="lineno"> 1681</span>&#160;    BOOST_CHECK(counterWCounterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a7aa5f39e2eddecaa9b1b5730c0481b11">m_Class</a> == 0);</div><div class="line"><a name="l01682"></a><span class="lineno"> 1682</span>&#160;    BOOST_CHECK(counterWCounterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a69719c180aafcdf5a25f81a851c74809">m_Interpolation</a> == 1);</div><div class="line"><a name="l01683"></a><span class="lineno"> 1683</span>&#160;    BOOST_CHECK(counterWCounterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#ad5399f5bba038956f1fbde241bc44096">m_Multiplier</a> == 123.45f);</div><div class="line"><a name="l01684"></a><span class="lineno"> 1684</span>&#160;    BOOST_CHECK(counterWCounterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == <span class="stringliteral">&quot;valid name 11&quot;</span>);</div><div class="line"><a name="l01685"></a><span class="lineno"> 1685</span>&#160;    BOOST_CHECK(counterWCounterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a5edaa2326b1410fae32c5253ed0188d8">m_Description</a> == <span class="stringliteral">&quot;valid description&quot;</span>);</div><div class="line"><a name="l01686"></a><span class="lineno"> 1686</span>&#160;    BOOST_CHECK(counterWCounterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a84079a1f364c37c59230bc52332d8d19">m_Units</a> == <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01687"></a><span class="lineno"> 1687</span>&#160;    BOOST_CHECK(counterWCounterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#af734583ef63236e643f64bc6f3f93c3d">m_DeviceUid</a> == 0);</div><div class="line"><a name="l01688"></a><span class="lineno"> 1688</span>&#160;    BOOST_CHECK(counterWCounterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a3b95c70c6d9c60fe7b25a4fa9bf20ea0">m_CounterSetUid</a> == counterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01689"></a><span class="lineno"> 1689</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.size() == 27);</div><div class="line"><a name="l01690"></a><span class="lineno"> 1690</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.back() == counterWCounterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01691"></a><span class="lineno"> 1691</span>&#160;</div><div class="line"><a name="l01692"></a><span class="lineno"> 1692</span>&#160;    <span class="comment">// Register a counter with a valid parent category name and associated to a device and a counter set</span></div><div class="line"><a name="l01693"></a><span class="lineno"> 1693</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml">Counter</a>* counterWDeviceWCounterSet = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01694"></a><span class="lineno"> 1694</span>&#160;    BOOST_CHECK_NO_THROW(counterWDeviceWCounterSet = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ab9756dfaf9b36cc51262369a27d1384f">RegisterCounter</a>(</div><div class="line"><a name="l01695"></a><span class="lineno"> 1695</span>&#160;                             armnn::profiling::BACKEND_ID, 23,</div><div class="line"><a name="l01696"></a><span class="lineno"> 1696</span>&#160;                             categoryName, 0, 1, 123.45f, <span class="stringliteral">&quot;valid name 12&quot;</span>, <span class="stringliteral">&quot;valid description&quot;</span>,</div><div class="line"><a name="l01697"></a><span class="lineno"> 1697</span>&#160;                             <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(),    <span class="comment">// Units</span></div><div class="line"><a name="l01698"></a><span class="lineno"> 1698</span>&#160;                             1,                         <span class="comment">// Number of cores</span></div><div class="line"><a name="l01699"></a><span class="lineno"> 1699</span>&#160;                             device-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>,             <span class="comment">// Device UID</span></div><div class="line"><a name="l01700"></a><span class="lineno"> 1700</span>&#160;                             counterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>));       <span class="comment">// Counter set UID</span></div><div class="line"><a name="l01701"></a><span class="lineno"> 1701</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 28);</div><div class="line"><a name="l01702"></a><span class="lineno"> 1702</span>&#160;    BOOST_CHECK(counterWDeviceWCounterSet);</div><div class="line"><a name="l01703"></a><span class="lineno"> 1703</span>&#160;    BOOST_CHECK(counterWDeviceWCounterSet-&gt;m_Uid &gt; counter-&gt;m_Uid);</div><div class="line"><a name="l01704"></a><span class="lineno"> 1704</span>&#160;    BOOST_CHECK(counterWDeviceWCounterSet-&gt;m_MaxCounterUid == counterWDeviceWCounterSet-&gt;m_Uid);</div><div class="line"><a name="l01705"></a><span class="lineno"> 1705</span>&#160;    BOOST_CHECK(counterWDeviceWCounterSet-&gt;m_Class == 0);</div><div class="line"><a name="l01706"></a><span class="lineno"> 1706</span>&#160;    BOOST_CHECK(counterWDeviceWCounterSet-&gt;m_Interpolation == 1);</div><div class="line"><a name="l01707"></a><span class="lineno"> 1707</span>&#160;    BOOST_CHECK(counterWDeviceWCounterSet-&gt;m_Multiplier == 123.45f);</div><div class="line"><a name="l01708"></a><span class="lineno"> 1708</span>&#160;    BOOST_CHECK(counterWDeviceWCounterSet-&gt;m_Name == <span class="stringliteral">&quot;valid name 12&quot;</span>);</div><div class="line"><a name="l01709"></a><span class="lineno"> 1709</span>&#160;    BOOST_CHECK(counterWDeviceWCounterSet-&gt;m_Description == <span class="stringliteral">&quot;valid description&quot;</span>);</div><div class="line"><a name="l01710"></a><span class="lineno"> 1710</span>&#160;    BOOST_CHECK(counterWDeviceWCounterSet-&gt;m_Units == <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01711"></a><span class="lineno"> 1711</span>&#160;    BOOST_CHECK(counterWDeviceWCounterSet-&gt;m_DeviceUid == device-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01712"></a><span class="lineno"> 1712</span>&#160;    BOOST_CHECK(counterWDeviceWCounterSet-&gt;m_CounterSetUid == counterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01713"></a><span class="lineno"> 1713</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.size() == 28);</div><div class="line"><a name="l01714"></a><span class="lineno"> 1714</span>&#160;    BOOST_CHECK(category-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.back() == counterWDeviceWCounterSet-&gt;m_Uid);</div><div class="line"><a name="l01715"></a><span class="lineno"> 1715</span>&#160;</div><div class="line"><a name="l01716"></a><span class="lineno"> 1716</span>&#160;    <span class="comment">// Register another category for testing</span></div><div class="line"><a name="l01717"></a><span class="lineno"> 1717</span>&#160;    <span class="keyword">const</span> std::string anotherCategoryName = <span class="stringliteral">&quot;some_other_category&quot;</span>;</div><div class="line"><a name="l01718"></a><span class="lineno"> 1718</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml">Category</a>* anotherCategory       = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01719"></a><span class="lineno"> 1719</span>&#160;    BOOST_CHECK_NO_THROW(anotherCategory = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a220a83a3433b6da68d41efe07c39b552">RegisterCategory</a>(anotherCategoryName));</div><div class="line"><a name="l01720"></a><span class="lineno"> 1720</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">GetCategoryCount</a>() == 2);</div><div class="line"><a name="l01721"></a><span class="lineno"> 1721</span>&#160;    BOOST_CHECK(anotherCategory);</div><div class="line"><a name="l01722"></a><span class="lineno"> 1722</span>&#160;    BOOST_CHECK(anotherCategory != category);</div><div class="line"><a name="l01723"></a><span class="lineno"> 1723</span>&#160;    BOOST_CHECK(anotherCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#ab13844df5477a9ab8f13069e3d8abad6">m_Name</a> == anotherCategoryName);</div><div class="line"><a name="l01724"></a><span class="lineno"> 1724</span>&#160;    BOOST_CHECK(anotherCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.empty());</div><div class="line"><a name="l01725"></a><span class="lineno"> 1725</span>&#160;</div><div class="line"><a name="l01726"></a><span class="lineno"> 1726</span>&#160;    <span class="comment">// Register a counter to the other category</span></div><div class="line"><a name="l01727"></a><span class="lineno"> 1727</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter.xhtml">Counter</a>* anotherCounter = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l01728"></a><span class="lineno"> 1728</span>&#160;    BOOST_CHECK_NO_THROW(anotherCounter = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ab9756dfaf9b36cc51262369a27d1384f">RegisterCounter</a>(armnn::profiling::BACKEND_ID, 24,</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160;                                                                           anotherCategoryName, 1, 0, .00043f,</div><div class="line"><a name="l01730"></a><span class="lineno"> 1730</span>&#160;                                                                           <span class="stringliteral">&quot;valid name&quot;</span>, <span class="stringliteral">&quot;valid description&quot;</span>,</div><div class="line"><a name="l01731"></a><span class="lineno"> 1731</span>&#160;                                                                           <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(), <span class="comment">// Units</span></div><div class="line"><a name="l01732"></a><span class="lineno"> 1732</span>&#160;                                                                           <a class="code" href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a>(), <span class="comment">// Number of cores</span></div><div class="line"><a name="l01733"></a><span class="lineno"> 1733</span>&#160;                                                                           device-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>,          <span class="comment">// Device UID</span></div><div class="line"><a name="l01734"></a><span class="lineno"> 1734</span>&#160;                                                                           counterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>));    <span class="comment">// Counter set UID</span></div><div class="line"><a name="l01735"></a><span class="lineno"> 1735</span>&#160;    BOOST_CHECK(counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">GetCounterCount</a>() == 29);</div><div class="line"><a name="l01736"></a><span class="lineno"> 1736</span>&#160;    BOOST_CHECK(anotherCounter);</div><div class="line"><a name="l01737"></a><span class="lineno"> 1737</span>&#160;    BOOST_CHECK(anotherCounter-&gt;m_MaxCounterUid == anotherCounter-&gt;m_Uid);</div><div class="line"><a name="l01738"></a><span class="lineno"> 1738</span>&#160;    BOOST_CHECK(anotherCounter-&gt;m_Class == 1);</div><div class="line"><a name="l01739"></a><span class="lineno"> 1739</span>&#160;    BOOST_CHECK(anotherCounter-&gt;m_Interpolation == 0);</div><div class="line"><a name="l01740"></a><span class="lineno"> 1740</span>&#160;    BOOST_CHECK(anotherCounter-&gt;m_Multiplier == .00043f);</div><div class="line"><a name="l01741"></a><span class="lineno"> 1741</span>&#160;    BOOST_CHECK(anotherCounter-&gt;m_Name == <span class="stringliteral">&quot;valid name&quot;</span>);</div><div class="line"><a name="l01742"></a><span class="lineno"> 1742</span>&#160;    BOOST_CHECK(anotherCounter-&gt;m_Description == <span class="stringliteral">&quot;valid description&quot;</span>);</div><div class="line"><a name="l01743"></a><span class="lineno"> 1743</span>&#160;    BOOST_CHECK(anotherCounter-&gt;m_Units == <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l01744"></a><span class="lineno"> 1744</span>&#160;    BOOST_CHECK(anotherCounter-&gt;m_DeviceUid == device-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01745"></a><span class="lineno"> 1745</span>&#160;    BOOST_CHECK(anotherCounter-&gt;m_CounterSetUid == counterSet-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">m_Uid</a>);</div><div class="line"><a name="l01746"></a><span class="lineno"> 1746</span>&#160;    BOOST_CHECK(anotherCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.size() == 1);</div><div class="line"><a name="l01747"></a><span class="lineno"> 1747</span>&#160;    BOOST_CHECK(anotherCategory-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">m_Counters</a>.back() == anotherCounter-&gt;m_Uid);</div><div class="line"><a name="l01748"></a><span class="lineno"> 1748</span>&#160;}</div><div class="line"><a name="l01749"></a><span class="lineno"> 1749</span>&#160;</div><div class="line"><a name="l01750"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a494f5b638ff84fd1d0109d5f6cfae996"> 1750</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CounterSelectionCommandHandlerParseData)</div><div class="line"><a name="l01751"></a><span class="lineno"> 1751</span>&#160;{</div><div class="line"><a name="l01752"></a><span class="lineno"> 1752</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingStateMachine;</div><div class="line"><a name="l01753"></a><span class="lineno"> 1753</span>&#160;</div><div class="line"><a name="l01754"></a><span class="lineno"> 1754</span>&#160;    <span class="keyword">class </span>TestCaptureThread : <span class="keyword">public</span> <a class="code" href="classarmnn_1_1profiling_1_1_i_periodic_counter_capture.xhtml">IPeriodicCounterCapture</a></div><div class="line"><a name="l01755"></a><span class="lineno"> 1755</span>&#160;    {</div><div class="line"><a name="l01756"></a><span class="lineno"> 1756</span>&#160;        <span class="keywordtype">void</span> Start()<span class="keyword"> override</span></div><div class="line"><a name="l01757"></a><span class="lineno"> 1757</span>&#160;<span class="keyword">        </span>{}</div><div class="line"><a name="l01758"></a><span class="lineno"> 1758</span>&#160;        <span class="keywordtype">void</span> Stop()<span class="keyword"> override</span></div><div class="line"><a name="l01759"></a><span class="lineno"> 1759</span>&#160;<span class="keyword">        </span>{}</div><div class="line"><a name="l01760"></a><span class="lineno"> 1760</span>&#160;    };</div><div class="line"><a name="l01761"></a><span class="lineno"> 1761</span>&#160;</div><div class="line"><a name="l01762"></a><span class="lineno"> 1762</span>&#160;    <span class="keyword">class </span>TestReadCounterValues : <span class="keyword">public</span> <a class="code" href="classarmnn_1_1profiling_1_1_i_read_counter_values.xhtml">IReadCounterValues</a></div><div class="line"><a name="l01763"></a><span class="lineno"> 1763</span>&#160;    {</div><div class="line"><a name="l01764"></a><span class="lineno"> 1764</span>&#160;        <span class="keywordtype">bool</span> IsCounterRegistered(uint16_t counterUid)<span class="keyword"> const override</span></div><div class="line"><a name="l01765"></a><span class="lineno"> 1765</span>&#160;<span class="keyword">        </span>{</div><div class="line"><a name="l01766"></a><span class="lineno"> 1766</span>&#160;            <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a>(counterUid);</div><div class="line"><a name="l01767"></a><span class="lineno"> 1767</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l01768"></a><span class="lineno"> 1768</span>&#160;        }</div><div class="line"><a name="l01769"></a><span class="lineno"> 1769</span>&#160;        uint16_t GetCounterCount()<span class="keyword"> const override</span></div><div class="line"><a name="l01770"></a><span class="lineno"> 1770</span>&#160;<span class="keyword">        </span>{</div><div class="line"><a name="l01771"></a><span class="lineno"> 1771</span>&#160;            <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01772"></a><span class="lineno"> 1772</span>&#160;        }</div><div class="line"><a name="l01773"></a><span class="lineno"> 1773</span>&#160;        uint32_t GetAbsoluteCounterValue(uint16_t counterUid)<span class="keyword"> const override</span></div><div class="line"><a name="l01774"></a><span class="lineno"> 1774</span>&#160;<span class="keyword">        </span>{</div><div class="line"><a name="l01775"></a><span class="lineno"> 1775</span>&#160;            <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a>(counterUid);</div><div class="line"><a name="l01776"></a><span class="lineno"> 1776</span>&#160;            <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01777"></a><span class="lineno"> 1777</span>&#160;        }</div><div class="line"><a name="l01778"></a><span class="lineno"> 1778</span>&#160;        uint32_t GetDeltaCounterValue(uint16_t counterUid)<span class="keyword"> override</span></div><div class="line"><a name="l01779"></a><span class="lineno"> 1779</span>&#160;<span class="keyword">        </span>{</div><div class="line"><a name="l01780"></a><span class="lineno"> 1780</span>&#160;            <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a>(counterUid);</div><div class="line"><a name="l01781"></a><span class="lineno"> 1781</span>&#160;            <span class="keywordflow">return</span> 0;</div><div class="line"><a name="l01782"></a><span class="lineno"> 1782</span>&#160;        }</div><div class="line"><a name="l01783"></a><span class="lineno"> 1783</span>&#160;    };</div><div class="line"><a name="l01784"></a><span class="lineno"> 1784</span>&#160;    <span class="keyword">const</span> uint32_t familyId = 0;</div><div class="line"><a name="l01785"></a><span class="lineno"> 1785</span>&#160;    <span class="keyword">const</span> uint32_t packetId = 0x40000;</div><div class="line"><a name="l01786"></a><span class="lineno"> 1786</span>&#160;</div><div class="line"><a name="l01787"></a><span class="lineno"> 1787</span>&#160;    uint32_t version = 1;</div><div class="line"><a name="l01788"></a><span class="lineno"> 1788</span>&#160;    <span class="keyword">const</span> std::unordered_map&lt;<a class="code" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a>,</div><div class="line"><a name="l01789"></a><span class="lineno"> 1789</span>&#160;            std::shared_ptr&lt;armnn::profiling::IBackendProfilingContext&gt;&gt; backendProfilingContext;</div><div class="line"><a name="l01790"></a><span class="lineno"> 1790</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml">CounterIdMap</a> counterIdMap;</div><div class="line"><a name="l01791"></a><span class="lineno"> 1791</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_holder.xhtml">Holder</a> holder;</div><div class="line"><a name="l01792"></a><span class="lineno"> 1792</span>&#160;    TestCaptureThread captureThread;</div><div class="line"><a name="l01793"></a><span class="lineno"> 1793</span>&#160;    TestReadCounterValues readCounterValues;</div><div class="line"><a name="l01794"></a><span class="lineno"> 1794</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml">MockBufferManager</a> mockBuffer(512);</div><div class="line"><a name="l01795"></a><span class="lineno"> 1795</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml">SendCounterPacket</a> sendCounterPacket(mockBuffer);</div><div class="line"><a name="l01796"></a><span class="lineno"> 1796</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_send_thread.xhtml">SendThread</a> sendThread(profilingStateMachine, mockBuffer, sendCounterPacket);</div><div class="line"><a name="l01797"></a><span class="lineno"> 1797</span>&#160;</div><div class="line"><a name="l01798"></a><span class="lineno"> 1798</span>&#160;    uint32_t sizeOfUint32 = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(<span class="keyword">sizeof</span>(uint32_t));</div><div class="line"><a name="l01799"></a><span class="lineno"> 1799</span>&#160;    uint32_t sizeOfUint16 = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(<span class="keyword">sizeof</span>(uint16_t));</div><div class="line"><a name="l01800"></a><span class="lineno"> 1800</span>&#160;</div><div class="line"><a name="l01801"></a><span class="lineno"> 1801</span>&#160;    <span class="comment">// Data with period and counters</span></div><div class="line"><a name="l01802"></a><span class="lineno"> 1802</span>&#160;    uint32_t period1     = <a class="code" href="namespacearmnn.xhtml#a602ddc6408c3347ba4c1eba623003984">armnn::LOWEST_CAPTURE_PERIOD</a>;</div><div class="line"><a name="l01803"></a><span class="lineno"> 1803</span>&#160;    uint32_t dataLength1 = 8;</div><div class="line"><a name="l01804"></a><span class="lineno"> 1804</span>&#160;    uint32_t offset      = 0;</div><div class="line"><a name="l01805"></a><span class="lineno"> 1805</span>&#160;</div><div class="line"><a name="l01806"></a><span class="lineno"> 1806</span>&#160;    std::unique_ptr&lt;unsigned char[]&gt; uniqueData1 = std::make_unique&lt;unsigned char[]&gt;(dataLength1);</div><div class="line"><a name="l01807"></a><span class="lineno"> 1807</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* data1                         = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(uniqueData1.get());</div><div class="line"><a name="l01808"></a><span class="lineno"> 1808</span>&#160;</div><div class="line"><a name="l01809"></a><span class="lineno"> 1809</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(data1, offset, period1);</div><div class="line"><a name="l01810"></a><span class="lineno"> 1810</span>&#160;    offset += sizeOfUint32;</div><div class="line"><a name="l01811"></a><span class="lineno"> 1811</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#ae5ace88c65e65ab7cf5572613601a60d">WriteUint16</a>(data1, offset, 4000);</div><div class="line"><a name="l01812"></a><span class="lineno"> 1812</span>&#160;    offset += sizeOfUint16;</div><div class="line"><a name="l01813"></a><span class="lineno"> 1813</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#ae5ace88c65e65ab7cf5572613601a60d">WriteUint16</a>(data1, offset, 5000);</div><div class="line"><a name="l01814"></a><span class="lineno"> 1814</span>&#160;</div><div class="line"><a name="l01815"></a><span class="lineno"> 1815</span>&#160;    arm::pipe::Packet packetA(packetId, dataLength1, uniqueData1);</div><div class="line"><a name="l01816"></a><span class="lineno"> 1816</span>&#160;</div><div class="line"><a name="l01817"></a><span class="lineno"> 1817</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_periodic_counter_selection_command_handler.xhtml">PeriodicCounterSelectionCommandHandler</a> commandHandler(familyId, packetId, version, backendProfilingContext,</div><div class="line"><a name="l01818"></a><span class="lineno"> 1818</span>&#160;                                                          counterIdMap, holder, 10000u, captureThread,</div><div class="line"><a name="l01819"></a><span class="lineno"> 1819</span>&#160;                                                          readCounterValues, sendCounterPacket, profilingStateMachine);</div><div class="line"><a name="l01820"></a><span class="lineno"> 1820</span>&#160;</div><div class="line"><a name="l01821"></a><span class="lineno"> 1821</span>&#160;    profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l01822"></a><span class="lineno"> 1822</span>&#160;    BOOST_CHECK_THROW(commandHandler(packetA), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>);</div><div class="line"><a name="l01823"></a><span class="lineno"> 1823</span>&#160;    profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l01824"></a><span class="lineno"> 1824</span>&#160;    BOOST_CHECK_THROW(commandHandler(packetA), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>);</div><div class="line"><a name="l01825"></a><span class="lineno"> 1825</span>&#160;    profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l01826"></a><span class="lineno"> 1826</span>&#160;    BOOST_CHECK_THROW(commandHandler(packetA), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>);</div><div class="line"><a name="l01827"></a><span class="lineno"> 1827</span>&#160;    profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l01828"></a><span class="lineno"> 1828</span>&#160;    BOOST_CHECK_NO_THROW(commandHandler(packetA));</div><div class="line"><a name="l01829"></a><span class="lineno"> 1829</span>&#160;</div><div class="line"><a name="l01830"></a><span class="lineno"> 1830</span>&#160;    <span class="keyword">const</span> std::vector&lt;uint16_t&gt; counterIdsA = holder.<a class="code" href="classarmnn_1_1profiling_1_1_holder.xhtml#a95c8634416821480a8140c87054718f6">GetCaptureData</a>().<a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml#a47fc9ce6c654658dfeb9f8ed2071885e">GetCounterIds</a>();</div><div class="line"><a name="l01831"></a><span class="lineno"> 1831</span>&#160;</div><div class="line"><a name="l01832"></a><span class="lineno"> 1832</span>&#160;    BOOST_TEST(holder.<a class="code" href="classarmnn_1_1profiling_1_1_holder.xhtml#a95c8634416821480a8140c87054718f6">GetCaptureData</a>().<a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml#a8386da56facf23364a6005a4769bf962">GetCapturePeriod</a>() == period1);</div><div class="line"><a name="l01833"></a><span class="lineno"> 1833</span>&#160;    BOOST_TEST(counterIdsA.size() == 2);</div><div class="line"><a name="l01834"></a><span class="lineno"> 1834</span>&#160;    BOOST_TEST(counterIdsA[0] == 4000);</div><div class="line"><a name="l01835"></a><span class="lineno"> 1835</span>&#160;    BOOST_TEST(counterIdsA[1] == 5000);</div><div class="line"><a name="l01836"></a><span class="lineno"> 1836</span>&#160;</div><div class="line"><a name="l01837"></a><span class="lineno"> 1837</span>&#160;    <span class="keyword">auto</span> readBuffer = mockBuffer.<a class="code" href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml#abce8709dc1b666a26f427ba7ff08b737">GetReadableBuffer</a>();</div><div class="line"><a name="l01838"></a><span class="lineno"> 1838</span>&#160;</div><div class="line"><a name="l01839"></a><span class="lineno"> 1839</span>&#160;    offset = 0;</div><div class="line"><a name="l01840"></a><span class="lineno"> 1840</span>&#160;</div><div class="line"><a name="l01841"></a><span class="lineno"> 1841</span>&#160;    uint32_t headerWord0 = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer, offset);</div><div class="line"><a name="l01842"></a><span class="lineno"> 1842</span>&#160;    offset += sizeOfUint32;</div><div class="line"><a name="l01843"></a><span class="lineno"> 1843</span>&#160;    uint32_t headerWord1 = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer, offset);</div><div class="line"><a name="l01844"></a><span class="lineno"> 1844</span>&#160;    offset += sizeOfUint32;</div><div class="line"><a name="l01845"></a><span class="lineno"> 1845</span>&#160;    uint32_t period = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer, offset);</div><div class="line"><a name="l01846"></a><span class="lineno"> 1846</span>&#160;</div><div class="line"><a name="l01847"></a><span class="lineno"> 1847</span>&#160;    BOOST_TEST(((headerWord0 &gt;&gt; 26) &amp; 0x3F) == 0);             <span class="comment">// packet family</span></div><div class="line"><a name="l01848"></a><span class="lineno"> 1848</span>&#160;    BOOST_TEST(((headerWord0 &gt;&gt; 16) &amp; 0x3FF) == 4);            <span class="comment">// packet id</span></div><div class="line"><a name="l01849"></a><span class="lineno"> 1849</span>&#160;    BOOST_TEST(headerWord1 == 8);                              <span class="comment">// data length</span></div><div class="line"><a name="l01850"></a><span class="lineno"> 1850</span>&#160;    BOOST_TEST(period ==  <a class="code" href="namespacearmnn.xhtml#a602ddc6408c3347ba4c1eba623003984">armnn::LOWEST_CAPTURE_PERIOD</a>);       <span class="comment">// capture period</span></div><div class="line"><a name="l01851"></a><span class="lineno"> 1851</span>&#160;</div><div class="line"><a name="l01852"></a><span class="lineno"> 1852</span>&#160;    uint16_t counterId = 0;</div><div class="line"><a name="l01853"></a><span class="lineno"> 1853</span>&#160;    offset += sizeOfUint32;</div><div class="line"><a name="l01854"></a><span class="lineno"> 1854</span>&#160;    counterId = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">ReadUint16</a>(readBuffer, offset);</div><div class="line"><a name="l01855"></a><span class="lineno"> 1855</span>&#160;    BOOST_TEST(counterId == 4000);</div><div class="line"><a name="l01856"></a><span class="lineno"> 1856</span>&#160;    offset += sizeOfUint16;</div><div class="line"><a name="l01857"></a><span class="lineno"> 1857</span>&#160;    counterId = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">ReadUint16</a>(readBuffer, offset);</div><div class="line"><a name="l01858"></a><span class="lineno"> 1858</span>&#160;    BOOST_TEST(counterId == 5000);</div><div class="line"><a name="l01859"></a><span class="lineno"> 1859</span>&#160;</div><div class="line"><a name="l01860"></a><span class="lineno"> 1860</span>&#160;    mockBuffer.<a class="code" href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml#ae717263b3243e9f88f4caea6d31b0652">MarkRead</a>(readBuffer);</div><div class="line"><a name="l01861"></a><span class="lineno"> 1861</span>&#160;</div><div class="line"><a name="l01862"></a><span class="lineno"> 1862</span>&#160;    <span class="comment">// Data with period only</span></div><div class="line"><a name="l01863"></a><span class="lineno"> 1863</span>&#160;    uint32_t period2     = 9000; <span class="comment">// We&#39;ll specify a value below LOWEST_CAPTURE_PERIOD. It should be pulled upwards.</span></div><div class="line"><a name="l01864"></a><span class="lineno"> 1864</span>&#160;    uint32_t dataLength2 = 4;</div><div class="line"><a name="l01865"></a><span class="lineno"> 1865</span>&#160;</div><div class="line"><a name="l01866"></a><span class="lineno"> 1866</span>&#160;    std::unique_ptr&lt;unsigned char[]&gt; uniqueData2 = std::make_unique&lt;unsigned char[]&gt;(dataLength2);</div><div class="line"><a name="l01867"></a><span class="lineno"> 1867</span>&#160;</div><div class="line"><a name="l01868"></a><span class="lineno"> 1868</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(reinterpret_cast&lt;unsigned char*&gt;(uniqueData2.get()), 0, period2);</div><div class="line"><a name="l01869"></a><span class="lineno"> 1869</span>&#160;</div><div class="line"><a name="l01870"></a><span class="lineno"> 1870</span>&#160;    arm::pipe::Packet packetB(packetId, dataLength2, uniqueData2);</div><div class="line"><a name="l01871"></a><span class="lineno"> 1871</span>&#160;</div><div class="line"><a name="l01872"></a><span class="lineno"> 1872</span>&#160;    commandHandler(packetB);</div><div class="line"><a name="l01873"></a><span class="lineno"> 1873</span>&#160;</div><div class="line"><a name="l01874"></a><span class="lineno"> 1874</span>&#160;    <span class="keyword">const</span> std::vector&lt;uint16_t&gt; counterIdsB = holder.<a class="code" href="classarmnn_1_1profiling_1_1_holder.xhtml#a95c8634416821480a8140c87054718f6">GetCaptureData</a>().<a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml#a47fc9ce6c654658dfeb9f8ed2071885e">GetCounterIds</a>();</div><div class="line"><a name="l01875"></a><span class="lineno"> 1875</span>&#160;</div><div class="line"><a name="l01876"></a><span class="lineno"> 1876</span>&#160;    <span class="comment">// Value should have been pulled up from 9000 to LOWEST_CAPTURE_PERIOD.</span></div><div class="line"><a name="l01877"></a><span class="lineno"> 1877</span>&#160;    BOOST_TEST(holder.<a class="code" href="classarmnn_1_1profiling_1_1_holder.xhtml#a95c8634416821480a8140c87054718f6">GetCaptureData</a>().<a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml#a8386da56facf23364a6005a4769bf962">GetCapturePeriod</a>() ==  <a class="code" href="namespacearmnn.xhtml#a602ddc6408c3347ba4c1eba623003984">armnn::LOWEST_CAPTURE_PERIOD</a>);</div><div class="line"><a name="l01878"></a><span class="lineno"> 1878</span>&#160;    BOOST_TEST(counterIdsB.size() == 0);</div><div class="line"><a name="l01879"></a><span class="lineno"> 1879</span>&#160;</div><div class="line"><a name="l01880"></a><span class="lineno"> 1880</span>&#160;    readBuffer = mockBuffer.<a class="code" href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml#abce8709dc1b666a26f427ba7ff08b737">GetReadableBuffer</a>();</div><div class="line"><a name="l01881"></a><span class="lineno"> 1881</span>&#160;</div><div class="line"><a name="l01882"></a><span class="lineno"> 1882</span>&#160;    offset = 0;</div><div class="line"><a name="l01883"></a><span class="lineno"> 1883</span>&#160;</div><div class="line"><a name="l01884"></a><span class="lineno"> 1884</span>&#160;    headerWord0 = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer, offset);</div><div class="line"><a name="l01885"></a><span class="lineno"> 1885</span>&#160;    offset += sizeOfUint32;</div><div class="line"><a name="l01886"></a><span class="lineno"> 1886</span>&#160;    headerWord1 = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer, offset);</div><div class="line"><a name="l01887"></a><span class="lineno"> 1887</span>&#160;    offset += sizeOfUint32;</div><div class="line"><a name="l01888"></a><span class="lineno"> 1888</span>&#160;    period = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer, offset);</div><div class="line"><a name="l01889"></a><span class="lineno"> 1889</span>&#160;</div><div class="line"><a name="l01890"></a><span class="lineno"> 1890</span>&#160;    BOOST_TEST(((headerWord0 &gt;&gt; 26) &amp; 0x3F) == 0);         <span class="comment">// packet family</span></div><div class="line"><a name="l01891"></a><span class="lineno"> 1891</span>&#160;    BOOST_TEST(((headerWord0 &gt;&gt; 16) &amp; 0x3FF) == 4);        <span class="comment">// packet id</span></div><div class="line"><a name="l01892"></a><span class="lineno"> 1892</span>&#160;    BOOST_TEST(headerWord1 == 4);                          <span class="comment">// data length</span></div><div class="line"><a name="l01893"></a><span class="lineno"> 1893</span>&#160;    BOOST_TEST(period == <a class="code" href="namespacearmnn.xhtml#a602ddc6408c3347ba4c1eba623003984">armnn::LOWEST_CAPTURE_PERIOD</a>);    <span class="comment">// capture period</span></div><div class="line"><a name="l01894"></a><span class="lineno"> 1894</span>&#160;}</div><div class="line"><a name="l01895"></a><span class="lineno"> 1895</span>&#160;</div><div class="line"><a name="l01896"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a5b785a90cb982914bc4399ac0bdc6e04"> 1896</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckTimelineActivationAndDeactivation)</div><div class="line"><a name="l01897"></a><span class="lineno"> 1897</span>&#160;{</div><div class="line"><a name="l01898"></a><span class="lineno"> 1898</span>&#160;    <span class="keyword">class </span>TestReportStructure : <span class="keyword">public</span> <a class="code" href="classarmnn_1_1profiling_1_1_i_report_structure.xhtml">IReportStructure</a></div><div class="line"><a name="l01899"></a><span class="lineno"> 1899</span>&#160;    {</div><div class="line"><a name="l01900"></a><span class="lineno"> 1900</span>&#160;        <span class="keyword">public</span>:</div><div class="line"><a name="l01901"></a><span class="lineno"> 1901</span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">void</span> ReportStructure()<span class="keyword"> override</span></div><div class="line"><a name="l01902"></a><span class="lineno"> 1902</span>&#160;<span class="keyword">        </span>{</div><div class="line"><a name="l01903"></a><span class="lineno"> 1903</span>&#160;            m_ReportStructureCalled = <span class="keyword">true</span>;</div><div class="line"><a name="l01904"></a><span class="lineno"> 1904</span>&#160;        }</div><div class="line"><a name="l01905"></a><span class="lineno"> 1905</span>&#160;</div><div class="line"><a name="l01906"></a><span class="lineno"> 1906</span>&#160;        <span class="keywordtype">bool</span> m_ReportStructureCalled = <span class="keyword">false</span>;</div><div class="line"><a name="l01907"></a><span class="lineno"> 1907</span>&#160;    };</div><div class="line"><a name="l01908"></a><span class="lineno"> 1908</span>&#160;</div><div class="line"><a name="l01909"></a><span class="lineno"> 1909</span>&#160;    <span class="keyword">class </span>TestNotifyBackends : <span class="keyword">public</span> <a class="code" href="classarmnn_1_1profiling_1_1_i_notify_backends.xhtml">INotifyBackends</a></div><div class="line"><a name="l01910"></a><span class="lineno"> 1910</span>&#160;    {</div><div class="line"><a name="l01911"></a><span class="lineno"> 1911</span>&#160;        <span class="keyword">public</span>:</div><div class="line"><a name="l01912"></a><span class="lineno"> 1912</span>&#160;        TestNotifyBackends() : m_timelineReporting(<span class="keyword">false</span>) {}</div><div class="line"><a name="l01913"></a><span class="lineno"> 1913</span>&#160;        <span class="keyword">virtual</span> <span class="keywordtype">void</span> NotifyBackendsForTimelineReporting()<span class="keyword"> override</span></div><div class="line"><a name="l01914"></a><span class="lineno"> 1914</span>&#160;<span class="keyword">        </span>{</div><div class="line"><a name="l01915"></a><span class="lineno"> 1915</span>&#160;            m_TestNotifyBackendsCalled = m_timelineReporting.load();</div><div class="line"><a name="l01916"></a><span class="lineno"> 1916</span>&#160;        }</div><div class="line"><a name="l01917"></a><span class="lineno"> 1917</span>&#160;</div><div class="line"><a name="l01918"></a><span class="lineno"> 1918</span>&#160;        <span class="keywordtype">bool</span> m_TestNotifyBackendsCalled = <span class="keyword">false</span>;</div><div class="line"><a name="l01919"></a><span class="lineno"> 1919</span>&#160;        std::atomic&lt;bool&gt; m_timelineReporting;</div><div class="line"><a name="l01920"></a><span class="lineno"> 1920</span>&#160;    };</div><div class="line"><a name="l01921"></a><span class="lineno"> 1921</span>&#160;</div><div class="line"><a name="l01922"></a><span class="lineno"> 1922</span>&#160;    arm::pipe::PacketVersionResolver packetVersionResolver;</div><div class="line"><a name="l01923"></a><span class="lineno"> 1923</span>&#160;</div><div class="line"><a name="l01924"></a><span class="lineno"> 1924</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_buffer_manager.xhtml">BufferManager</a> bufferManager(512);</div><div class="line"><a name="l01925"></a><span class="lineno"> 1925</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_send_timeline_packet.xhtml">SendTimelinePacket</a> sendTimelinePacket(bufferManager);</div><div class="line"><a name="l01926"></a><span class="lineno"> 1926</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> stateMachine;</div><div class="line"><a name="l01927"></a><span class="lineno"> 1927</span>&#160;    TestReportStructure testReportStructure;</div><div class="line"><a name="l01928"></a><span class="lineno"> 1928</span>&#160;    TestNotifyBackends testNotifyBackends;</div><div class="line"><a name="l01929"></a><span class="lineno"> 1929</span>&#160;</div><div class="line"><a name="l01930"></a><span class="lineno"> 1930</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_activate_timeline_reporting_command_handler.xhtml">profiling::ActivateTimelineReportingCommandHandler</a> activateTimelineReportingCommandHandler(0,</div><div class="line"><a name="l01931"></a><span class="lineno"> 1931</span>&#160;                                                           6,</div><div class="line"><a name="l01932"></a><span class="lineno"> 1932</span>&#160;                                                           packetVersionResolver.ResolvePacketVersion(0, 6)</div><div class="line"><a name="l01933"></a><span class="lineno"> 1933</span>&#160;                                                           .GetEncodedValue(),</div><div class="line"><a name="l01934"></a><span class="lineno"> 1934</span>&#160;                                                           sendTimelinePacket,</div><div class="line"><a name="l01935"></a><span class="lineno"> 1935</span>&#160;                                                           stateMachine,</div><div class="line"><a name="l01936"></a><span class="lineno"> 1936</span>&#160;                                                           testReportStructure,</div><div class="line"><a name="l01937"></a><span class="lineno"> 1937</span>&#160;                                                           testNotifyBackends.m_timelineReporting,</div><div class="line"><a name="l01938"></a><span class="lineno"> 1938</span>&#160;                                                           testNotifyBackends);</div><div class="line"><a name="l01939"></a><span class="lineno"> 1939</span>&#160;</div><div class="line"><a name="l01940"></a><span class="lineno"> 1940</span>&#160;    <span class="comment">// Write an &quot;ActivateTimelineReporting&quot; packet into the mock profiling connection, to simulate an input from an</span></div><div class="line"><a name="l01941"></a><span class="lineno"> 1941</span>&#160;    <span class="comment">// external profiling service</span></div><div class="line"><a name="l01942"></a><span class="lineno"> 1942</span>&#160;    <span class="keyword">const</span> uint32_t packetFamily1 = 0;</div><div class="line"><a name="l01943"></a><span class="lineno"> 1943</span>&#160;    <span class="keyword">const</span> uint32_t packetId1     = 6;</div><div class="line"><a name="l01944"></a><span class="lineno"> 1944</span>&#160;    uint32_t packetHeader1 = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a750935094e7dc62a6ce69be8688ee9fc">ConstructHeader</a>(packetFamily1, packetId1);</div><div class="line"><a name="l01945"></a><span class="lineno"> 1945</span>&#160;</div><div class="line"><a name="l01946"></a><span class="lineno"> 1946</span>&#160;    <span class="comment">// Create the ActivateTimelineReportingPacket</span></div><div class="line"><a name="l01947"></a><span class="lineno"> 1947</span>&#160;    arm::pipe::Packet ActivateTimelineReportingPacket(packetHeader1); <span class="comment">// Length == 0</span></div><div class="line"><a name="l01948"></a><span class="lineno"> 1948</span>&#160;</div><div class="line"><a name="l01949"></a><span class="lineno"> 1949</span>&#160;    BOOST_CHECK_THROW(</div><div class="line"><a name="l01950"></a><span class="lineno"> 1950</span>&#160;            activateTimelineReportingCommandHandler.operator()(ActivateTimelineReportingPacket), <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>);</div><div class="line"><a name="l01951"></a><span class="lineno"> 1951</span>&#160;</div><div class="line"><a name="l01952"></a><span class="lineno"> 1952</span>&#160;    stateMachine.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l01953"></a><span class="lineno"> 1953</span>&#160;    BOOST_CHECK_THROW(</div><div class="line"><a name="l01954"></a><span class="lineno"> 1954</span>&#160;            activateTimelineReportingCommandHandler.operator()(ActivateTimelineReportingPacket), <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>);</div><div class="line"><a name="l01955"></a><span class="lineno"> 1955</span>&#160;</div><div class="line"><a name="l01956"></a><span class="lineno"> 1956</span>&#160;    stateMachine.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l01957"></a><span class="lineno"> 1957</span>&#160;    BOOST_CHECK_THROW(</div><div class="line"><a name="l01958"></a><span class="lineno"> 1958</span>&#160;            activateTimelineReportingCommandHandler.operator()(ActivateTimelineReportingPacket), <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>);</div><div class="line"><a name="l01959"></a><span class="lineno"> 1959</span>&#160;</div><div class="line"><a name="l01960"></a><span class="lineno"> 1960</span>&#160;    stateMachine.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l01961"></a><span class="lineno"> 1961</span>&#160;    activateTimelineReportingCommandHandler.operator()(ActivateTimelineReportingPacket);</div><div class="line"><a name="l01962"></a><span class="lineno"> 1962</span>&#160;</div><div class="line"><a name="l01963"></a><span class="lineno"> 1963</span>&#160;    BOOST_CHECK(testReportStructure.m_ReportStructureCalled);</div><div class="line"><a name="l01964"></a><span class="lineno"> 1964</span>&#160;    BOOST_CHECK(testNotifyBackends.m_TestNotifyBackendsCalled);</div><div class="line"><a name="l01965"></a><span class="lineno"> 1965</span>&#160;    BOOST_CHECK(testNotifyBackends.m_timelineReporting.load());</div><div class="line"><a name="l01966"></a><span class="lineno"> 1966</span>&#160;</div><div class="line"><a name="l01967"></a><span class="lineno"> 1967</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_deactivate_timeline_reporting_command_handler.xhtml">DeactivateTimelineReportingCommandHandler</a> deactivateTimelineReportingCommandHandler(0,</div><div class="line"><a name="l01968"></a><span class="lineno"> 1968</span>&#160;                                                  7,</div><div class="line"><a name="l01969"></a><span class="lineno"> 1969</span>&#160;                                                  packetVersionResolver.ResolvePacketVersion(0, 7).GetEncodedValue(),</div><div class="line"><a name="l01970"></a><span class="lineno"> 1970</span>&#160;                                                  testNotifyBackends.m_timelineReporting,</div><div class="line"><a name="l01971"></a><span class="lineno"> 1971</span>&#160;                                                  stateMachine,</div><div class="line"><a name="l01972"></a><span class="lineno"> 1972</span>&#160;                                                  testNotifyBackends);</div><div class="line"><a name="l01973"></a><span class="lineno"> 1973</span>&#160;</div><div class="line"><a name="l01974"></a><span class="lineno"> 1974</span>&#160;    <span class="keyword">const</span> uint32_t packetFamily2 = 0;</div><div class="line"><a name="l01975"></a><span class="lineno"> 1975</span>&#160;    <span class="keyword">const</span> uint32_t packetId2     = 7;</div><div class="line"><a name="l01976"></a><span class="lineno"> 1976</span>&#160;    uint32_t packetHeader2 = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a750935094e7dc62a6ce69be8688ee9fc">ConstructHeader</a>(packetFamily2, packetId2);</div><div class="line"><a name="l01977"></a><span class="lineno"> 1977</span>&#160;</div><div class="line"><a name="l01978"></a><span class="lineno"> 1978</span>&#160;    <span class="comment">// Create the DeactivateTimelineReportingPacket</span></div><div class="line"><a name="l01979"></a><span class="lineno"> 1979</span>&#160;    arm::pipe::Packet deactivateTimelineReportingPacket(packetHeader2); <span class="comment">// Length == 0</span></div><div class="line"><a name="l01980"></a><span class="lineno"> 1980</span>&#160;</div><div class="line"><a name="l01981"></a><span class="lineno"> 1981</span>&#160;    stateMachine.Reset();</div><div class="line"><a name="l01982"></a><span class="lineno"> 1982</span>&#160;    BOOST_CHECK_THROW(</div><div class="line"><a name="l01983"></a><span class="lineno"> 1983</span>&#160;            deactivateTimelineReportingCommandHandler.operator()(deactivateTimelineReportingPacket), <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>);</div><div class="line"><a name="l01984"></a><span class="lineno"> 1984</span>&#160;</div><div class="line"><a name="l01985"></a><span class="lineno"> 1985</span>&#160;    stateMachine.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l01986"></a><span class="lineno"> 1986</span>&#160;    BOOST_CHECK_THROW(</div><div class="line"><a name="l01987"></a><span class="lineno"> 1987</span>&#160;            deactivateTimelineReportingCommandHandler.operator()(deactivateTimelineReportingPacket), <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>);</div><div class="line"><a name="l01988"></a><span class="lineno"> 1988</span>&#160;</div><div class="line"><a name="l01989"></a><span class="lineno"> 1989</span>&#160;    stateMachine.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l01990"></a><span class="lineno"> 1990</span>&#160;    BOOST_CHECK_THROW(</div><div class="line"><a name="l01991"></a><span class="lineno"> 1991</span>&#160;            deactivateTimelineReportingCommandHandler.operator()(deactivateTimelineReportingPacket), <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>);</div><div class="line"><a name="l01992"></a><span class="lineno"> 1992</span>&#160;</div><div class="line"><a name="l01993"></a><span class="lineno"> 1993</span>&#160;    stateMachine.TransitionToState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l01994"></a><span class="lineno"> 1994</span>&#160;    deactivateTimelineReportingCommandHandler.operator()(deactivateTimelineReportingPacket);</div><div class="line"><a name="l01995"></a><span class="lineno"> 1995</span>&#160;</div><div class="line"><a name="l01996"></a><span class="lineno"> 1996</span>&#160;    BOOST_CHECK(!testNotifyBackends.m_TestNotifyBackendsCalled);</div><div class="line"><a name="l01997"></a><span class="lineno"> 1997</span>&#160;    BOOST_CHECK(!testNotifyBackends.m_timelineReporting.load());</div><div class="line"><a name="l01998"></a><span class="lineno"> 1998</span>&#160;}</div><div class="line"><a name="l01999"></a><span class="lineno"> 1999</span>&#160;</div><div class="line"><a name="l02000"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a5da66d7ef3ab4338dd10c1a904ca859c"> 2000</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingServiceNotActive)</div><div class="line"><a name="l02001"></a><span class="lineno"> 2001</span>&#160;{</div><div class="line"><a name="l02002"></a><span class="lineno"> 2002</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a>;</div><div class="line"><a name="l02003"></a><span class="lineno"> 2003</span>&#160;    <span class="keyword">using namespace </span><a class="code" href="namespacearmnn_1_1profiling.xhtml">armnn::profiling</a>;</div><div class="line"><a name="l02004"></a><span class="lineno"> 2004</span>&#160;</div><div class="line"><a name="l02005"></a><span class="lineno"> 2005</span>&#160;    <span class="comment">// Create runtime in which the test will run</span></div><div class="line"><a name="l02006"></a><span class="lineno"> 2006</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">armnn::IRuntime::CreationOptions</a> options;</div><div class="line"><a name="l02007"></a><span class="lineno"> 2007</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml#a30412a91cadff138686eaeb12f5357cc">m_ProfilingOptions</a>.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l02008"></a><span class="lineno"> 2008</span>&#160;</div><div class="line"><a name="l02009"></a><span class="lineno"> 2009</span>&#160;    <a class="code" href="structarmnn_1_1_runtime_impl.xhtml">armnn::RuntimeImpl</a> runtime(options);</div><div class="line"><a name="l02010"></a><span class="lineno"> 2010</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service_runtime_helper.xhtml">profiling::ProfilingServiceRuntimeHelper</a> profilingServiceHelper(<a class="code" href="namespacearmnn.xhtml#a22f1d90f329261a58e14827f99090e93">GetProfilingService</a>(&amp;runtime));</div><div class="line"><a name="l02011"></a><span class="lineno"> 2011</span>&#160;    profilingServiceHelper.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service_runtime_helper.xhtml#a03f72b1ccbef21ab7caafb037ce2144c">ForceTransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l02012"></a><span class="lineno"> 2012</span>&#160;    profilingServiceHelper.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service_runtime_helper.xhtml#a03f72b1ccbef21ab7caafb037ce2144c">ForceTransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l02013"></a><span class="lineno"> 2013</span>&#160;    profilingServiceHelper.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service_runtime_helper.xhtml#a03f72b1ccbef21ab7caafb037ce2144c">ForceTransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02014"></a><span class="lineno"> 2014</span>&#160;</div><div class="line"><a name="l02015"></a><span class="lineno"> 2015</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_buffer_manager.xhtml">profiling::BufferManager</a>&amp; bufferManager = profilingServiceHelper.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service_runtime_helper.xhtml#a33b6add40a385911fe653ac446124deb">GetProfilingBufferManager</a>();</div><div class="line"><a name="l02016"></a><span class="lineno"> 2016</span>&#160;    <span class="keyword">auto</span> readableBuffer = bufferManager.<a class="code" href="classarmnn_1_1profiling_1_1_buffer_manager.xhtml#abce8709dc1b666a26f427ba7ff08b737">GetReadableBuffer</a>();</div><div class="line"><a name="l02017"></a><span class="lineno"> 2017</span>&#160;</div><div class="line"><a name="l02018"></a><span class="lineno"> 2018</span>&#160;    <span class="comment">// Profiling is enabled, the post-optimisation structure should be created</span></div><div class="line"><a name="l02019"></a><span class="lineno"> 2019</span>&#160;    BOOST_CHECK(readableBuffer == <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02020"></a><span class="lineno"> 2020</span>&#160;}</div><div class="line"><a name="l02021"></a><span class="lineno"> 2021</span>&#160;</div><div class="line"><a name="l02022"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a53f8274eb95cc9569358b45173c60597"> 2022</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckConnectionAcknowledged)</div><div class="line"><a name="l02023"></a><span class="lineno"> 2023</span>&#160;{</div><div class="line"><a name="l02024"></a><span class="lineno"> 2024</span>&#160;    <span class="keyword">const</span> uint32_t packetFamilyId     = 0;</div><div class="line"><a name="l02025"></a><span class="lineno"> 2025</span>&#160;    <span class="keyword">const</span> uint32_t connectionPacketId = 0x10000;</div><div class="line"><a name="l02026"></a><span class="lineno"> 2026</span>&#160;    <span class="keyword">const</span> uint32_t version            = 1;</div><div class="line"><a name="l02027"></a><span class="lineno"> 2027</span>&#160;</div><div class="line"><a name="l02028"></a><span class="lineno"> 2028</span>&#160;    uint32_t sizeOfUint32 = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(<span class="keyword">sizeof</span>(uint32_t));</div><div class="line"><a name="l02029"></a><span class="lineno"> 2029</span>&#160;    uint32_t sizeOfUint16 = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint32_t&gt;(<span class="keyword">sizeof</span>(uint16_t));</div><div class="line"><a name="l02030"></a><span class="lineno"> 2030</span>&#160;</div><div class="line"><a name="l02031"></a><span class="lineno"> 2031</span>&#160;    <span class="comment">// Data with period and counters</span></div><div class="line"><a name="l02032"></a><span class="lineno"> 2032</span>&#160;    uint32_t period1     = 10;</div><div class="line"><a name="l02033"></a><span class="lineno"> 2033</span>&#160;    uint32_t dataLength1 = 8;</div><div class="line"><a name="l02034"></a><span class="lineno"> 2034</span>&#160;    uint32_t offset      = 0;</div><div class="line"><a name="l02035"></a><span class="lineno"> 2035</span>&#160;</div><div class="line"><a name="l02036"></a><span class="lineno"> 2036</span>&#160;    std::unique_ptr&lt;unsigned char[]&gt; uniqueData1 = std::make_unique&lt;unsigned char[]&gt;(dataLength1);</div><div class="line"><a name="l02037"></a><span class="lineno"> 2037</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* data1                         = <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>*<span class="keyword">&gt;</span>(uniqueData1.get());</div><div class="line"><a name="l02038"></a><span class="lineno"> 2038</span>&#160;</div><div class="line"><a name="l02039"></a><span class="lineno"> 2039</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(data1, offset, period1);</div><div class="line"><a name="l02040"></a><span class="lineno"> 2040</span>&#160;    offset += sizeOfUint32;</div><div class="line"><a name="l02041"></a><span class="lineno"> 2041</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#ae5ace88c65e65ab7cf5572613601a60d">WriteUint16</a>(data1, offset, 4000);</div><div class="line"><a name="l02042"></a><span class="lineno"> 2042</span>&#160;    offset += sizeOfUint16;</div><div class="line"><a name="l02043"></a><span class="lineno"> 2043</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#ae5ace88c65e65ab7cf5572613601a60d">WriteUint16</a>(data1, offset, 5000);</div><div class="line"><a name="l02044"></a><span class="lineno"> 2044</span>&#160;</div><div class="line"><a name="l02045"></a><span class="lineno"> 2045</span>&#160;    arm::pipe::Packet packetA(connectionPacketId, dataLength1, uniqueData1);</div><div class="line"><a name="l02046"></a><span class="lineno"> 2046</span>&#160;</div><div class="line"><a name="l02047"></a><span class="lineno"> 2047</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingState(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l02048"></a><span class="lineno"> 2048</span>&#160;    BOOST_CHECK(profilingState.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l02049"></a><span class="lineno"> 2049</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml">CounterDirectory</a> counterDirectory;</div><div class="line"><a name="l02050"></a><span class="lineno"> 2050</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml">MockBufferManager</a> mockBuffer(1024);</div><div class="line"><a name="l02051"></a><span class="lineno"> 2051</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml">SendCounterPacket</a> sendCounterPacket(mockBuffer);</div><div class="line"><a name="l02052"></a><span class="lineno"> 2052</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_send_thread.xhtml">SendThread</a> sendThread(profilingState, mockBuffer, sendCounterPacket);</div><div class="line"><a name="l02053"></a><span class="lineno"> 2053</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_send_timeline_packet.xhtml">SendTimelinePacket</a> sendTimelinePacket(mockBuffer);</div><div class="line"><a name="l02054"></a><span class="lineno"> 2054</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_service_status.xhtml">MockProfilingServiceStatus</a> mockProfilingServiceStatus;</div><div class="line"><a name="l02055"></a><span class="lineno"> 2055</span>&#160;</div><div class="line"><a name="l02056"></a><span class="lineno"> 2056</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_connection_acknowledged_command_handler.xhtml">ConnectionAcknowledgedCommandHandler</a> commandHandler(packetFamilyId,</div><div class="line"><a name="l02057"></a><span class="lineno"> 2057</span>&#160;                                                        connectionPacketId,</div><div class="line"><a name="l02058"></a><span class="lineno"> 2058</span>&#160;                                                        version,</div><div class="line"><a name="l02059"></a><span class="lineno"> 2059</span>&#160;                                                        counterDirectory,</div><div class="line"><a name="l02060"></a><span class="lineno"> 2060</span>&#160;                                                        sendCounterPacket,</div><div class="line"><a name="l02061"></a><span class="lineno"> 2061</span>&#160;                                                        sendTimelinePacket,</div><div class="line"><a name="l02062"></a><span class="lineno"> 2062</span>&#160;                                                        profilingState,</div><div class="line"><a name="l02063"></a><span class="lineno"> 2063</span>&#160;                                                        mockProfilingServiceStatus);</div><div class="line"><a name="l02064"></a><span class="lineno"> 2064</span>&#160;</div><div class="line"><a name="l02065"></a><span class="lineno"> 2065</span>&#160;    <span class="comment">// command handler received packet on ProfilingState::Uninitialised</span></div><div class="line"><a name="l02066"></a><span class="lineno"> 2066</span>&#160;    BOOST_CHECK_THROW(commandHandler(packetA), <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>);</div><div class="line"><a name="l02067"></a><span class="lineno"> 2067</span>&#160;</div><div class="line"><a name="l02068"></a><span class="lineno"> 2068</span>&#160;    profilingState.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l02069"></a><span class="lineno"> 2069</span>&#160;    BOOST_CHECK(profilingState.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l02070"></a><span class="lineno"> 2070</span>&#160;    <span class="comment">// command handler received packet on ProfilingState::NotConnected</span></div><div class="line"><a name="l02071"></a><span class="lineno"> 2071</span>&#160;    BOOST_CHECK_THROW(commandHandler(packetA), <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>);</div><div class="line"><a name="l02072"></a><span class="lineno"> 2072</span>&#160;</div><div class="line"><a name="l02073"></a><span class="lineno"> 2073</span>&#160;    profilingState.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l02074"></a><span class="lineno"> 2074</span>&#160;    BOOST_CHECK(profilingState.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l02075"></a><span class="lineno"> 2075</span>&#160;    <span class="comment">// command handler received packet on ProfilingState::WaitingForAck</span></div><div class="line"><a name="l02076"></a><span class="lineno"> 2076</span>&#160;    BOOST_CHECK_NO_THROW(commandHandler(packetA));</div><div class="line"><a name="l02077"></a><span class="lineno"> 2077</span>&#160;    BOOST_CHECK(profilingState.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02078"></a><span class="lineno"> 2078</span>&#160;</div><div class="line"><a name="l02079"></a><span class="lineno"> 2079</span>&#160;    <span class="comment">// command handler received packet on ProfilingState::Active</span></div><div class="line"><a name="l02080"></a><span class="lineno"> 2080</span>&#160;    BOOST_CHECK_NO_THROW(commandHandler(packetA));</div><div class="line"><a name="l02081"></a><span class="lineno"> 2081</span>&#160;    BOOST_CHECK(profilingState.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02082"></a><span class="lineno"> 2082</span>&#160;</div><div class="line"><a name="l02083"></a><span class="lineno"> 2083</span>&#160;    <span class="comment">// command handler received different packet</span></div><div class="line"><a name="l02084"></a><span class="lineno"> 2084</span>&#160;    <span class="keyword">const</span> uint32_t differentPacketId = 0x40000;</div><div class="line"><a name="l02085"></a><span class="lineno"> 2085</span>&#160;    arm::pipe::Packet packetB(differentPacketId, dataLength1, uniqueData1);</div><div class="line"><a name="l02086"></a><span class="lineno"> 2086</span>&#160;    profilingState.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l02087"></a><span class="lineno"> 2087</span>&#160;    profilingState.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l02088"></a><span class="lineno"> 2088</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_connection_acknowledged_command_handler.xhtml">ConnectionAcknowledgedCommandHandler</a> differentCommandHandler(packetFamilyId,</div><div class="line"><a name="l02089"></a><span class="lineno"> 2089</span>&#160;                                                                 differentPacketId,</div><div class="line"><a name="l02090"></a><span class="lineno"> 2090</span>&#160;                                                                 version,</div><div class="line"><a name="l02091"></a><span class="lineno"> 2091</span>&#160;                                                                 counterDirectory,</div><div class="line"><a name="l02092"></a><span class="lineno"> 2092</span>&#160;                                                                 sendCounterPacket,</div><div class="line"><a name="l02093"></a><span class="lineno"> 2093</span>&#160;                                                                 sendTimelinePacket,</div><div class="line"><a name="l02094"></a><span class="lineno"> 2094</span>&#160;                                                                 profilingState,</div><div class="line"><a name="l02095"></a><span class="lineno"> 2095</span>&#160;                                                                 mockProfilingServiceStatus);</div><div class="line"><a name="l02096"></a><span class="lineno"> 2096</span>&#160;    BOOST_CHECK_THROW(differentCommandHandler(packetB), <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>);</div><div class="line"><a name="l02097"></a><span class="lineno"> 2097</span>&#160;}</div><div class="line"><a name="l02098"></a><span class="lineno"> 2098</span>&#160;</div><div class="line"><a name="l02099"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a0d145cd1b5fee3784a3bca76874181b4"> 2099</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckSocketConnectionException)</div><div class="line"><a name="l02100"></a><span class="lineno"> 2100</span>&#160;{</div><div class="line"><a name="l02101"></a><span class="lineno"> 2101</span>&#160;    <span class="comment">// Check that creating a SocketProfilingConnection armnnProfiling in an exception as the Gator UDS doesn&#39;t exist.</span></div><div class="line"><a name="l02102"></a><span class="lineno"> 2102</span>&#160;    BOOST_CHECK_THROW(<span class="keyword">new</span> <a class="code" href="classarmnn_1_1profiling_1_1_socket_profiling_connection.xhtml">SocketProfilingConnection</a>(), arm::pipe::SocketConnectionException);</div><div class="line"><a name="l02103"></a><span class="lineno"> 2103</span>&#160;}</div><div class="line"><a name="l02104"></a><span class="lineno"> 2104</span>&#160;</div><div class="line"><a name="l02105"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#abfe76eabdd3fb9be58b56701932fd854"> 2105</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckSocketConnectionException2)</div><div class="line"><a name="l02106"></a><span class="lineno"> 2106</span>&#160;{</div><div class="line"><a name="l02107"></a><span class="lineno"> 2107</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l02108"></a><span class="lineno"> 2108</span>&#160;    {</div><div class="line"><a name="l02109"></a><span class="lineno"> 2109</span>&#160;        <span class="keyword">new</span> <a class="code" href="classarmnn_1_1profiling_1_1_socket_profiling_connection.xhtml">SocketProfilingConnection</a>();</div><div class="line"><a name="l02110"></a><span class="lineno"> 2110</span>&#160;    }</div><div class="line"><a name="l02111"></a><span class="lineno"> 2111</span>&#160;    <span class="keywordflow">catch</span> (<span class="keyword">const</span> arm::pipe::SocketConnectionException&amp; ex)</div><div class="line"><a name="l02112"></a><span class="lineno"> 2112</span>&#160;    {</div><div class="line"><a name="l02113"></a><span class="lineno"> 2113</span>&#160;        BOOST_CHECK(ex.GetSocketFd() == 0);</div><div class="line"><a name="l02114"></a><span class="lineno"> 2114</span>&#160;        BOOST_CHECK(ex.GetErrorNo() == ECONNREFUSED);</div><div class="line"><a name="l02115"></a><span class="lineno"> 2115</span>&#160;        BOOST_CHECK(ex.what()</div><div class="line"><a name="l02116"></a><span class="lineno"> 2116</span>&#160;                    == std::string(<span class="stringliteral">&quot;SocketProfilingConnection: Cannot connect to stream socket: Connection refused&quot;</span>));</div><div class="line"><a name="l02117"></a><span class="lineno"> 2117</span>&#160;    }</div><div class="line"><a name="l02118"></a><span class="lineno"> 2118</span>&#160;}</div><div class="line"><a name="l02119"></a><span class="lineno"> 2119</span>&#160;</div><div class="line"><a name="l02120"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a604b3f5c0af71b19ddc7ed624607a4b8"> 2120</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(SwTraceIsValidCharTest)</div><div class="line"><a name="l02121"></a><span class="lineno"> 2121</span>&#160;{</div><div class="line"><a name="l02122"></a><span class="lineno"> 2122</span>&#160;    <span class="comment">// Only ASCII 7-bit encoding supported</span></div><div class="line"><a name="l02123"></a><span class="lineno"> 2123</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c = 0; c &lt; 128; c++)</div><div class="line"><a name="l02124"></a><span class="lineno"> 2124</span>&#160;    {</div><div class="line"><a name="l02125"></a><span class="lineno"> 2125</span>&#160;        BOOST_CHECK(arm::pipe::SwTraceCharPolicy::IsValidChar(c));</div><div class="line"><a name="l02126"></a><span class="lineno"> 2126</span>&#160;    }</div><div class="line"><a name="l02127"></a><span class="lineno"> 2127</span>&#160;</div><div class="line"><a name="l02128"></a><span class="lineno"> 2128</span>&#160;    <span class="comment">// Not ASCII</span></div><div class="line"><a name="l02129"></a><span class="lineno"> 2129</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c = 255; c &gt;= 128; c++)</div><div class="line"><a name="l02130"></a><span class="lineno"> 2130</span>&#160;    {</div><div class="line"><a name="l02131"></a><span class="lineno"> 2131</span>&#160;        BOOST_CHECK(!arm::pipe::SwTraceCharPolicy::IsValidChar(c));</div><div class="line"><a name="l02132"></a><span class="lineno"> 2132</span>&#160;    }</div><div class="line"><a name="l02133"></a><span class="lineno"> 2133</span>&#160;}</div><div class="line"><a name="l02134"></a><span class="lineno"> 2134</span>&#160;</div><div class="line"><a name="l02135"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a7b72aa8afe787b83a18912979554b392"> 2135</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(SwTraceIsValidNameCharTest)</div><div class="line"><a name="l02136"></a><span class="lineno"> 2136</span>&#160;{</div><div class="line"><a name="l02137"></a><span class="lineno"> 2137</span>&#160;    <span class="comment">// Only alpha-numeric and underscore ASCII 7-bit encoding supported</span></div><div class="line"><a name="l02138"></a><span class="lineno"> 2138</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> validChars[] = <span class="stringliteral">&quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_&quot;</span>;</div><div class="line"><a name="l02139"></a><span class="lineno"> 2139</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> i = 0; i &lt; <span class="keyword">sizeof</span>(validChars) / <span class="keyword">sizeof</span>(validChars[0]) - 1; i++)</div><div class="line"><a name="l02140"></a><span class="lineno"> 2140</span>&#160;    {</div><div class="line"><a name="l02141"></a><span class="lineno"> 2141</span>&#160;        BOOST_CHECK(arm::pipe::SwTraceNameCharPolicy::IsValidChar(validChars[i]));</div><div class="line"><a name="l02142"></a><span class="lineno"> 2142</span>&#160;    }</div><div class="line"><a name="l02143"></a><span class="lineno"> 2143</span>&#160;</div><div class="line"><a name="l02144"></a><span class="lineno"> 2144</span>&#160;    <span class="comment">// Non alpha-numeric chars</span></div><div class="line"><a name="l02145"></a><span class="lineno"> 2145</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c = 0; c &lt; 48; c++)</div><div class="line"><a name="l02146"></a><span class="lineno"> 2146</span>&#160;    {</div><div class="line"><a name="l02147"></a><span class="lineno"> 2147</span>&#160;        BOOST_CHECK(!arm::pipe::SwTraceNameCharPolicy::IsValidChar(c));</div><div class="line"><a name="l02148"></a><span class="lineno"> 2148</span>&#160;    }</div><div class="line"><a name="l02149"></a><span class="lineno"> 2149</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c = 58; c &lt; 65; c++)</div><div class="line"><a name="l02150"></a><span class="lineno"> 2150</span>&#160;    {</div><div class="line"><a name="l02151"></a><span class="lineno"> 2151</span>&#160;        BOOST_CHECK(!arm::pipe::SwTraceNameCharPolicy::IsValidChar(c));</div><div class="line"><a name="l02152"></a><span class="lineno"> 2152</span>&#160;    }</div><div class="line"><a name="l02153"></a><span class="lineno"> 2153</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c = 91; c &lt; 95; c++)</div><div class="line"><a name="l02154"></a><span class="lineno"> 2154</span>&#160;    {</div><div class="line"><a name="l02155"></a><span class="lineno"> 2155</span>&#160;        BOOST_CHECK(!arm::pipe::SwTraceNameCharPolicy::IsValidChar(c));</div><div class="line"><a name="l02156"></a><span class="lineno"> 2156</span>&#160;    }</div><div class="line"><a name="l02157"></a><span class="lineno"> 2157</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c = 96; c &lt; 97; c++)</div><div class="line"><a name="l02158"></a><span class="lineno"> 2158</span>&#160;    {</div><div class="line"><a name="l02159"></a><span class="lineno"> 2159</span>&#160;        BOOST_CHECK(!arm::pipe::SwTraceNameCharPolicy::IsValidChar(c));</div><div class="line"><a name="l02160"></a><span class="lineno"> 2160</span>&#160;    }</div><div class="line"><a name="l02161"></a><span class="lineno"> 2161</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c = 123; c &lt; 128; c++)</div><div class="line"><a name="l02162"></a><span class="lineno"> 2162</span>&#160;    {</div><div class="line"><a name="l02163"></a><span class="lineno"> 2163</span>&#160;        BOOST_CHECK(!arm::pipe::SwTraceNameCharPolicy::IsValidChar(c));</div><div class="line"><a name="l02164"></a><span class="lineno"> 2164</span>&#160;    }</div><div class="line"><a name="l02165"></a><span class="lineno"> 2165</span>&#160;</div><div class="line"><a name="l02166"></a><span class="lineno"> 2166</span>&#160;    <span class="comment">// Not ASCII</span></div><div class="line"><a name="l02167"></a><span class="lineno"> 2167</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> c = 255; c &gt;= 128; c++)</div><div class="line"><a name="l02168"></a><span class="lineno"> 2168</span>&#160;    {</div><div class="line"><a name="l02169"></a><span class="lineno"> 2169</span>&#160;        BOOST_CHECK(!arm::pipe::SwTraceNameCharPolicy::IsValidChar(c));</div><div class="line"><a name="l02170"></a><span class="lineno"> 2170</span>&#160;    }</div><div class="line"><a name="l02171"></a><span class="lineno"> 2171</span>&#160;}</div><div class="line"><a name="l02172"></a><span class="lineno"> 2172</span>&#160;</div><div class="line"><a name="l02173"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a1b6ad89350b29c7dc01da826ccb1f304"> 2173</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(IsValidSwTraceStringTest)</div><div class="line"><a name="l02174"></a><span class="lineno"> 2174</span>&#160;{</div><div class="line"><a name="l02175"></a><span class="lineno"> 2175</span>&#160;    <span class="comment">// Valid SWTrace strings</span></div><div class="line"><a name="l02176"></a><span class="lineno"> 2176</span>&#160;    BOOST_CHECK(arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;&quot;</span>));</div><div class="line"><a name="l02177"></a><span class="lineno"> 2177</span>&#160;    BOOST_CHECK(arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;_&quot;</span>));</div><div class="line"><a name="l02178"></a><span class="lineno"> 2178</span>&#160;    BOOST_CHECK(arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;0123&quot;</span>));</div><div class="line"><a name="l02179"></a><span class="lineno"> 2179</span>&#160;    BOOST_CHECK(arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;valid_string&quot;</span>));</div><div class="line"><a name="l02180"></a><span class="lineno"> 2180</span>&#160;    BOOST_CHECK(arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;VALID_string_456&quot;</span>));</div><div class="line"><a name="l02181"></a><span class="lineno"> 2181</span>&#160;    BOOST_CHECK(arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot; &quot;</span>));</div><div class="line"><a name="l02182"></a><span class="lineno"> 2182</span>&#160;    BOOST_CHECK(arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;valid string&quot;</span>));</div><div class="line"><a name="l02183"></a><span class="lineno"> 2183</span>&#160;    BOOST_CHECK(arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;!$%&quot;</span>));</div><div class="line"><a name="l02184"></a><span class="lineno"> 2184</span>&#160;    BOOST_CHECK(arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;valid|\\~string#123&quot;</span>));</div><div class="line"><a name="l02185"></a><span class="lineno"> 2185</span>&#160;</div><div class="line"><a name="l02186"></a><span class="lineno"> 2186</span>&#160;    <span class="comment">// Invalid SWTrace strings</span></div><div class="line"><a name="l02187"></a><span class="lineno"> 2187</span>&#160;    BOOST_CHECK(!arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;€£&quot;</span>));</div><div class="line"><a name="l02188"></a><span class="lineno"> 2188</span>&#160;    BOOST_CHECK(!arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;invalid‡string&quot;</span>));</div><div class="line"><a name="l02189"></a><span class="lineno"> 2189</span>&#160;    BOOST_CHECK(!arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;12Ž34&quot;</span>));</div><div class="line"><a name="l02190"></a><span class="lineno"> 2190</span>&#160;}</div><div class="line"><a name="l02191"></a><span class="lineno"> 2191</span>&#160;</div><div class="line"><a name="l02192"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#ab2ba35dbc468cb9bd2c3fb196aaf13e9"> 2192</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(IsValidSwTraceNameStringTest)</div><div class="line"><a name="l02193"></a><span class="lineno"> 2193</span>&#160;{</div><div class="line"><a name="l02194"></a><span class="lineno"> 2194</span>&#160;    <span class="comment">// Valid SWTrace name strings</span></div><div class="line"><a name="l02195"></a><span class="lineno"> 2195</span>&#160;    BOOST_CHECK(arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;&quot;</span>));</div><div class="line"><a name="l02196"></a><span class="lineno"> 2196</span>&#160;    BOOST_CHECK(arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;_&quot;</span>));</div><div class="line"><a name="l02197"></a><span class="lineno"> 2197</span>&#160;    BOOST_CHECK(arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;0123&quot;</span>));</div><div class="line"><a name="l02198"></a><span class="lineno"> 2198</span>&#160;    BOOST_CHECK(arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;valid_string&quot;</span>));</div><div class="line"><a name="l02199"></a><span class="lineno"> 2199</span>&#160;    BOOST_CHECK(arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;VALID_string_456&quot;</span>));</div><div class="line"><a name="l02200"></a><span class="lineno"> 2200</span>&#160;</div><div class="line"><a name="l02201"></a><span class="lineno"> 2201</span>&#160;    <span class="comment">// Invalid SWTrace name strings</span></div><div class="line"><a name="l02202"></a><span class="lineno"> 2202</span>&#160;    BOOST_CHECK(!arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot; &quot;</span>));</div><div class="line"><a name="l02203"></a><span class="lineno"> 2203</span>&#160;    BOOST_CHECK(!arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;invalid string&quot;</span>));</div><div class="line"><a name="l02204"></a><span class="lineno"> 2204</span>&#160;    BOOST_CHECK(!arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;!$%&quot;</span>));</div><div class="line"><a name="l02205"></a><span class="lineno"> 2205</span>&#160;    BOOST_CHECK(!arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;invalid|\\~string#123&quot;</span>));</div><div class="line"><a name="l02206"></a><span class="lineno"> 2206</span>&#160;    BOOST_CHECK(!arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;€£&quot;</span>));</div><div class="line"><a name="l02207"></a><span class="lineno"> 2207</span>&#160;    BOOST_CHECK(!arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;invalid‡string&quot;</span>));</div><div class="line"><a name="l02208"></a><span class="lineno"> 2208</span>&#160;    BOOST_CHECK(!arm::pipe::IsValidSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;12Ž34&quot;</span>));</div><div class="line"><a name="l02209"></a><span class="lineno"> 2209</span>&#160;}</div><div class="line"><a name="l02210"></a><span class="lineno"> 2210</span>&#160;</div><div class="line"><a name="l02211"></a><span class="lineno"> 2211</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> SwTracePolicy&gt;</div><div class="line"><a name="l02212"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#afbc30a5751c7cc292a235d5d3651a691"> 2212</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="_profiling_tests_8cpp.xhtml#afbc30a5751c7cc292a235d5d3651a691">StringToSwTraceStringTestHelper</a>(<span class="keyword">const</span> std::string&amp; testString, std::vector&lt;uint32_t&gt; buffer, <span class="keywordtype">size_t</span> expectedSize)</div><div class="line"><a name="l02213"></a><span class="lineno"> 2213</span>&#160;{</div><div class="line"><a name="l02214"></a><span class="lineno"> 2214</span>&#160;    <span class="comment">// Convert the test string to a SWTrace string</span></div><div class="line"><a name="l02215"></a><span class="lineno"> 2215</span>&#160;    BOOST_CHECK(arm::pipe::StringToSwTraceString&lt;SwTracePolicy&gt;(testString, buffer));</div><div class="line"><a name="l02216"></a><span class="lineno"> 2216</span>&#160;</div><div class="line"><a name="l02217"></a><span class="lineno"> 2217</span>&#160;    <span class="comment">// The buffer must contain at least the length of the string</span></div><div class="line"><a name="l02218"></a><span class="lineno"> 2218</span>&#160;    BOOST_CHECK(!buffer.empty());</div><div class="line"><a name="l02219"></a><span class="lineno"> 2219</span>&#160;</div><div class="line"><a name="l02220"></a><span class="lineno"> 2220</span>&#160;    <span class="comment">// The buffer must be of the expected size (in words)</span></div><div class="line"><a name="l02221"></a><span class="lineno"> 2221</span>&#160;    BOOST_CHECK(buffer.size() == expectedSize);</div><div class="line"><a name="l02222"></a><span class="lineno"> 2222</span>&#160;</div><div class="line"><a name="l02223"></a><span class="lineno"> 2223</span>&#160;    <span class="comment">// The first word of the byte must be the length of the string including the null-terminator</span></div><div class="line"><a name="l02224"></a><span class="lineno"> 2224</span>&#160;    BOOST_CHECK(buffer[0] == testString.size() + 1);</div><div class="line"><a name="l02225"></a><span class="lineno"> 2225</span>&#160;</div><div class="line"><a name="l02226"></a><span class="lineno"> 2226</span>&#160;    <span class="comment">// The contents of the buffer must match the test string</span></div><div class="line"><a name="l02227"></a><span class="lineno"> 2227</span>&#160;    BOOST_CHECK(std::memcmp(testString.data(), buffer.data() + 1, testString.size()) == 0);</div><div class="line"><a name="l02228"></a><span class="lineno"> 2228</span>&#160;</div><div class="line"><a name="l02229"></a><span class="lineno"> 2229</span>&#160;    <span class="comment">// The buffer must include the null-terminator at the end of the string</span></div><div class="line"><a name="l02230"></a><span class="lineno"> 2230</span>&#160;    <span class="keywordtype">size_t</span> nullTerminatorIndex = <span class="keyword">sizeof</span>(uint32_t) + testString.size();</div><div class="line"><a name="l02231"></a><span class="lineno"> 2231</span>&#160;    BOOST_CHECK(reinterpret_cast&lt;unsigned char*&gt;(buffer.data())[nullTerminatorIndex] == <span class="charliteral">&#39;\0&#39;</span>);</div><div class="line"><a name="l02232"></a><span class="lineno"> 2232</span>&#160;}</div><div class="line"><a name="l02233"></a><span class="lineno"> 2233</span>&#160;</div><div class="line"><a name="l02234"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a7325bd08e4973aee099800b4b4a8730a"> 2234</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(StringToSwTraceStringTest)</div><div class="line"><a name="l02235"></a><span class="lineno"> 2235</span>&#160;{</div><div class="line"><a name="l02236"></a><span class="lineno"> 2236</span>&#160;    std::vector&lt;uint32_t&gt; buffer;</div><div class="line"><a name="l02237"></a><span class="lineno"> 2237</span>&#160;</div><div class="line"><a name="l02238"></a><span class="lineno"> 2238</span>&#160;    <span class="comment">// Valid SWTrace strings (expected size in words)</span></div><div class="line"><a name="l02239"></a><span class="lineno"> 2239</span>&#160;    StringToSwTraceStringTestHelper&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;&quot;</span>, buffer, 2);</div><div class="line"><a name="l02240"></a><span class="lineno"> 2240</span>&#160;    StringToSwTraceStringTestHelper&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;_&quot;</span>, buffer, 2);</div><div class="line"><a name="l02241"></a><span class="lineno"> 2241</span>&#160;    StringToSwTraceStringTestHelper&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;0123&quot;</span>, buffer, 3);</div><div class="line"><a name="l02242"></a><span class="lineno"> 2242</span>&#160;    StringToSwTraceStringTestHelper&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;valid_string&quot;</span>, buffer, 5);</div><div class="line"><a name="l02243"></a><span class="lineno"> 2243</span>&#160;    StringToSwTraceStringTestHelper&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;VALID_string_456&quot;</span>, buffer, 6);</div><div class="line"><a name="l02244"></a><span class="lineno"> 2244</span>&#160;    StringToSwTraceStringTestHelper&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot; &quot;</span>, buffer, 2);</div><div class="line"><a name="l02245"></a><span class="lineno"> 2245</span>&#160;    StringToSwTraceStringTestHelper&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;valid string&quot;</span>, buffer, 5);</div><div class="line"><a name="l02246"></a><span class="lineno"> 2246</span>&#160;    StringToSwTraceStringTestHelper&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;!$%&quot;</span>, buffer, 2);</div><div class="line"><a name="l02247"></a><span class="lineno"> 2247</span>&#160;    StringToSwTraceStringTestHelper&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;valid|\\~string#123&quot;</span>, buffer, 6);</div><div class="line"><a name="l02248"></a><span class="lineno"> 2248</span>&#160;</div><div class="line"><a name="l02249"></a><span class="lineno"> 2249</span>&#160;    <span class="comment">// Invalid SWTrace strings</span></div><div class="line"><a name="l02250"></a><span class="lineno"> 2250</span>&#160;    BOOST_CHECK(!arm::pipe::StringToSwTraceString&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;€£&quot;</span>, buffer));</div><div class="line"><a name="l02251"></a><span class="lineno"> 2251</span>&#160;    BOOST_CHECK(buffer.empty());</div><div class="line"><a name="l02252"></a><span class="lineno"> 2252</span>&#160;    BOOST_CHECK(!arm::pipe::StringToSwTraceString&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;invalid‡string&quot;</span>, buffer));</div><div class="line"><a name="l02253"></a><span class="lineno"> 2253</span>&#160;    BOOST_CHECK(buffer.empty());</div><div class="line"><a name="l02254"></a><span class="lineno"> 2254</span>&#160;    BOOST_CHECK(!arm::pipe::StringToSwTraceString&lt;arm::pipe::SwTraceCharPolicy&gt;(<span class="stringliteral">&quot;12Ž34&quot;</span>, buffer));</div><div class="line"><a name="l02255"></a><span class="lineno"> 2255</span>&#160;    BOOST_CHECK(buffer.empty());</div><div class="line"><a name="l02256"></a><span class="lineno"> 2256</span>&#160;}</div><div class="line"><a name="l02257"></a><span class="lineno"> 2257</span>&#160;</div><div class="line"><a name="l02258"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#ad80aec98471fd0e359c575292703077d"> 2258</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(StringToSwTraceNameStringTest)</div><div class="line"><a name="l02259"></a><span class="lineno"> 2259</span>&#160;{</div><div class="line"><a name="l02260"></a><span class="lineno"> 2260</span>&#160;    std::vector&lt;uint32_t&gt; buffer;</div><div class="line"><a name="l02261"></a><span class="lineno"> 2261</span>&#160;</div><div class="line"><a name="l02262"></a><span class="lineno"> 2262</span>&#160;    <span class="comment">// Valid SWTrace namestrings (expected size in words)</span></div><div class="line"><a name="l02263"></a><span class="lineno"> 2263</span>&#160;    StringToSwTraceStringTestHelper&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;&quot;</span>, buffer, 2);</div><div class="line"><a name="l02264"></a><span class="lineno"> 2264</span>&#160;    StringToSwTraceStringTestHelper&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;_&quot;</span>, buffer, 2);</div><div class="line"><a name="l02265"></a><span class="lineno"> 2265</span>&#160;    StringToSwTraceStringTestHelper&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;0123&quot;</span>, buffer, 3);</div><div class="line"><a name="l02266"></a><span class="lineno"> 2266</span>&#160;    StringToSwTraceStringTestHelper&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;valid_string&quot;</span>, buffer, 5);</div><div class="line"><a name="l02267"></a><span class="lineno"> 2267</span>&#160;    StringToSwTraceStringTestHelper&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;VALID_string_456&quot;</span>, buffer, 6);</div><div class="line"><a name="l02268"></a><span class="lineno"> 2268</span>&#160;</div><div class="line"><a name="l02269"></a><span class="lineno"> 2269</span>&#160;    <span class="comment">// Invalid SWTrace namestrings</span></div><div class="line"><a name="l02270"></a><span class="lineno"> 2270</span>&#160;    BOOST_CHECK(!arm::pipe::StringToSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot; &quot;</span>, buffer));</div><div class="line"><a name="l02271"></a><span class="lineno"> 2271</span>&#160;    BOOST_CHECK(buffer.empty());</div><div class="line"><a name="l02272"></a><span class="lineno"> 2272</span>&#160;    BOOST_CHECK(!arm::pipe::StringToSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;invalid string&quot;</span>, buffer));</div><div class="line"><a name="l02273"></a><span class="lineno"> 2273</span>&#160;    BOOST_CHECK(buffer.empty());</div><div class="line"><a name="l02274"></a><span class="lineno"> 2274</span>&#160;    BOOST_CHECK(!arm::pipe::StringToSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;!$%&quot;</span>, buffer));</div><div class="line"><a name="l02275"></a><span class="lineno"> 2275</span>&#160;    BOOST_CHECK(buffer.empty());</div><div class="line"><a name="l02276"></a><span class="lineno"> 2276</span>&#160;    BOOST_CHECK(!arm::pipe::StringToSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;invalid|\\~string#123&quot;</span>, buffer));</div><div class="line"><a name="l02277"></a><span class="lineno"> 2277</span>&#160;    BOOST_CHECK(buffer.empty());</div><div class="line"><a name="l02278"></a><span class="lineno"> 2278</span>&#160;    BOOST_CHECK(!arm::pipe::StringToSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;€£&quot;</span>, buffer));</div><div class="line"><a name="l02279"></a><span class="lineno"> 2279</span>&#160;    BOOST_CHECK(buffer.empty());</div><div class="line"><a name="l02280"></a><span class="lineno"> 2280</span>&#160;    BOOST_CHECK(!arm::pipe::StringToSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;invalid‡string&quot;</span>, buffer));</div><div class="line"><a name="l02281"></a><span class="lineno"> 2281</span>&#160;    BOOST_CHECK(buffer.empty());</div><div class="line"><a name="l02282"></a><span class="lineno"> 2282</span>&#160;    BOOST_CHECK(!arm::pipe::StringToSwTraceString&lt;arm::pipe::SwTraceNameCharPolicy&gt;(<span class="stringliteral">&quot;12Ž34&quot;</span>, buffer));</div><div class="line"><a name="l02283"></a><span class="lineno"> 2283</span>&#160;    BOOST_CHECK(buffer.empty());</div><div class="line"><a name="l02284"></a><span class="lineno"> 2284</span>&#160;}</div><div class="line"><a name="l02285"></a><span class="lineno"> 2285</span>&#160;</div><div class="line"><a name="l02286"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a3a0def46a21af29e50d6cd58a5a8545c"> 2286</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckPeriodicCounterCaptureThread)</div><div class="line"><a name="l02287"></a><span class="lineno"> 2287</span>&#160;{</div><div class="line"><a name="l02288"></a><span class="lineno"> 2288</span>&#160;    <span class="keyword">class </span>CaptureReader : <span class="keyword">public</span> <a class="code" href="classarmnn_1_1profiling_1_1_i_read_counter_values.xhtml">IReadCounterValues</a></div><div class="line"><a name="l02289"></a><span class="lineno"> 2289</span>&#160;    {</div><div class="line"><a name="l02290"></a><span class="lineno"> 2290</span>&#160;    <span class="keyword">public</span>:</div><div class="line"><a name="l02291"></a><span class="lineno"> 2291</span>&#160;        CaptureReader(uint16_t counterSize)</div><div class="line"><a name="l02292"></a><span class="lineno"> 2292</span>&#160;        {</div><div class="line"><a name="l02293"></a><span class="lineno"> 2293</span>&#160;            <span class="keywordflow">for</span> (uint16_t i = 0; i &lt; counterSize; ++i)</div><div class="line"><a name="l02294"></a><span class="lineno"> 2294</span>&#160;            {</div><div class="line"><a name="l02295"></a><span class="lineno"> 2295</span>&#160;                m_Data[i] = 0;</div><div class="line"><a name="l02296"></a><span class="lineno"> 2296</span>&#160;            }</div><div class="line"><a name="l02297"></a><span class="lineno"> 2297</span>&#160;            m_CounterSize = counterSize;</div><div class="line"><a name="l02298"></a><span class="lineno"> 2298</span>&#160;        }</div><div class="line"><a name="l02299"></a><span class="lineno"> 2299</span>&#160;        <span class="comment">//not used</span></div><div class="line"><a name="l02300"></a><span class="lineno"> 2300</span>&#160;        <span class="keywordtype">bool</span> IsCounterRegistered(uint16_t counterUid)<span class="keyword"> const override</span></div><div class="line"><a name="l02301"></a><span class="lineno"> 2301</span>&#160;<span class="keyword">        </span>{</div><div class="line"><a name="l02302"></a><span class="lineno"> 2302</span>&#160;            <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a>(counterUid);</div><div class="line"><a name="l02303"></a><span class="lineno"> 2303</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l02304"></a><span class="lineno"> 2304</span>&#160;        }</div><div class="line"><a name="l02305"></a><span class="lineno"> 2305</span>&#160;</div><div class="line"><a name="l02306"></a><span class="lineno"> 2306</span>&#160;        uint16_t GetCounterCount()<span class="keyword"> const override</span></div><div class="line"><a name="l02307"></a><span class="lineno"> 2307</span>&#160;<span class="keyword">        </span>{</div><div class="line"><a name="l02308"></a><span class="lineno"> 2308</span>&#160;            <span class="keywordflow">return</span> m_CounterSize;</div><div class="line"><a name="l02309"></a><span class="lineno"> 2309</span>&#160;        }</div><div class="line"><a name="l02310"></a><span class="lineno"> 2310</span>&#160;</div><div class="line"><a name="l02311"></a><span class="lineno"> 2311</span>&#160;        uint32_t GetAbsoluteCounterValue(uint16_t counterUid)<span class="keyword"> const override</span></div><div class="line"><a name="l02312"></a><span class="lineno"> 2312</span>&#160;<span class="keyword">        </span>{</div><div class="line"><a name="l02313"></a><span class="lineno"> 2313</span>&#160;            <span class="keywordflow">if</span> (counterUid &gt; m_CounterSize)</div><div class="line"><a name="l02314"></a><span class="lineno"> 2314</span>&#160;            {</div><div class="line"><a name="l02315"></a><span class="lineno"> 2315</span>&#160;                BOOST_FAIL(<span class="stringliteral">&quot;Invalid counter Uid&quot;</span>);</div><div class="line"><a name="l02316"></a><span class="lineno"> 2316</span>&#160;            }</div><div class="line"><a name="l02317"></a><span class="lineno"> 2317</span>&#160;            <span class="keywordflow">return</span> m_Data.at(counterUid).load();</div><div class="line"><a name="l02318"></a><span class="lineno"> 2318</span>&#160;        }</div><div class="line"><a name="l02319"></a><span class="lineno"> 2319</span>&#160;</div><div class="line"><a name="l02320"></a><span class="lineno"> 2320</span>&#160;        uint32_t GetDeltaCounterValue(uint16_t counterUid)<span class="keyword">  override</span></div><div class="line"><a name="l02321"></a><span class="lineno"> 2321</span>&#160;<span class="keyword">        </span>{</div><div class="line"><a name="l02322"></a><span class="lineno"> 2322</span>&#160;            <span class="keywordflow">if</span> (counterUid &gt; m_CounterSize)</div><div class="line"><a name="l02323"></a><span class="lineno"> 2323</span>&#160;            {</div><div class="line"><a name="l02324"></a><span class="lineno"> 2324</span>&#160;                BOOST_FAIL(<span class="stringliteral">&quot;Invalid counter Uid&quot;</span>);</div><div class="line"><a name="l02325"></a><span class="lineno"> 2325</span>&#160;            }</div><div class="line"><a name="l02326"></a><span class="lineno"> 2326</span>&#160;            <span class="keywordflow">return</span> m_Data.at(counterUid).load();</div><div class="line"><a name="l02327"></a><span class="lineno"> 2327</span>&#160;        }</div><div class="line"><a name="l02328"></a><span class="lineno"> 2328</span>&#160;</div><div class="line"><a name="l02329"></a><span class="lineno"> 2329</span>&#160;        <span class="keywordtype">void</span> SetCounterValue(uint16_t counterUid, uint32_t value)</div><div class="line"><a name="l02330"></a><span class="lineno"> 2330</span>&#160;        {</div><div class="line"><a name="l02331"></a><span class="lineno"> 2331</span>&#160;            <span class="keywordflow">if</span> (counterUid &gt; m_CounterSize)</div><div class="line"><a name="l02332"></a><span class="lineno"> 2332</span>&#160;            {</div><div class="line"><a name="l02333"></a><span class="lineno"> 2333</span>&#160;                BOOST_FAIL(<span class="stringliteral">&quot;Invalid counter Uid&quot;</span>);</div><div class="line"><a name="l02334"></a><span class="lineno"> 2334</span>&#160;            }</div><div class="line"><a name="l02335"></a><span class="lineno"> 2335</span>&#160;            m_Data.at(counterUid).store(value);</div><div class="line"><a name="l02336"></a><span class="lineno"> 2336</span>&#160;        }</div><div class="line"><a name="l02337"></a><span class="lineno"> 2337</span>&#160;</div><div class="line"><a name="l02338"></a><span class="lineno"> 2338</span>&#160;    <span class="keyword">private</span>:</div><div class="line"><a name="l02339"></a><span class="lineno"> 2339</span>&#160;        std::unordered_map&lt;uint16_t, std::atomic&lt;uint32_t&gt;&gt; m_Data;</div><div class="line"><a name="l02340"></a><span class="lineno"> 2340</span>&#160;        uint16_t m_CounterSize;</div><div class="line"><a name="l02341"></a><span class="lineno"> 2341</span>&#160;    };</div><div class="line"><a name="l02342"></a><span class="lineno"> 2342</span>&#160;</div><div class="line"><a name="l02343"></a><span class="lineno"> 2343</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingStateMachine;</div><div class="line"><a name="l02344"></a><span class="lineno"> 2344</span>&#160;</div><div class="line"><a name="l02345"></a><span class="lineno"> 2345</span>&#160;    <span class="keyword">const</span> std::unordered_map&lt;<a class="code" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a>,</div><div class="line"><a name="l02346"></a><span class="lineno"> 2346</span>&#160;            std::shared_ptr&lt;armnn::profiling::IBackendProfilingContext&gt;&gt; backendProfilingContext;</div><div class="line"><a name="l02347"></a><span class="lineno"> 2347</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml">CounterIdMap</a> counterIdMap;</div><div class="line"><a name="l02348"></a><span class="lineno"> 2348</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_holder.xhtml">Holder</a> data;</div><div class="line"><a name="l02349"></a><span class="lineno"> 2349</span>&#160;    std::vector&lt;uint16_t&gt; captureIds1 = { 0, 1 };</div><div class="line"><a name="l02350"></a><span class="lineno"> 2350</span>&#160;    std::vector&lt;uint16_t&gt; captureIds2;</div><div class="line"><a name="l02351"></a><span class="lineno"> 2351</span>&#160;</div><div class="line"><a name="l02352"></a><span class="lineno"> 2352</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml">MockBufferManager</a> mockBuffer(512);</div><div class="line"><a name="l02353"></a><span class="lineno"> 2353</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml">SendCounterPacket</a> sendCounterPacket(mockBuffer);</div><div class="line"><a name="l02354"></a><span class="lineno"> 2354</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_send_thread.xhtml">SendThread</a> sendThread(profilingStateMachine, mockBuffer, sendCounterPacket);</div><div class="line"><a name="l02355"></a><span class="lineno"> 2355</span>&#160;</div><div class="line"><a name="l02356"></a><span class="lineno"> 2356</span>&#160;    std::vector&lt;uint16_t&gt; counterIds;</div><div class="line"><a name="l02357"></a><span class="lineno"> 2357</span>&#160;    CaptureReader captureReader(2);</div><div class="line"><a name="l02358"></a><span class="lineno"> 2358</span>&#160;</div><div class="line"><a name="l02359"></a><span class="lineno"> 2359</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> valueA   = 10;</div><div class="line"><a name="l02360"></a><span class="lineno"> 2360</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> valueB   = 15;</div><div class="line"><a name="l02361"></a><span class="lineno"> 2361</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> numSteps = 5;</div><div class="line"><a name="l02362"></a><span class="lineno"> 2362</span>&#160;</div><div class="line"><a name="l02363"></a><span class="lineno"> 2363</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_periodic_counter_capture.xhtml">PeriodicCounterCapture</a> periodicCounterCapture(std::ref(data), std::ref(sendCounterPacket), captureReader,</div><div class="line"><a name="l02364"></a><span class="lineno"> 2364</span>&#160;                                                  counterIdMap, backendProfilingContext);</div><div class="line"><a name="l02365"></a><span class="lineno"> 2365</span>&#160;</div><div class="line"><a name="l02366"></a><span class="lineno"> 2366</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; numSteps; ++i)</div><div class="line"><a name="l02367"></a><span class="lineno"> 2367</span>&#160;    {</div><div class="line"><a name="l02368"></a><span class="lineno"> 2368</span>&#160;        data.<a class="code" href="classarmnn_1_1profiling_1_1_holder.xhtml#ae904af7c6336ceeeb95ab8435047c7cb">SetCaptureData</a>(1, captureIds1, {});</div><div class="line"><a name="l02369"></a><span class="lineno"> 2369</span>&#160;        captureReader.SetCounterValue(0, valueA * (i + 1));</div><div class="line"><a name="l02370"></a><span class="lineno"> 2370</span>&#160;        captureReader.SetCounterValue(1, valueB * (i + 1));</div><div class="line"><a name="l02371"></a><span class="lineno"> 2371</span>&#160;</div><div class="line"><a name="l02372"></a><span class="lineno"> 2372</span>&#160;        periodicCounterCapture.<a class="code" href="classarmnn_1_1profiling_1_1_periodic_counter_capture.xhtml#a156f3866ca69d98b4d9e6e1c1b3ec7da">Start</a>();</div><div class="line"><a name="l02373"></a><span class="lineno"> 2373</span>&#160;        periodicCounterCapture.<a class="code" href="classarmnn_1_1profiling_1_1_periodic_counter_capture.xhtml#a634c58de2126b4a4e6a2a093e60e1290">Stop</a>();</div><div class="line"><a name="l02374"></a><span class="lineno"> 2374</span>&#160;    }</div><div class="line"><a name="l02375"></a><span class="lineno"> 2375</span>&#160;</div><div class="line"><a name="l02376"></a><span class="lineno"> 2376</span>&#160;    <span class="keyword">auto</span> buffer = mockBuffer.<a class="code" href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml#abce8709dc1b666a26f427ba7ff08b737">GetReadableBuffer</a>();</div><div class="line"><a name="l02377"></a><span class="lineno"> 2377</span>&#160;</div><div class="line"><a name="l02378"></a><span class="lineno"> 2378</span>&#160;    uint32_t headerWord0 = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(buffer, 0);</div><div class="line"><a name="l02379"></a><span class="lineno"> 2379</span>&#160;    uint32_t headerWord1 = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(buffer, 4);</div><div class="line"><a name="l02380"></a><span class="lineno"> 2380</span>&#160;</div><div class="line"><a name="l02381"></a><span class="lineno"> 2381</span>&#160;    BOOST_TEST(((headerWord0 &gt;&gt; 26) &amp; 0x0000003F) == 3);    <span class="comment">// packet family</span></div><div class="line"><a name="l02382"></a><span class="lineno"> 2382</span>&#160;    BOOST_TEST(((headerWord0 &gt;&gt; 19) &amp; 0x0000007F) == 0);    <span class="comment">// packet class</span></div><div class="line"><a name="l02383"></a><span class="lineno"> 2383</span>&#160;    BOOST_TEST(((headerWord0 &gt;&gt; 16) &amp; 0x00000007) == 0);    <span class="comment">// packet type</span></div><div class="line"><a name="l02384"></a><span class="lineno"> 2384</span>&#160;    BOOST_TEST(headerWord1 == 20);</div><div class="line"><a name="l02385"></a><span class="lineno"> 2385</span>&#160;</div><div class="line"><a name="l02386"></a><span class="lineno"> 2386</span>&#160;    uint32_t offset    = 16;</div><div class="line"><a name="l02387"></a><span class="lineno"> 2387</span>&#160;    uint16_t readIndex = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">ReadUint16</a>(buffer, offset);</div><div class="line"><a name="l02388"></a><span class="lineno"> 2388</span>&#160;    BOOST_TEST(0 == readIndex);</div><div class="line"><a name="l02389"></a><span class="lineno"> 2389</span>&#160;</div><div class="line"><a name="l02390"></a><span class="lineno"> 2390</span>&#160;    offset += 2;</div><div class="line"><a name="l02391"></a><span class="lineno"> 2391</span>&#160;    uint32_t readValue = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(buffer, offset);</div><div class="line"><a name="l02392"></a><span class="lineno"> 2392</span>&#160;    BOOST_TEST((valueA * numSteps) == readValue);</div><div class="line"><a name="l02393"></a><span class="lineno"> 2393</span>&#160;</div><div class="line"><a name="l02394"></a><span class="lineno"> 2394</span>&#160;    offset += 4;</div><div class="line"><a name="l02395"></a><span class="lineno"> 2395</span>&#160;    readIndex = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">ReadUint16</a>(buffer, offset);</div><div class="line"><a name="l02396"></a><span class="lineno"> 2396</span>&#160;    BOOST_TEST(1 == readIndex);</div><div class="line"><a name="l02397"></a><span class="lineno"> 2397</span>&#160;</div><div class="line"><a name="l02398"></a><span class="lineno"> 2398</span>&#160;    offset += 2;</div><div class="line"><a name="l02399"></a><span class="lineno"> 2399</span>&#160;    readValue = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(buffer, offset);</div><div class="line"><a name="l02400"></a><span class="lineno"> 2400</span>&#160;    BOOST_TEST((valueB * numSteps) == readValue);</div><div class="line"><a name="l02401"></a><span class="lineno"> 2401</span>&#160;}</div><div class="line"><a name="l02402"></a><span class="lineno"> 2402</span>&#160;</div><div class="line"><a name="l02403"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a4f9d49b02791e7be3fad082d37ccf780"> 2403</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(RequestCounterDirectoryCommandHandlerTest1)</div><div class="line"><a name="l02404"></a><span class="lineno"> 2404</span>&#160;{</div><div class="line"><a name="l02405"></a><span class="lineno"> 2405</span>&#160;    <span class="keyword">const</span> uint32_t familyId = 0;</div><div class="line"><a name="l02406"></a><span class="lineno"> 2406</span>&#160;    <span class="keyword">const</span> uint32_t packetId = 3;</div><div class="line"><a name="l02407"></a><span class="lineno"> 2407</span>&#160;    <span class="keyword">const</span> uint32_t version  = 1;</div><div class="line"><a name="l02408"></a><span class="lineno"> 2408</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingStateMachine;</div><div class="line"><a name="l02409"></a><span class="lineno"> 2409</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml">CounterDirectory</a> counterDirectory;</div><div class="line"><a name="l02410"></a><span class="lineno"> 2410</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml">MockBufferManager</a> mockBuffer1(1024);</div><div class="line"><a name="l02411"></a><span class="lineno"> 2411</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml">SendCounterPacket</a> sendCounterPacket(mockBuffer1);</div><div class="line"><a name="l02412"></a><span class="lineno"> 2412</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_send_thread.xhtml">SendThread</a> sendThread(profilingStateMachine, mockBuffer1, sendCounterPacket);</div><div class="line"><a name="l02413"></a><span class="lineno"> 2413</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml">MockBufferManager</a> mockBuffer2(1024);</div><div class="line"><a name="l02414"></a><span class="lineno"> 2414</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_send_timeline_packet.xhtml">SendTimelinePacket</a> sendTimelinePacket(mockBuffer2);</div><div class="line"><a name="l02415"></a><span class="lineno"> 2415</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_request_counter_directory_command_handler.xhtml">RequestCounterDirectoryCommandHandler</a> commandHandler(familyId, packetId, version, counterDirectory,</div><div class="line"><a name="l02416"></a><span class="lineno"> 2416</span>&#160;                                                         sendCounterPacket, sendTimelinePacket, profilingStateMachine);</div><div class="line"><a name="l02417"></a><span class="lineno"> 2417</span>&#160;</div><div class="line"><a name="l02418"></a><span class="lineno"> 2418</span>&#160;    <span class="keyword">const</span> uint32_t wrongPacketId = 47;</div><div class="line"><a name="l02419"></a><span class="lineno"> 2419</span>&#160;    <span class="keyword">const</span> uint32_t wrongHeader   = (wrongPacketId &amp; 0x000003FF) &lt;&lt; 16;</div><div class="line"><a name="l02420"></a><span class="lineno"> 2420</span>&#160;</div><div class="line"><a name="l02421"></a><span class="lineno"> 2421</span>&#160;    arm::pipe::Packet wrongPacket(wrongHeader);</div><div class="line"><a name="l02422"></a><span class="lineno"> 2422</span>&#160;</div><div class="line"><a name="l02423"></a><span class="lineno"> 2423</span>&#160;    profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l02424"></a><span class="lineno"> 2424</span>&#160;    BOOST_CHECK_THROW(commandHandler(wrongPacket), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>); <span class="comment">// Wrong profiling state</span></div><div class="line"><a name="l02425"></a><span class="lineno"> 2425</span>&#160;    profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l02426"></a><span class="lineno"> 2426</span>&#160;    BOOST_CHECK_THROW(commandHandler(wrongPacket), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>); <span class="comment">// Wrong profiling state</span></div><div class="line"><a name="l02427"></a><span class="lineno"> 2427</span>&#160;    profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l02428"></a><span class="lineno"> 2428</span>&#160;    BOOST_CHECK_THROW(commandHandler(wrongPacket), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>); <span class="comment">// Wrong profiling state</span></div><div class="line"><a name="l02429"></a><span class="lineno"> 2429</span>&#160;    profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02430"></a><span class="lineno"> 2430</span>&#160;    BOOST_CHECK_THROW(commandHandler(wrongPacket), <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a>); <span class="comment">// Wrong packet</span></div><div class="line"><a name="l02431"></a><span class="lineno"> 2431</span>&#160;</div><div class="line"><a name="l02432"></a><span class="lineno"> 2432</span>&#160;    <span class="keyword">const</span> uint32_t rightHeader = (packetId &amp; 0x000003FF) &lt;&lt; 16;</div><div class="line"><a name="l02433"></a><span class="lineno"> 2433</span>&#160;</div><div class="line"><a name="l02434"></a><span class="lineno"> 2434</span>&#160;    arm::pipe::Packet rightPacket(rightHeader);</div><div class="line"><a name="l02435"></a><span class="lineno"> 2435</span>&#160;</div><div class="line"><a name="l02436"></a><span class="lineno"> 2436</span>&#160;    BOOST_CHECK_NO_THROW(commandHandler(rightPacket)); <span class="comment">// Right packet</span></div><div class="line"><a name="l02437"></a><span class="lineno"> 2437</span>&#160;</div><div class="line"><a name="l02438"></a><span class="lineno"> 2438</span>&#160;    <span class="keyword">auto</span> readBuffer1 = mockBuffer1.<a class="code" href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml#abce8709dc1b666a26f427ba7ff08b737">GetReadableBuffer</a>();</div><div class="line"><a name="l02439"></a><span class="lineno"> 2439</span>&#160;</div><div class="line"><a name="l02440"></a><span class="lineno"> 2440</span>&#160;    uint32_t header1Word0 = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer1, 0);</div><div class="line"><a name="l02441"></a><span class="lineno"> 2441</span>&#160;    uint32_t header1Word1 = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer1, 4);</div><div class="line"><a name="l02442"></a><span class="lineno"> 2442</span>&#160;</div><div class="line"><a name="l02443"></a><span class="lineno"> 2443</span>&#160;    <span class="comment">// Counter directory packet</span></div><div class="line"><a name="l02444"></a><span class="lineno"> 2444</span>&#160;    BOOST_TEST(((header1Word0 &gt;&gt; 26) &amp; 0x0000003F) == 0); <span class="comment">// packet family</span></div><div class="line"><a name="l02445"></a><span class="lineno"> 2445</span>&#160;    BOOST_TEST(((header1Word0 &gt;&gt; 16) &amp; 0x000003FF) == 2); <span class="comment">// packet id</span></div><div class="line"><a name="l02446"></a><span class="lineno"> 2446</span>&#160;    BOOST_TEST(header1Word1 == 24);                       <span class="comment">// data length</span></div><div class="line"><a name="l02447"></a><span class="lineno"> 2447</span>&#160;</div><div class="line"><a name="l02448"></a><span class="lineno"> 2448</span>&#160;    uint32_t bodyHeader1Word0   = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer1, 8);</div><div class="line"><a name="l02449"></a><span class="lineno"> 2449</span>&#160;    uint16_t deviceRecordCount = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint16_t&gt;(bodyHeader1Word0 &gt;&gt; 16);</div><div class="line"><a name="l02450"></a><span class="lineno"> 2450</span>&#160;    BOOST_TEST(deviceRecordCount == 0); <span class="comment">// device_records_count</span></div><div class="line"><a name="l02451"></a><span class="lineno"> 2451</span>&#160;</div><div class="line"><a name="l02452"></a><span class="lineno"> 2452</span>&#160;    <span class="keyword">auto</span> readBuffer2 = mockBuffer2.<a class="code" href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml#abce8709dc1b666a26f427ba7ff08b737">GetReadableBuffer</a>();</div><div class="line"><a name="l02453"></a><span class="lineno"> 2453</span>&#160;</div><div class="line"><a name="l02454"></a><span class="lineno"> 2454</span>&#160;    uint32_t header2Word0 = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer2, 0);</div><div class="line"><a name="l02455"></a><span class="lineno"> 2455</span>&#160;    uint32_t header2Word1 = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer2, 4);</div><div class="line"><a name="l02456"></a><span class="lineno"> 2456</span>&#160;</div><div class="line"><a name="l02457"></a><span class="lineno"> 2457</span>&#160;    <span class="comment">// Timeline message directory packet</span></div><div class="line"><a name="l02458"></a><span class="lineno"> 2458</span>&#160;    BOOST_TEST(((header2Word0 &gt;&gt; 26) &amp; 0x0000003F) == 1); <span class="comment">// packet family</span></div><div class="line"><a name="l02459"></a><span class="lineno"> 2459</span>&#160;    BOOST_TEST(((header2Word0 &gt;&gt; 16) &amp; 0x000003FF) == 0); <span class="comment">// packet id</span></div><div class="line"><a name="l02460"></a><span class="lineno"> 2460</span>&#160;    BOOST_TEST(header2Word1 == 443);                      <span class="comment">// data length</span></div><div class="line"><a name="l02461"></a><span class="lineno"> 2461</span>&#160;}</div><div class="line"><a name="l02462"></a><span class="lineno"> 2462</span>&#160;</div><div class="line"><a name="l02463"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#aaffd653b9d898843f0cd4a6dd2ed796a"> 2463</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(RequestCounterDirectoryCommandHandlerTest2)</div><div class="line"><a name="l02464"></a><span class="lineno"> 2464</span>&#160;{</div><div class="line"><a name="l02465"></a><span class="lineno"> 2465</span>&#160;    <span class="keyword">const</span> uint32_t familyId = 0;</div><div class="line"><a name="l02466"></a><span class="lineno"> 2466</span>&#160;    <span class="keyword">const</span> uint32_t packetId = 3;</div><div class="line"><a name="l02467"></a><span class="lineno"> 2467</span>&#160;    <span class="keyword">const</span> uint32_t version  = 1;</div><div class="line"><a name="l02468"></a><span class="lineno"> 2468</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">ProfilingStateMachine</a> profilingStateMachine;</div><div class="line"><a name="l02469"></a><span class="lineno"> 2469</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml">CounterDirectory</a> counterDirectory;</div><div class="line"><a name="l02470"></a><span class="lineno"> 2470</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml">MockBufferManager</a> mockBuffer1(1024);</div><div class="line"><a name="l02471"></a><span class="lineno"> 2471</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml">SendCounterPacket</a> sendCounterPacket(mockBuffer1);</div><div class="line"><a name="l02472"></a><span class="lineno"> 2472</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_send_thread.xhtml">SendThread</a> sendThread(profilingStateMachine, mockBuffer1, sendCounterPacket);</div><div class="line"><a name="l02473"></a><span class="lineno"> 2473</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml">MockBufferManager</a> mockBuffer2(1024);</div><div class="line"><a name="l02474"></a><span class="lineno"> 2474</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_send_timeline_packet.xhtml">SendTimelinePacket</a> sendTimelinePacket(mockBuffer2);</div><div class="line"><a name="l02475"></a><span class="lineno"> 2475</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_request_counter_directory_command_handler.xhtml">RequestCounterDirectoryCommandHandler</a> commandHandler(familyId, packetId, version, counterDirectory,</div><div class="line"><a name="l02476"></a><span class="lineno"> 2476</span>&#160;                                                         sendCounterPacket, sendTimelinePacket, profilingStateMachine);</div><div class="line"><a name="l02477"></a><span class="lineno"> 2477</span>&#160;    <span class="keyword">const</span> uint32_t header = (packetId &amp; 0x000003FF) &lt;&lt; 16;</div><div class="line"><a name="l02478"></a><span class="lineno"> 2478</span>&#160;    <span class="keyword">const</span> arm::pipe::Packet packet(header);</div><div class="line"><a name="l02479"></a><span class="lineno"> 2479</span>&#160;</div><div class="line"><a name="l02480"></a><span class="lineno"> 2480</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_device.xhtml">Device</a>* device = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a6ec101239653ba9260e1362c5381e81d">RegisterDevice</a>(<span class="stringliteral">&quot;deviceA&quot;</span>, 1);</div><div class="line"><a name="l02481"></a><span class="lineno"> 2481</span>&#160;    BOOST_CHECK(device != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02482"></a><span class="lineno"> 2482</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_counter_set.xhtml">CounterSet</a>* counterSet = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a161604d904508d5b86b459c2c2ace4be">RegisterCounterSet</a>(<span class="stringliteral">&quot;countersetA&quot;</span>);</div><div class="line"><a name="l02483"></a><span class="lineno"> 2483</span>&#160;    BOOST_CHECK(counterSet != <span class="keyword">nullptr</span>);</div><div class="line"><a name="l02484"></a><span class="lineno"> 2484</span>&#160;    counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a220a83a3433b6da68d41efe07c39b552">RegisterCategory</a>(<span class="stringliteral">&quot;categoryA&quot;</span>);</div><div class="line"><a name="l02485"></a><span class="lineno"> 2485</span>&#160;    counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ab9756dfaf9b36cc51262369a27d1384f">RegisterCounter</a>(armnn::profiling::BACKEND_ID, 24,</div><div class="line"><a name="l02486"></a><span class="lineno"> 2486</span>&#160;                                     <span class="stringliteral">&quot;categoryA&quot;</span>, 0, 1, 2.0f, <span class="stringliteral">&quot;counterA&quot;</span>, <span class="stringliteral">&quot;descA&quot;</span>);</div><div class="line"><a name="l02487"></a><span class="lineno"> 2487</span>&#160;    counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ab9756dfaf9b36cc51262369a27d1384f">RegisterCounter</a>(armnn::profiling::BACKEND_ID, 25,</div><div class="line"><a name="l02488"></a><span class="lineno"> 2488</span>&#160;                                     <span class="stringliteral">&quot;categoryA&quot;</span>, 1, 1, 3.0f, <span class="stringliteral">&quot;counterB&quot;</span>, <span class="stringliteral">&quot;descB&quot;</span>);</div><div class="line"><a name="l02489"></a><span class="lineno"> 2489</span>&#160;</div><div class="line"><a name="l02490"></a><span class="lineno"> 2490</span>&#160;    profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l02491"></a><span class="lineno"> 2491</span>&#160;    BOOST_CHECK_THROW(commandHandler(packet), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>);    <span class="comment">// Wrong profiling state</span></div><div class="line"><a name="l02492"></a><span class="lineno"> 2492</span>&#160;    profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l02493"></a><span class="lineno"> 2493</span>&#160;    BOOST_CHECK_THROW(commandHandler(packet), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>);    <span class="comment">// Wrong profiling state</span></div><div class="line"><a name="l02494"></a><span class="lineno"> 2494</span>&#160;    profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l02495"></a><span class="lineno"> 2495</span>&#160;    BOOST_CHECK_THROW(commandHandler(packet), <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a>);    <span class="comment">// Wrong profiling state</span></div><div class="line"><a name="l02496"></a><span class="lineno"> 2496</span>&#160;    profilingStateMachine.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">TransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02497"></a><span class="lineno"> 2497</span>&#160;    BOOST_CHECK_NO_THROW(commandHandler(packet));</div><div class="line"><a name="l02498"></a><span class="lineno"> 2498</span>&#160;</div><div class="line"><a name="l02499"></a><span class="lineno"> 2499</span>&#160;    <span class="keyword">auto</span> readBuffer1 = mockBuffer1.<a class="code" href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml#abce8709dc1b666a26f427ba7ff08b737">GetReadableBuffer</a>();</div><div class="line"><a name="l02500"></a><span class="lineno"> 2500</span>&#160;</div><div class="line"><a name="l02501"></a><span class="lineno"> 2501</span>&#160;    <span class="keyword">const</span> uint32_t header1Word0 = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer1, 0);</div><div class="line"><a name="l02502"></a><span class="lineno"> 2502</span>&#160;    <span class="keyword">const</span> uint32_t header1Word1 = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer1, 4);</div><div class="line"><a name="l02503"></a><span class="lineno"> 2503</span>&#160;</div><div class="line"><a name="l02504"></a><span class="lineno"> 2504</span>&#160;    BOOST_TEST(((header1Word0 &gt;&gt; 26) &amp; 0x0000003F) == 0); <span class="comment">// packet family</span></div><div class="line"><a name="l02505"></a><span class="lineno"> 2505</span>&#160;    BOOST_TEST(((header1Word0 &gt;&gt; 16) &amp; 0x000003FF) == 2); <span class="comment">// packet id</span></div><div class="line"><a name="l02506"></a><span class="lineno"> 2506</span>&#160;    BOOST_TEST(header1Word1 == 236);                      <span class="comment">// data length</span></div><div class="line"><a name="l02507"></a><span class="lineno"> 2507</span>&#160;</div><div class="line"><a name="l02508"></a><span class="lineno"> 2508</span>&#160;    <span class="keyword">const</span> uint32_t bodyHeaderSizeBytes = bodyHeaderSize * <span class="keyword">sizeof</span>(uint32_t);</div><div class="line"><a name="l02509"></a><span class="lineno"> 2509</span>&#160;</div><div class="line"><a name="l02510"></a><span class="lineno"> 2510</span>&#160;    <span class="keyword">const</span> uint32_t bodyHeader1Word0      = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer1, 8);</div><div class="line"><a name="l02511"></a><span class="lineno"> 2511</span>&#160;    <span class="keyword">const</span> uint32_t bodyHeader1Word1      = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer1, 12);</div><div class="line"><a name="l02512"></a><span class="lineno"> 2512</span>&#160;    <span class="keyword">const</span> uint32_t bodyHeader1Word2      = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer1, 16);</div><div class="line"><a name="l02513"></a><span class="lineno"> 2513</span>&#160;    <span class="keyword">const</span> uint32_t bodyHeader1Word3      = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer1, 20);</div><div class="line"><a name="l02514"></a><span class="lineno"> 2514</span>&#160;    <span class="keyword">const</span> uint32_t bodyHeader1Word4      = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer1, 24);</div><div class="line"><a name="l02515"></a><span class="lineno"> 2515</span>&#160;    <span class="keyword">const</span> uint32_t bodyHeader1Word5      = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer1, 28);</div><div class="line"><a name="l02516"></a><span class="lineno"> 2516</span>&#160;    <span class="keyword">const</span> uint16_t deviceRecordCount     = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint16_t&gt;(bodyHeader1Word0 &gt;&gt; 16);</div><div class="line"><a name="l02517"></a><span class="lineno"> 2517</span>&#160;    <span class="keyword">const</span> uint16_t counterSetRecordCount = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint16_t&gt;(bodyHeader1Word2 &gt;&gt; 16);</div><div class="line"><a name="l02518"></a><span class="lineno"> 2518</span>&#160;    <span class="keyword">const</span> uint16_t categoryRecordCount   = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;uint16_t&gt;(bodyHeader1Word4 &gt;&gt; 16);</div><div class="line"><a name="l02519"></a><span class="lineno"> 2519</span>&#160;    BOOST_TEST(deviceRecordCount == 1);                      <span class="comment">// device_records_count</span></div><div class="line"><a name="l02520"></a><span class="lineno"> 2520</span>&#160;    BOOST_TEST(bodyHeader1Word1 == 0 + bodyHeaderSizeBytes);      <span class="comment">// device_records_pointer_table_offset</span></div><div class="line"><a name="l02521"></a><span class="lineno"> 2521</span>&#160;    BOOST_TEST(counterSetRecordCount == 1);                  <span class="comment">// counter_set_count</span></div><div class="line"><a name="l02522"></a><span class="lineno"> 2522</span>&#160;    BOOST_TEST(bodyHeader1Word3 == 4 + bodyHeaderSizeBytes);      <span class="comment">// counter_set_pointer_table_offset</span></div><div class="line"><a name="l02523"></a><span class="lineno"> 2523</span>&#160;    BOOST_TEST(categoryRecordCount == 1);                    <span class="comment">// categories_count</span></div><div class="line"><a name="l02524"></a><span class="lineno"> 2524</span>&#160;    BOOST_TEST(bodyHeader1Word5 == 8 + bodyHeaderSizeBytes);      <span class="comment">// categories_pointer_table_offset</span></div><div class="line"><a name="l02525"></a><span class="lineno"> 2525</span>&#160;</div><div class="line"><a name="l02526"></a><span class="lineno"> 2526</span>&#160;    <span class="keyword">const</span> uint32_t deviceRecordOffset = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer1, 32);</div><div class="line"><a name="l02527"></a><span class="lineno"> 2527</span>&#160;    BOOST_TEST(deviceRecordOffset == 12);</div><div class="line"><a name="l02528"></a><span class="lineno"> 2528</span>&#160;</div><div class="line"><a name="l02529"></a><span class="lineno"> 2529</span>&#160;    <span class="keyword">const</span> uint32_t counterSetRecordOffset = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer1, 36);</div><div class="line"><a name="l02530"></a><span class="lineno"> 2530</span>&#160;    BOOST_TEST(counterSetRecordOffset == 28);</div><div class="line"><a name="l02531"></a><span class="lineno"> 2531</span>&#160;</div><div class="line"><a name="l02532"></a><span class="lineno"> 2532</span>&#160;    <span class="keyword">const</span> uint32_t categoryRecordOffset = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer1, 40);</div><div class="line"><a name="l02533"></a><span class="lineno"> 2533</span>&#160;    BOOST_TEST(categoryRecordOffset == 48);</div><div class="line"><a name="l02534"></a><span class="lineno"> 2534</span>&#160;</div><div class="line"><a name="l02535"></a><span class="lineno"> 2535</span>&#160;    <span class="keyword">auto</span> readBuffer2 = mockBuffer2.<a class="code" href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml#abce8709dc1b666a26f427ba7ff08b737">GetReadableBuffer</a>();</div><div class="line"><a name="l02536"></a><span class="lineno"> 2536</span>&#160;</div><div class="line"><a name="l02537"></a><span class="lineno"> 2537</span>&#160;    <span class="keyword">const</span> uint32_t header2Word0 = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer2, 0);</div><div class="line"><a name="l02538"></a><span class="lineno"> 2538</span>&#160;    <span class="keyword">const</span> uint32_t header2Word1 = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer2, 4);</div><div class="line"><a name="l02539"></a><span class="lineno"> 2539</span>&#160;</div><div class="line"><a name="l02540"></a><span class="lineno"> 2540</span>&#160;    <span class="comment">// Timeline message directory packet</span></div><div class="line"><a name="l02541"></a><span class="lineno"> 2541</span>&#160;    BOOST_TEST(((header2Word0 &gt;&gt; 26) &amp; 0x0000003F) == 1); <span class="comment">// packet family</span></div><div class="line"><a name="l02542"></a><span class="lineno"> 2542</span>&#160;    BOOST_TEST(((header2Word0 &gt;&gt; 16) &amp; 0x000003FF) == 0); <span class="comment">// packet id</span></div><div class="line"><a name="l02543"></a><span class="lineno"> 2543</span>&#160;    BOOST_TEST(header2Word1 == 443);                      <span class="comment">// data length</span></div><div class="line"><a name="l02544"></a><span class="lineno"> 2544</span>&#160;}</div><div class="line"><a name="l02545"></a><span class="lineno"> 2545</span>&#160;</div><div class="line"><a name="l02546"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a8b056f24ffaae342e7e72c6bff68142e"> 2546</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingServiceGoodConnectionAcknowledgedPacket)</div><div class="line"><a name="l02547"></a><span class="lineno"> 2547</span>&#160;{</div><div class="line"><a name="l02548"></a><span class="lineno"> 2548</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> streamMetadataPacketsize = <a class="code" href="_profiling_test_utils_8cpp.xhtml#aa449021ed1a9de7abcdbd0ca903577db">GetStreamMetaDataPacketSize</a>();</div><div class="line"><a name="l02549"></a><span class="lineno"> 2549</span>&#160;</div><div class="line"><a name="l02550"></a><span class="lineno"> 2550</span>&#160;    <span class="comment">// Reset the profiling service to the uninitialized state</span></div><div class="line"><a name="l02551"></a><span class="lineno"> 2551</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l02552"></a><span class="lineno"> 2552</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>          = <span class="keyword">true</span>;</div><div class="line"><a name="l02553"></a><span class="lineno"> 2553</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l02554"></a><span class="lineno"> 2554</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l02555"></a><span class="lineno"> 2555</span>&#160;</div><div class="line"><a name="l02556"></a><span class="lineno"> 2556</span>&#160;    <span class="comment">// Swap the profiling connection factory in the profiling service instance with our mock one</span></div><div class="line"><a name="l02557"></a><span class="lineno"> 2557</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml">SwapProfilingConnectionFactoryHelper</a> helper(profilingService);</div><div class="line"><a name="l02558"></a><span class="lineno"> 2558</span>&#160;</div><div class="line"><a name="l02559"></a><span class="lineno"> 2559</span>&#160;    <span class="comment">// Bring the profiling service to the &quot;WaitingForAck&quot; state</span></div><div class="line"><a name="l02560"></a><span class="lineno"> 2560</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l02561"></a><span class="lineno"> 2561</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Initialize the counter directory</span></div><div class="line"><a name="l02562"></a><span class="lineno"> 2562</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l02563"></a><span class="lineno"> 2563</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Create the profiling connection</span></div><div class="line"><a name="l02564"></a><span class="lineno"> 2564</span>&#160;</div><div class="line"><a name="l02565"></a><span class="lineno"> 2565</span>&#160;    <span class="comment">// Get the mock profiling connection</span></div><div class="line"><a name="l02566"></a><span class="lineno"> 2566</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml">MockProfilingConnection</a>* mockProfilingConnection = helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a8ccd73b0bb970c18b05a0bc63fcd0279">GetMockProfilingConnection</a>();</div><div class="line"><a name="l02567"></a><span class="lineno"> 2567</span>&#160;    BOOST_CHECK(mockProfilingConnection);</div><div class="line"><a name="l02568"></a><span class="lineno"> 2568</span>&#160;</div><div class="line"><a name="l02569"></a><span class="lineno"> 2569</span>&#160;    <span class="comment">// Remove the packets received so far</span></div><div class="line"><a name="l02570"></a><span class="lineno"> 2570</span>&#160;    mockProfilingConnection-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#aa71d36872f416feaa853788a7a7a7ef8">Clear</a>();</div><div class="line"><a name="l02571"></a><span class="lineno"> 2571</span>&#160;</div><div class="line"><a name="l02572"></a><span class="lineno"> 2572</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l02573"></a><span class="lineno"> 2573</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Start the command handler and the send thread</span></div><div class="line"><a name="l02574"></a><span class="lineno"> 2574</span>&#160;</div><div class="line"><a name="l02575"></a><span class="lineno"> 2575</span>&#160;    <span class="comment">// Wait for the Stream Metadata packet to be sent</span></div><div class="line"><a name="l02576"></a><span class="lineno"> 2576</span>&#160;    BOOST_CHECK(helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">WaitForPacketsSent</a>(</div><div class="line"><a name="l02577"></a><span class="lineno"> 2577</span>&#160;            mockProfilingConnection, PacketType::StreamMetaData, streamMetadataPacketsize) &gt;= 1);</div><div class="line"><a name="l02578"></a><span class="lineno"> 2578</span>&#160;</div><div class="line"><a name="l02579"></a><span class="lineno"> 2579</span>&#160;    <span class="comment">// Write a valid &quot;Connection Acknowledged&quot; packet into the mock profiling connection, to simulate a valid</span></div><div class="line"><a name="l02580"></a><span class="lineno"> 2580</span>&#160;    <span class="comment">// reply from an external profiling service</span></div><div class="line"><a name="l02581"></a><span class="lineno"> 2581</span>&#160;</div><div class="line"><a name="l02582"></a><span class="lineno"> 2582</span>&#160;    <span class="comment">// Connection Acknowledged Packet header (word 0, word 1 is always zero):</span></div><div class="line"><a name="l02583"></a><span class="lineno"> 2583</span>&#160;    <span class="comment">// 26:31 [6]  packet_family: Control Packet Family, value 0b000000</span></div><div class="line"><a name="l02584"></a><span class="lineno"> 2584</span>&#160;    <span class="comment">// 16:25 [10] packet_id: Packet identifier, value 0b0000000001</span></div><div class="line"><a name="l02585"></a><span class="lineno"> 2585</span>&#160;    <span class="comment">// 8:15  [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l02586"></a><span class="lineno"> 2586</span>&#160;    <span class="comment">// 0:7   [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l02587"></a><span class="lineno"> 2587</span>&#160;    uint32_t packetFamily = 0;</div><div class="line"><a name="l02588"></a><span class="lineno"> 2588</span>&#160;    uint32_t packetId     = 1;</div><div class="line"><a name="l02589"></a><span class="lineno"> 2589</span>&#160;    uint32_t header       = ((packetFamily &amp; 0x0000003F) &lt;&lt; 26) | ((packetId &amp; 0x000003FF) &lt;&lt; 16);</div><div class="line"><a name="l02590"></a><span class="lineno"> 2590</span>&#160;</div><div class="line"><a name="l02591"></a><span class="lineno"> 2591</span>&#160;    <span class="comment">// Create the Connection Acknowledged Packet</span></div><div class="line"><a name="l02592"></a><span class="lineno"> 2592</span>&#160;    arm::pipe::Packet connectionAcknowledgedPacket(header);</div><div class="line"><a name="l02593"></a><span class="lineno"> 2593</span>&#160;</div><div class="line"><a name="l02594"></a><span class="lineno"> 2594</span>&#160;    <span class="comment">// Write the packet to the mock profiling connection</span></div><div class="line"><a name="l02595"></a><span class="lineno"> 2595</span>&#160;    mockProfilingConnection-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#a42eb542b5a1d73d00c4ce474140bb78c">WritePacket</a>(std::move(connectionAcknowledgedPacket));</div><div class="line"><a name="l02596"></a><span class="lineno"> 2596</span>&#160;</div><div class="line"><a name="l02597"></a><span class="lineno"> 2597</span>&#160;    <span class="comment">// Wait for the counter directory packet to ensure the ConnectionAcknowledgedCommandHandler has run.</span></div><div class="line"><a name="l02598"></a><span class="lineno"> 2598</span>&#160;    BOOST_CHECK(helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">WaitForPacketsSent</a>(mockProfilingConnection, PacketType::CounterDirectory) == 1);</div><div class="line"><a name="l02599"></a><span class="lineno"> 2599</span>&#160;</div><div class="line"><a name="l02600"></a><span class="lineno"> 2600</span>&#160;    <span class="comment">// The Connection Acknowledged Command Handler should have updated the profiling state accordingly</span></div><div class="line"><a name="l02601"></a><span class="lineno"> 2601</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02602"></a><span class="lineno"> 2602</span>&#160;</div><div class="line"><a name="l02603"></a><span class="lineno"> 2603</span>&#160;    <span class="comment">// Reset the profiling service to stop any running thread</span></div><div class="line"><a name="l02604"></a><span class="lineno"> 2604</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02605"></a><span class="lineno"> 2605</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l02606"></a><span class="lineno"> 2606</span>&#160;}</div><div class="line"><a name="l02607"></a><span class="lineno"> 2607</span>&#160;</div><div class="line"><a name="l02608"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a5c47a16462521444eecc8e2b20aaf16e"> 2608</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingServiceGoodRequestCounterDirectoryPacket)</div><div class="line"><a name="l02609"></a><span class="lineno"> 2609</span>&#160;{</div><div class="line"><a name="l02610"></a><span class="lineno"> 2610</span>&#160;    <span class="comment">// Reset the profiling service to the uninitialized state</span></div><div class="line"><a name="l02611"></a><span class="lineno"> 2611</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l02612"></a><span class="lineno"> 2612</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>          = <span class="keyword">true</span>;</div><div class="line"><a name="l02613"></a><span class="lineno"> 2613</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l02614"></a><span class="lineno"> 2614</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l02615"></a><span class="lineno"> 2615</span>&#160;</div><div class="line"><a name="l02616"></a><span class="lineno"> 2616</span>&#160;    <span class="comment">// Swap the profiling connection factory in the profiling service instance with our mock one</span></div><div class="line"><a name="l02617"></a><span class="lineno"> 2617</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml">SwapProfilingConnectionFactoryHelper</a> helper(profilingService);</div><div class="line"><a name="l02618"></a><span class="lineno"> 2618</span>&#160;</div><div class="line"><a name="l02619"></a><span class="lineno"> 2619</span>&#160;    <span class="comment">// Bring the profiling service to the &quot;Active&quot; state</span></div><div class="line"><a name="l02620"></a><span class="lineno"> 2620</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l02621"></a><span class="lineno"> 2621</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Initialize the counter directory</span></div><div class="line"><a name="l02622"></a><span class="lineno"> 2622</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l02623"></a><span class="lineno"> 2623</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Create the profiling connection</span></div><div class="line"><a name="l02624"></a><span class="lineno"> 2624</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l02625"></a><span class="lineno"> 2625</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Start the command handler and the send thread</span></div><div class="line"><a name="l02626"></a><span class="lineno"> 2626</span>&#160;</div><div class="line"><a name="l02627"></a><span class="lineno"> 2627</span>&#160;    <span class="comment">// Get the mock profiling connection</span></div><div class="line"><a name="l02628"></a><span class="lineno"> 2628</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml">MockProfilingConnection</a>* mockProfilingConnection = helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a8ccd73b0bb970c18b05a0bc63fcd0279">GetMockProfilingConnection</a>();</div><div class="line"><a name="l02629"></a><span class="lineno"> 2629</span>&#160;    BOOST_CHECK(mockProfilingConnection);</div><div class="line"><a name="l02630"></a><span class="lineno"> 2630</span>&#160;</div><div class="line"><a name="l02631"></a><span class="lineno"> 2631</span>&#160;    <span class="comment">// Force the profiling service to the &quot;Active&quot; state</span></div><div class="line"><a name="l02632"></a><span class="lineno"> 2632</span>&#160;    helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a03f72b1ccbef21ab7caafb037ce2144c">ForceTransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02633"></a><span class="lineno"> 2633</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02634"></a><span class="lineno"> 2634</span>&#160;</div><div class="line"><a name="l02635"></a><span class="lineno"> 2635</span>&#160;    <span class="comment">// Write a valid &quot;Request Counter Directory&quot; packet into the mock profiling connection, to simulate a valid</span></div><div class="line"><a name="l02636"></a><span class="lineno"> 2636</span>&#160;    <span class="comment">// reply from an external profiling service</span></div><div class="line"><a name="l02637"></a><span class="lineno"> 2637</span>&#160;</div><div class="line"><a name="l02638"></a><span class="lineno"> 2638</span>&#160;    <span class="comment">// Request Counter Directory packet header (word 0, word 1 is always zero):</span></div><div class="line"><a name="l02639"></a><span class="lineno"> 2639</span>&#160;    <span class="comment">// 26:31 [6]  packet_family: Control Packet Family, value 0b000000</span></div><div class="line"><a name="l02640"></a><span class="lineno"> 2640</span>&#160;    <span class="comment">// 16:25 [10] packet_id: Packet identifier, value 0b0000000011</span></div><div class="line"><a name="l02641"></a><span class="lineno"> 2641</span>&#160;    <span class="comment">// 8:15  [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l02642"></a><span class="lineno"> 2642</span>&#160;    <span class="comment">// 0:7   [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l02643"></a><span class="lineno"> 2643</span>&#160;    uint32_t packetFamily = 0;</div><div class="line"><a name="l02644"></a><span class="lineno"> 2644</span>&#160;    uint32_t packetId     = 3;</div><div class="line"><a name="l02645"></a><span class="lineno"> 2645</span>&#160;    uint32_t header       = ((packetFamily &amp; 0x0000003F) &lt;&lt; 26) | ((packetId &amp; 0x000003FF) &lt;&lt; 16);</div><div class="line"><a name="l02646"></a><span class="lineno"> 2646</span>&#160;</div><div class="line"><a name="l02647"></a><span class="lineno"> 2647</span>&#160;    <span class="comment">// Create the Request Counter Directory packet</span></div><div class="line"><a name="l02648"></a><span class="lineno"> 2648</span>&#160;    arm::pipe::Packet requestCounterDirectoryPacket(header);</div><div class="line"><a name="l02649"></a><span class="lineno"> 2649</span>&#160;</div><div class="line"><a name="l02650"></a><span class="lineno"> 2650</span>&#160;    <span class="comment">// Write the packet to the mock profiling connection</span></div><div class="line"><a name="l02651"></a><span class="lineno"> 2651</span>&#160;    mockProfilingConnection-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#a42eb542b5a1d73d00c4ce474140bb78c">WritePacket</a>(std::move(requestCounterDirectoryPacket));</div><div class="line"><a name="l02652"></a><span class="lineno"> 2652</span>&#160;</div><div class="line"><a name="l02653"></a><span class="lineno"> 2653</span>&#160;    <span class="comment">// Expecting one CounterDirectory Packet of length 652</span></div><div class="line"><a name="l02654"></a><span class="lineno"> 2654</span>&#160;    <span class="comment">// and one TimelineMessageDirectory packet of length 451</span></div><div class="line"><a name="l02655"></a><span class="lineno"> 2655</span>&#160;    BOOST_CHECK(helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">WaitForPacketsSent</a>(mockProfilingConnection, PacketType::CounterDirectory, 652) == 1);</div><div class="line"><a name="l02656"></a><span class="lineno"> 2656</span>&#160;    BOOST_CHECK(helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">WaitForPacketsSent</a>(mockProfilingConnection, PacketType::TimelineMessageDirectory, 451) == 1);</div><div class="line"><a name="l02657"></a><span class="lineno"> 2657</span>&#160;</div><div class="line"><a name="l02658"></a><span class="lineno"> 2658</span>&#160;    <span class="comment">// The Request Counter Directory Command Handler should not have updated the profiling state</span></div><div class="line"><a name="l02659"></a><span class="lineno"> 2659</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02660"></a><span class="lineno"> 2660</span>&#160;</div><div class="line"><a name="l02661"></a><span class="lineno"> 2661</span>&#160;    <span class="comment">// Reset the profiling service to stop any running thread</span></div><div class="line"><a name="l02662"></a><span class="lineno"> 2662</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02663"></a><span class="lineno"> 2663</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l02664"></a><span class="lineno"> 2664</span>&#160;}</div><div class="line"><a name="l02665"></a><span class="lineno"> 2665</span>&#160;</div><div class="line"><a name="l02666"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#ad60ad627644c2390ef7f8bd8a5e81939"> 2666</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingServiceBadPeriodicCounterSelectionPacketInvalidCounterUid)</div><div class="line"><a name="l02667"></a><span class="lineno"> 2667</span>&#160;{</div><div class="line"><a name="l02668"></a><span class="lineno"> 2668</span>&#160;    <span class="comment">// Reset the profiling service to the uninitialized state</span></div><div class="line"><a name="l02669"></a><span class="lineno"> 2669</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l02670"></a><span class="lineno"> 2670</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>          = <span class="keyword">true</span>;</div><div class="line"><a name="l02671"></a><span class="lineno"> 2671</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l02672"></a><span class="lineno"> 2672</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l02673"></a><span class="lineno"> 2673</span>&#160;</div><div class="line"><a name="l02674"></a><span class="lineno"> 2674</span>&#160;    <span class="comment">// Swap the profiling connection factory in the profiling service instance with our mock one</span></div><div class="line"><a name="l02675"></a><span class="lineno"> 2675</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml">SwapProfilingConnectionFactoryHelper</a> helper(profilingService);</div><div class="line"><a name="l02676"></a><span class="lineno"> 2676</span>&#160;</div><div class="line"><a name="l02677"></a><span class="lineno"> 2677</span>&#160;    <span class="comment">// Bring the profiling service to the &quot;Active&quot; state</span></div><div class="line"><a name="l02678"></a><span class="lineno"> 2678</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l02679"></a><span class="lineno"> 2679</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Initialize the counter directory</span></div><div class="line"><a name="l02680"></a><span class="lineno"> 2680</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l02681"></a><span class="lineno"> 2681</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Create the profiling connection</span></div><div class="line"><a name="l02682"></a><span class="lineno"> 2682</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l02683"></a><span class="lineno"> 2683</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Start the command handler and the send thread</span></div><div class="line"><a name="l02684"></a><span class="lineno"> 2684</span>&#160;</div><div class="line"><a name="l02685"></a><span class="lineno"> 2685</span>&#160;    <span class="comment">// Get the mock profiling connection</span></div><div class="line"><a name="l02686"></a><span class="lineno"> 2686</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml">MockProfilingConnection</a>* mockProfilingConnection = helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a8ccd73b0bb970c18b05a0bc63fcd0279">GetMockProfilingConnection</a>();</div><div class="line"><a name="l02687"></a><span class="lineno"> 2687</span>&#160;    BOOST_CHECK(mockProfilingConnection);</div><div class="line"><a name="l02688"></a><span class="lineno"> 2688</span>&#160;</div><div class="line"><a name="l02689"></a><span class="lineno"> 2689</span>&#160;    <span class="comment">// Force the profiling service to the &quot;Active&quot; state</span></div><div class="line"><a name="l02690"></a><span class="lineno"> 2690</span>&#160;    helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a03f72b1ccbef21ab7caafb037ce2144c">ForceTransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02691"></a><span class="lineno"> 2691</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02692"></a><span class="lineno"> 2692</span>&#160;</div><div class="line"><a name="l02693"></a><span class="lineno"> 2693</span>&#160;    <span class="comment">// Remove the packets received so far</span></div><div class="line"><a name="l02694"></a><span class="lineno"> 2694</span>&#160;    mockProfilingConnection-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#aa71d36872f416feaa853788a7a7a7ef8">Clear</a>();</div><div class="line"><a name="l02695"></a><span class="lineno"> 2695</span>&#160;</div><div class="line"><a name="l02696"></a><span class="lineno"> 2696</span>&#160;    <span class="comment">// Write a &quot;Periodic Counter Selection&quot; packet into the mock profiling connection, to simulate an input from an</span></div><div class="line"><a name="l02697"></a><span class="lineno"> 2697</span>&#160;    <span class="comment">// external profiling service</span></div><div class="line"><a name="l02698"></a><span class="lineno"> 2698</span>&#160;</div><div class="line"><a name="l02699"></a><span class="lineno"> 2699</span>&#160;    <span class="comment">// Periodic Counter Selection packet header:</span></div><div class="line"><a name="l02700"></a><span class="lineno"> 2700</span>&#160;    <span class="comment">// 26:31 [6]  packet_family: Control Packet Family, value 0b000000</span></div><div class="line"><a name="l02701"></a><span class="lineno"> 2701</span>&#160;    <span class="comment">// 16:25 [10] packet_id: Packet identifier, value 0b0000000100</span></div><div class="line"><a name="l02702"></a><span class="lineno"> 2702</span>&#160;    <span class="comment">// 8:15  [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l02703"></a><span class="lineno"> 2703</span>&#160;    <span class="comment">// 0:7   [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l02704"></a><span class="lineno"> 2704</span>&#160;    uint32_t packetFamily = 0;</div><div class="line"><a name="l02705"></a><span class="lineno"> 2705</span>&#160;    uint32_t packetId     = 4;</div><div class="line"><a name="l02706"></a><span class="lineno"> 2706</span>&#160;    uint32_t header       = ((packetFamily &amp; 0x0000003F) &lt;&lt; 26) | ((packetId &amp; 0x000003FF) &lt;&lt; 16);</div><div class="line"><a name="l02707"></a><span class="lineno"> 2707</span>&#160;</div><div class="line"><a name="l02708"></a><span class="lineno"> 2708</span>&#160;    uint32_t capturePeriod = 123456;    <span class="comment">// Some capture period (microseconds)</span></div><div class="line"><a name="l02709"></a><span class="lineno"> 2709</span>&#160;</div><div class="line"><a name="l02710"></a><span class="lineno"> 2710</span>&#160;    <span class="comment">// Get the first valid counter UID</span></div><div class="line"><a name="l02711"></a><span class="lineno"> 2711</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml">ICounterDirectory</a>&amp; counterDirectory = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#adfaa32654e05eab63b2adc34b2138475">GetCounterDirectory</a>();</div><div class="line"><a name="l02712"></a><span class="lineno"> 2712</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn_1_1profiling.xhtml#aeeb6904ffbae435c8d0a7138427688f4">Counters</a>&amp; counters                  = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#ad9fa9b8364fcaa2c940ef8e78eff8df2">GetCounters</a>();</div><div class="line"><a name="l02713"></a><span class="lineno"> 2713</span>&#160;    BOOST_CHECK(counters.size() &gt; 1);</div><div class="line"><a name="l02714"></a><span class="lineno"> 2714</span>&#160;    uint16_t counterUidA = counters.begin()-&gt;first;    <span class="comment">// First valid counter UID</span></div><div class="line"><a name="l02715"></a><span class="lineno"> 2715</span>&#160;    uint16_t counterUidB = 9999;                       <span class="comment">// Second invalid counter UID</span></div><div class="line"><a name="l02716"></a><span class="lineno"> 2716</span>&#160;</div><div class="line"><a name="l02717"></a><span class="lineno"> 2717</span>&#160;    uint32_t length = 8;</div><div class="line"><a name="l02718"></a><span class="lineno"> 2718</span>&#160;</div><div class="line"><a name="l02719"></a><span class="lineno"> 2719</span>&#160;    <span class="keyword">auto</span> data = std::make_unique&lt;unsigned char[]&gt;(length);</div><div class="line"><a name="l02720"></a><span class="lineno"> 2720</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(data.get(), 0, capturePeriod);</div><div class="line"><a name="l02721"></a><span class="lineno"> 2721</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#ae5ace88c65e65ab7cf5572613601a60d">WriteUint16</a>(data.get(), 4, counterUidA);</div><div class="line"><a name="l02722"></a><span class="lineno"> 2722</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#ae5ace88c65e65ab7cf5572613601a60d">WriteUint16</a>(data.get(), 6, counterUidB);</div><div class="line"><a name="l02723"></a><span class="lineno"> 2723</span>&#160;</div><div class="line"><a name="l02724"></a><span class="lineno"> 2724</span>&#160;    <span class="comment">// Create the Periodic Counter Selection packet</span></div><div class="line"><a name="l02725"></a><span class="lineno"> 2725</span>&#160;    <span class="comment">// Length &gt; 0, this will start the Period Counter Capture thread</span></div><div class="line"><a name="l02726"></a><span class="lineno"> 2726</span>&#160;    arm::pipe::Packet periodicCounterSelectionPacket(header, length, data);</div><div class="line"><a name="l02727"></a><span class="lineno"> 2727</span>&#160;</div><div class="line"><a name="l02728"></a><span class="lineno"> 2728</span>&#160;</div><div class="line"><a name="l02729"></a><span class="lineno"> 2729</span>&#160;    <span class="comment">// Write the packet to the mock profiling connection</span></div><div class="line"><a name="l02730"></a><span class="lineno"> 2730</span>&#160;    mockProfilingConnection-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#a42eb542b5a1d73d00c4ce474140bb78c">WritePacket</a>(std::move(periodicCounterSelectionPacket));</div><div class="line"><a name="l02731"></a><span class="lineno"> 2731</span>&#160;</div><div class="line"><a name="l02732"></a><span class="lineno"> 2732</span>&#160;    <span class="comment">// Expecting one Periodic Counter Selection packet of length 14</span></div><div class="line"><a name="l02733"></a><span class="lineno"> 2733</span>&#160;    <span class="comment">// and at least one Periodic Counter Capture packet of length 22</span></div><div class="line"><a name="l02734"></a><span class="lineno"> 2734</span>&#160;    BOOST_CHECK(helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">WaitForPacketsSent</a>(mockProfilingConnection, PacketType::PeriodicCounterSelection, 14) == 1);</div><div class="line"><a name="l02735"></a><span class="lineno"> 2735</span>&#160;    BOOST_CHECK(helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">WaitForPacketsSent</a>(mockProfilingConnection, PacketType::PeriodicCounterCapture, 22) &gt;= 1);</div><div class="line"><a name="l02736"></a><span class="lineno"> 2736</span>&#160;</div><div class="line"><a name="l02737"></a><span class="lineno"> 2737</span>&#160;    <span class="comment">// The Periodic Counter Selection Handler should not have updated the profiling state</span></div><div class="line"><a name="l02738"></a><span class="lineno"> 2738</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02739"></a><span class="lineno"> 2739</span>&#160;</div><div class="line"><a name="l02740"></a><span class="lineno"> 2740</span>&#160;    <span class="comment">// Reset the profiling service to stop any running thread</span></div><div class="line"><a name="l02741"></a><span class="lineno"> 2741</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02742"></a><span class="lineno"> 2742</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l02743"></a><span class="lineno"> 2743</span>&#160;}</div><div class="line"><a name="l02744"></a><span class="lineno"> 2744</span>&#160;</div><div class="line"><a name="l02745"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#aedd794c4d553fb93227f45b97610f7e2"> 2745</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingServiceGoodPeriodicCounterSelectionPacketNoCounters)</div><div class="line"><a name="l02746"></a><span class="lineno"> 2746</span>&#160;{</div><div class="line"><a name="l02747"></a><span class="lineno"> 2747</span>&#160;    <span class="comment">// Reset the profiling service to the uninitialized state</span></div><div class="line"><a name="l02748"></a><span class="lineno"> 2748</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l02749"></a><span class="lineno"> 2749</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>          = <span class="keyword">true</span>;</div><div class="line"><a name="l02750"></a><span class="lineno"> 2750</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l02751"></a><span class="lineno"> 2751</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l02752"></a><span class="lineno"> 2752</span>&#160;</div><div class="line"><a name="l02753"></a><span class="lineno"> 2753</span>&#160;    <span class="comment">// Swap the profiling connection factory in the profiling service instance with our mock one</span></div><div class="line"><a name="l02754"></a><span class="lineno"> 2754</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml">SwapProfilingConnectionFactoryHelper</a> helper(profilingService);</div><div class="line"><a name="l02755"></a><span class="lineno"> 2755</span>&#160;</div><div class="line"><a name="l02756"></a><span class="lineno"> 2756</span>&#160;    <span class="comment">// Bring the profiling service to the &quot;Active&quot; state</span></div><div class="line"><a name="l02757"></a><span class="lineno"> 2757</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l02758"></a><span class="lineno"> 2758</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Initialize the counter directory</span></div><div class="line"><a name="l02759"></a><span class="lineno"> 2759</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l02760"></a><span class="lineno"> 2760</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Create the profiling connection</span></div><div class="line"><a name="l02761"></a><span class="lineno"> 2761</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l02762"></a><span class="lineno"> 2762</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Start the command handler and the send thread</span></div><div class="line"><a name="l02763"></a><span class="lineno"> 2763</span>&#160;</div><div class="line"><a name="l02764"></a><span class="lineno"> 2764</span>&#160;    <span class="comment">// Get the mock profiling connection</span></div><div class="line"><a name="l02765"></a><span class="lineno"> 2765</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml">MockProfilingConnection</a>* mockProfilingConnection = helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a8ccd73b0bb970c18b05a0bc63fcd0279">GetMockProfilingConnection</a>();</div><div class="line"><a name="l02766"></a><span class="lineno"> 2766</span>&#160;    BOOST_CHECK(mockProfilingConnection);</div><div class="line"><a name="l02767"></a><span class="lineno"> 2767</span>&#160;</div><div class="line"><a name="l02768"></a><span class="lineno"> 2768</span>&#160;    <span class="comment">// Wait for the Stream Metadata packet the be sent</span></div><div class="line"><a name="l02769"></a><span class="lineno"> 2769</span>&#160;    <span class="comment">// (we are not testing the connection acknowledgement here so it will be ignored by this test)</span></div><div class="line"><a name="l02770"></a><span class="lineno"> 2770</span>&#160;    helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">WaitForPacketsSent</a>(mockProfilingConnection, PacketType::StreamMetaData);</div><div class="line"><a name="l02771"></a><span class="lineno"> 2771</span>&#160;</div><div class="line"><a name="l02772"></a><span class="lineno"> 2772</span>&#160;    <span class="comment">// Force the profiling service to the &quot;Active&quot; state</span></div><div class="line"><a name="l02773"></a><span class="lineno"> 2773</span>&#160;    helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a03f72b1ccbef21ab7caafb037ce2144c">ForceTransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02774"></a><span class="lineno"> 2774</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02775"></a><span class="lineno"> 2775</span>&#160;</div><div class="line"><a name="l02776"></a><span class="lineno"> 2776</span>&#160;    <span class="comment">// Write a &quot;Periodic Counter Selection&quot; packet into the mock profiling connection, to simulate an input from an</span></div><div class="line"><a name="l02777"></a><span class="lineno"> 2777</span>&#160;    <span class="comment">// external profiling service</span></div><div class="line"><a name="l02778"></a><span class="lineno"> 2778</span>&#160;</div><div class="line"><a name="l02779"></a><span class="lineno"> 2779</span>&#160;    <span class="comment">// Periodic Counter Selection packet header:</span></div><div class="line"><a name="l02780"></a><span class="lineno"> 2780</span>&#160;    <span class="comment">// 26:31 [6]  packet_family: Control Packet Family, value 0b000000</span></div><div class="line"><a name="l02781"></a><span class="lineno"> 2781</span>&#160;    <span class="comment">// 16:25 [10] packet_id: Packet identifier, value 0b0000000100</span></div><div class="line"><a name="l02782"></a><span class="lineno"> 2782</span>&#160;    <span class="comment">// 8:15  [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l02783"></a><span class="lineno"> 2783</span>&#160;    <span class="comment">// 0:7   [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l02784"></a><span class="lineno"> 2784</span>&#160;    uint32_t packetFamily = 0;</div><div class="line"><a name="l02785"></a><span class="lineno"> 2785</span>&#160;    uint32_t packetId     = 4;</div><div class="line"><a name="l02786"></a><span class="lineno"> 2786</span>&#160;    uint32_t header       = ((packetFamily &amp; 0x0000003F) &lt;&lt; 26) | ((packetId &amp; 0x000003FF) &lt;&lt; 16);</div><div class="line"><a name="l02787"></a><span class="lineno"> 2787</span>&#160;</div><div class="line"><a name="l02788"></a><span class="lineno"> 2788</span>&#160;    <span class="comment">// Create the Periodic Counter Selection packet</span></div><div class="line"><a name="l02789"></a><span class="lineno"> 2789</span>&#160;    <span class="comment">// Length == 0, this will disable the collection of counters</span></div><div class="line"><a name="l02790"></a><span class="lineno"> 2790</span>&#160;    arm::pipe::Packet periodicCounterSelectionPacket(header);</div><div class="line"><a name="l02791"></a><span class="lineno"> 2791</span>&#160;</div><div class="line"><a name="l02792"></a><span class="lineno"> 2792</span>&#160;    <span class="comment">// Write the packet to the mock profiling connection</span></div><div class="line"><a name="l02793"></a><span class="lineno"> 2793</span>&#160;    mockProfilingConnection-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#a42eb542b5a1d73d00c4ce474140bb78c">WritePacket</a>(std::move(periodicCounterSelectionPacket));</div><div class="line"><a name="l02794"></a><span class="lineno"> 2794</span>&#160;</div><div class="line"><a name="l02795"></a><span class="lineno"> 2795</span>&#160;    <span class="comment">// Wait for the Periodic Counter Selection packet of length 12 to be sent</span></div><div class="line"><a name="l02796"></a><span class="lineno"> 2796</span>&#160;    <span class="comment">// The size of the expected Periodic Counter Selection (echos the sent one)</span></div><div class="line"><a name="l02797"></a><span class="lineno"> 2797</span>&#160;    BOOST_CHECK(helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">WaitForPacketsSent</a>(mockProfilingConnection, PacketType::PeriodicCounterSelection, 12) == 1);</div><div class="line"><a name="l02798"></a><span class="lineno"> 2798</span>&#160;</div><div class="line"><a name="l02799"></a><span class="lineno"> 2799</span>&#160;    <span class="comment">// The Periodic Counter Selection Handler should not have updated the profiling state</span></div><div class="line"><a name="l02800"></a><span class="lineno"> 2800</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02801"></a><span class="lineno"> 2801</span>&#160;</div><div class="line"><a name="l02802"></a><span class="lineno"> 2802</span>&#160;    <span class="comment">// No Periodic Counter packets are expected</span></div><div class="line"><a name="l02803"></a><span class="lineno"> 2803</span>&#160;    BOOST_CHECK(helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">WaitForPacketsSent</a>(mockProfilingConnection, PacketType::PeriodicCounterCapture, 0, 0) == 0);</div><div class="line"><a name="l02804"></a><span class="lineno"> 2804</span>&#160;</div><div class="line"><a name="l02805"></a><span class="lineno"> 2805</span>&#160;    <span class="comment">// Reset the profiling service to stop any running thread</span></div><div class="line"><a name="l02806"></a><span class="lineno"> 2806</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02807"></a><span class="lineno"> 2807</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l02808"></a><span class="lineno"> 2808</span>&#160;}</div><div class="line"><a name="l02809"></a><span class="lineno"> 2809</span>&#160;</div><div class="line"><a name="l02810"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#ab0140004feacb052dec7fc962b7ee791"> 2810</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingServiceGoodPeriodicCounterSelectionPacketSingleCounter)</div><div class="line"><a name="l02811"></a><span class="lineno"> 2811</span>&#160;{</div><div class="line"><a name="l02812"></a><span class="lineno"> 2812</span>&#160;    <span class="comment">// Reset the profiling service to the uninitialized state</span></div><div class="line"><a name="l02813"></a><span class="lineno"> 2813</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l02814"></a><span class="lineno"> 2814</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>          = <span class="keyword">true</span>;</div><div class="line"><a name="l02815"></a><span class="lineno"> 2815</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l02816"></a><span class="lineno"> 2816</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l02817"></a><span class="lineno"> 2817</span>&#160;</div><div class="line"><a name="l02818"></a><span class="lineno"> 2818</span>&#160;    <span class="comment">// Swap the profiling connection factory in the profiling service instance with our mock one</span></div><div class="line"><a name="l02819"></a><span class="lineno"> 2819</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml">SwapProfilingConnectionFactoryHelper</a> helper(profilingService);</div><div class="line"><a name="l02820"></a><span class="lineno"> 2820</span>&#160;</div><div class="line"><a name="l02821"></a><span class="lineno"> 2821</span>&#160;    <span class="comment">// Bring the profiling service to the &quot;Active&quot; state</span></div><div class="line"><a name="l02822"></a><span class="lineno"> 2822</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l02823"></a><span class="lineno"> 2823</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Initialize the counter directory</span></div><div class="line"><a name="l02824"></a><span class="lineno"> 2824</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l02825"></a><span class="lineno"> 2825</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Create the profiling connection</span></div><div class="line"><a name="l02826"></a><span class="lineno"> 2826</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l02827"></a><span class="lineno"> 2827</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Start the command handler and the send thread</span></div><div class="line"><a name="l02828"></a><span class="lineno"> 2828</span>&#160;</div><div class="line"><a name="l02829"></a><span class="lineno"> 2829</span>&#160;    <span class="comment">// Get the mock profiling connection</span></div><div class="line"><a name="l02830"></a><span class="lineno"> 2830</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml">MockProfilingConnection</a>* mockProfilingConnection = helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a8ccd73b0bb970c18b05a0bc63fcd0279">GetMockProfilingConnection</a>();</div><div class="line"><a name="l02831"></a><span class="lineno"> 2831</span>&#160;    BOOST_CHECK(mockProfilingConnection);</div><div class="line"><a name="l02832"></a><span class="lineno"> 2832</span>&#160;</div><div class="line"><a name="l02833"></a><span class="lineno"> 2833</span>&#160;    <span class="comment">// Wait for the Stream Metadata packet to be sent</span></div><div class="line"><a name="l02834"></a><span class="lineno"> 2834</span>&#160;    <span class="comment">// (we are not testing the connection acknowledgement here so it will be ignored by this test)</span></div><div class="line"><a name="l02835"></a><span class="lineno"> 2835</span>&#160;    helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">WaitForPacketsSent</a>(mockProfilingConnection, PacketType::StreamMetaData);</div><div class="line"><a name="l02836"></a><span class="lineno"> 2836</span>&#160;</div><div class="line"><a name="l02837"></a><span class="lineno"> 2837</span>&#160;    <span class="comment">// Force the profiling service to the &quot;Active&quot; state</span></div><div class="line"><a name="l02838"></a><span class="lineno"> 2838</span>&#160;    helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a03f72b1ccbef21ab7caafb037ce2144c">ForceTransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02839"></a><span class="lineno"> 2839</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02840"></a><span class="lineno"> 2840</span>&#160;</div><div class="line"><a name="l02841"></a><span class="lineno"> 2841</span>&#160;    <span class="comment">// Write a &quot;Periodic Counter Selection&quot; packet into the mock profiling connection, to simulate an input from an</span></div><div class="line"><a name="l02842"></a><span class="lineno"> 2842</span>&#160;    <span class="comment">// external profiling service</span></div><div class="line"><a name="l02843"></a><span class="lineno"> 2843</span>&#160;</div><div class="line"><a name="l02844"></a><span class="lineno"> 2844</span>&#160;    <span class="comment">// Periodic Counter Selection packet header:</span></div><div class="line"><a name="l02845"></a><span class="lineno"> 2845</span>&#160;    <span class="comment">// 26:31 [6]  packet_family: Control Packet Family, value 0b000000</span></div><div class="line"><a name="l02846"></a><span class="lineno"> 2846</span>&#160;    <span class="comment">// 16:25 [10] packet_id: Packet identifier, value 0b0000000100</span></div><div class="line"><a name="l02847"></a><span class="lineno"> 2847</span>&#160;    <span class="comment">// 8:15  [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l02848"></a><span class="lineno"> 2848</span>&#160;    <span class="comment">// 0:7   [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l02849"></a><span class="lineno"> 2849</span>&#160;    uint32_t packetFamily = 0;</div><div class="line"><a name="l02850"></a><span class="lineno"> 2850</span>&#160;    uint32_t packetId     = 4;</div><div class="line"><a name="l02851"></a><span class="lineno"> 2851</span>&#160;    uint32_t header       = ((packetFamily &amp; 0x0000003F) &lt;&lt; 26) | ((packetId &amp; 0x000003FF) &lt;&lt; 16);</div><div class="line"><a name="l02852"></a><span class="lineno"> 2852</span>&#160;</div><div class="line"><a name="l02853"></a><span class="lineno"> 2853</span>&#160;    uint32_t capturePeriod = 123456;    <span class="comment">// Some capture period (microseconds)</span></div><div class="line"><a name="l02854"></a><span class="lineno"> 2854</span>&#160;</div><div class="line"><a name="l02855"></a><span class="lineno"> 2855</span>&#160;    <span class="comment">// Get the first valid counter UID</span></div><div class="line"><a name="l02856"></a><span class="lineno"> 2856</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml">ICounterDirectory</a>&amp; counterDirectory = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#adfaa32654e05eab63b2adc34b2138475">GetCounterDirectory</a>();</div><div class="line"><a name="l02857"></a><span class="lineno"> 2857</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn_1_1profiling.xhtml#aeeb6904ffbae435c8d0a7138427688f4">Counters</a>&amp; counters                  = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#ad9fa9b8364fcaa2c940ef8e78eff8df2">GetCounters</a>();</div><div class="line"><a name="l02858"></a><span class="lineno"> 2858</span>&#160;    BOOST_CHECK(!counters.empty());</div><div class="line"><a name="l02859"></a><span class="lineno"> 2859</span>&#160;    uint16_t counterUid = counters.begin()-&gt;first;    <span class="comment">// Valid counter UID</span></div><div class="line"><a name="l02860"></a><span class="lineno"> 2860</span>&#160;</div><div class="line"><a name="l02861"></a><span class="lineno"> 2861</span>&#160;    uint32_t length = 6;</div><div class="line"><a name="l02862"></a><span class="lineno"> 2862</span>&#160;</div><div class="line"><a name="l02863"></a><span class="lineno"> 2863</span>&#160;    <span class="keyword">auto</span> data = std::make_unique&lt;unsigned char[]&gt;(length);</div><div class="line"><a name="l02864"></a><span class="lineno"> 2864</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(data.get(), 0, capturePeriod);</div><div class="line"><a name="l02865"></a><span class="lineno"> 2865</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#ae5ace88c65e65ab7cf5572613601a60d">WriteUint16</a>(data.get(), 4, counterUid);</div><div class="line"><a name="l02866"></a><span class="lineno"> 2866</span>&#160;</div><div class="line"><a name="l02867"></a><span class="lineno"> 2867</span>&#160;    <span class="comment">// Create the Periodic Counter Selection packet</span></div><div class="line"><a name="l02868"></a><span class="lineno"> 2868</span>&#160;    <span class="comment">// Length &gt; 0, this will start the Period Counter Capture thread</span></div><div class="line"><a name="l02869"></a><span class="lineno"> 2869</span>&#160;    arm::pipe::Packet periodicCounterSelectionPacket(header, length, data);</div><div class="line"><a name="l02870"></a><span class="lineno"> 2870</span>&#160;</div><div class="line"><a name="l02871"></a><span class="lineno"> 2871</span>&#160;    <span class="comment">// Write the packet to the mock profiling connection</span></div><div class="line"><a name="l02872"></a><span class="lineno"> 2872</span>&#160;    mockProfilingConnection-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#a42eb542b5a1d73d00c4ce474140bb78c">WritePacket</a>(std::move(periodicCounterSelectionPacket));</div><div class="line"><a name="l02873"></a><span class="lineno"> 2873</span>&#160;</div><div class="line"><a name="l02874"></a><span class="lineno"> 2874</span>&#160;    <span class="comment">// Expecting one Periodic Counter Selection packet of length 14</span></div><div class="line"><a name="l02875"></a><span class="lineno"> 2875</span>&#160;    <span class="comment">// and at least one Periodic Counter Capture packet of length 22</span></div><div class="line"><a name="l02876"></a><span class="lineno"> 2876</span>&#160;    BOOST_CHECK(helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">WaitForPacketsSent</a>(mockProfilingConnection, PacketType::PeriodicCounterSelection, 14) == 1);</div><div class="line"><a name="l02877"></a><span class="lineno"> 2877</span>&#160;    BOOST_CHECK(helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">WaitForPacketsSent</a>(mockProfilingConnection, PacketType::PeriodicCounterCapture, 22) &gt;= 1);</div><div class="line"><a name="l02878"></a><span class="lineno"> 2878</span>&#160;</div><div class="line"><a name="l02879"></a><span class="lineno"> 2879</span>&#160;    <span class="comment">// The Periodic Counter Selection Handler should not have updated the profiling state</span></div><div class="line"><a name="l02880"></a><span class="lineno"> 2880</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02881"></a><span class="lineno"> 2881</span>&#160;</div><div class="line"><a name="l02882"></a><span class="lineno"> 2882</span>&#160;    <span class="comment">// Reset the profiling service to stop any running thread</span></div><div class="line"><a name="l02883"></a><span class="lineno"> 2883</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02884"></a><span class="lineno"> 2884</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l02885"></a><span class="lineno"> 2885</span>&#160;}</div><div class="line"><a name="l02886"></a><span class="lineno"> 2886</span>&#160;</div><div class="line"><a name="l02887"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a7d502d2055a72797d4753b344891dc87"> 2887</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingServiceGoodPeriodicCounterSelectionPacketMultipleCounters)</div><div class="line"><a name="l02888"></a><span class="lineno"> 2888</span>&#160;{</div><div class="line"><a name="l02889"></a><span class="lineno"> 2889</span>&#160;    <span class="comment">// Reset the profiling service to the uninitialized state</span></div><div class="line"><a name="l02890"></a><span class="lineno"> 2890</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l02891"></a><span class="lineno"> 2891</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>          = <span class="keyword">true</span>;</div><div class="line"><a name="l02892"></a><span class="lineno"> 2892</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l02893"></a><span class="lineno"> 2893</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l02894"></a><span class="lineno"> 2894</span>&#160;</div><div class="line"><a name="l02895"></a><span class="lineno"> 2895</span>&#160;    <span class="comment">// Swap the profiling connection factory in the profiling service instance with our mock one</span></div><div class="line"><a name="l02896"></a><span class="lineno"> 2896</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml">SwapProfilingConnectionFactoryHelper</a> helper(profilingService);</div><div class="line"><a name="l02897"></a><span class="lineno"> 2897</span>&#160;</div><div class="line"><a name="l02898"></a><span class="lineno"> 2898</span>&#160;    <span class="comment">// Bring the profiling service to the &quot;Active&quot; state</span></div><div class="line"><a name="l02899"></a><span class="lineno"> 2899</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l02900"></a><span class="lineno"> 2900</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Initialize the counter directory</span></div><div class="line"><a name="l02901"></a><span class="lineno"> 2901</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l02902"></a><span class="lineno"> 2902</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Create the profiling connection</span></div><div class="line"><a name="l02903"></a><span class="lineno"> 2903</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l02904"></a><span class="lineno"> 2904</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Start the command handler and the send thread</span></div><div class="line"><a name="l02905"></a><span class="lineno"> 2905</span>&#160;</div><div class="line"><a name="l02906"></a><span class="lineno"> 2906</span>&#160;    <span class="comment">// Get the mock profiling connection</span></div><div class="line"><a name="l02907"></a><span class="lineno"> 2907</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml">MockProfilingConnection</a>* mockProfilingConnection = helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a8ccd73b0bb970c18b05a0bc63fcd0279">GetMockProfilingConnection</a>();</div><div class="line"><a name="l02908"></a><span class="lineno"> 2908</span>&#160;    BOOST_CHECK(mockProfilingConnection);</div><div class="line"><a name="l02909"></a><span class="lineno"> 2909</span>&#160;</div><div class="line"><a name="l02910"></a><span class="lineno"> 2910</span>&#160;    <span class="comment">// Wait for the Stream Metadata packet the be sent</span></div><div class="line"><a name="l02911"></a><span class="lineno"> 2911</span>&#160;    <span class="comment">// (we are not testing the connection acknowledgement here so it will be ignored by this test)</span></div><div class="line"><a name="l02912"></a><span class="lineno"> 2912</span>&#160;    helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">WaitForPacketsSent</a>(mockProfilingConnection, PacketType::StreamMetaData);</div><div class="line"><a name="l02913"></a><span class="lineno"> 2913</span>&#160;</div><div class="line"><a name="l02914"></a><span class="lineno"> 2914</span>&#160;    <span class="comment">// Force the profiling service to the &quot;Active&quot; state</span></div><div class="line"><a name="l02915"></a><span class="lineno"> 2915</span>&#160;    helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a03f72b1ccbef21ab7caafb037ce2144c">ForceTransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02916"></a><span class="lineno"> 2916</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02917"></a><span class="lineno"> 2917</span>&#160;</div><div class="line"><a name="l02918"></a><span class="lineno"> 2918</span>&#160;    <span class="comment">// Write a &quot;Periodic Counter Selection&quot; packet into the mock profiling connection, to simulate an input from an</span></div><div class="line"><a name="l02919"></a><span class="lineno"> 2919</span>&#160;    <span class="comment">// external profiling service</span></div><div class="line"><a name="l02920"></a><span class="lineno"> 2920</span>&#160;</div><div class="line"><a name="l02921"></a><span class="lineno"> 2921</span>&#160;    <span class="comment">// Periodic Counter Selection packet header:</span></div><div class="line"><a name="l02922"></a><span class="lineno"> 2922</span>&#160;    <span class="comment">// 26:31 [6]  packet_family: Control Packet Family, value 0b000000</span></div><div class="line"><a name="l02923"></a><span class="lineno"> 2923</span>&#160;    <span class="comment">// 16:25 [10] packet_id: Packet identifier, value 0b0000000100</span></div><div class="line"><a name="l02924"></a><span class="lineno"> 2924</span>&#160;    <span class="comment">// 8:15  [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l02925"></a><span class="lineno"> 2925</span>&#160;    <span class="comment">// 0:7   [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l02926"></a><span class="lineno"> 2926</span>&#160;    uint32_t packetFamily = 0;</div><div class="line"><a name="l02927"></a><span class="lineno"> 2927</span>&#160;    uint32_t packetId     = 4;</div><div class="line"><a name="l02928"></a><span class="lineno"> 2928</span>&#160;    uint32_t header       = ((packetFamily &amp; 0x0000003F) &lt;&lt; 26) | ((packetId &amp; 0x000003FF) &lt;&lt; 16);</div><div class="line"><a name="l02929"></a><span class="lineno"> 2929</span>&#160;</div><div class="line"><a name="l02930"></a><span class="lineno"> 2930</span>&#160;    uint32_t capturePeriod = 123456;    <span class="comment">// Some capture period (microseconds)</span></div><div class="line"><a name="l02931"></a><span class="lineno"> 2931</span>&#160;</div><div class="line"><a name="l02932"></a><span class="lineno"> 2932</span>&#160;    <span class="comment">// Get the first valid counter UID</span></div><div class="line"><a name="l02933"></a><span class="lineno"> 2933</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml">ICounterDirectory</a>&amp; counterDirectory = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#adfaa32654e05eab63b2adc34b2138475">GetCounterDirectory</a>();</div><div class="line"><a name="l02934"></a><span class="lineno"> 2934</span>&#160;    <span class="keyword">const</span> <a class="code" href="namespacearmnn_1_1profiling.xhtml#aeeb6904ffbae435c8d0a7138427688f4">Counters</a>&amp; counters                  = counterDirectory.<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#ad9fa9b8364fcaa2c940ef8e78eff8df2">GetCounters</a>();</div><div class="line"><a name="l02935"></a><span class="lineno"> 2935</span>&#160;    BOOST_CHECK(counters.size() &gt; 1);</div><div class="line"><a name="l02936"></a><span class="lineno"> 2936</span>&#160;    uint16_t counterUidA = counters.begin()-&gt;first;        <span class="comment">// First valid counter UID</span></div><div class="line"><a name="l02937"></a><span class="lineno"> 2937</span>&#160;    uint16_t counterUidB = (counters.begin()++)-&gt;first;    <span class="comment">// Second valid counter UID</span></div><div class="line"><a name="l02938"></a><span class="lineno"> 2938</span>&#160;</div><div class="line"><a name="l02939"></a><span class="lineno"> 2939</span>&#160;    uint32_t length = 8;</div><div class="line"><a name="l02940"></a><span class="lineno"> 2940</span>&#160;</div><div class="line"><a name="l02941"></a><span class="lineno"> 2941</span>&#160;    <span class="keyword">auto</span> data = std::make_unique&lt;unsigned char[]&gt;(length);</div><div class="line"><a name="l02942"></a><span class="lineno"> 2942</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#a3e638748a39d46e2943dfcef94dcb828">WriteUint32</a>(data.get(), 0, capturePeriod);</div><div class="line"><a name="l02943"></a><span class="lineno"> 2943</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#ae5ace88c65e65ab7cf5572613601a60d">WriteUint16</a>(data.get(), 4, counterUidA);</div><div class="line"><a name="l02944"></a><span class="lineno"> 2944</span>&#160;    <a class="code" href="namespacearmnn_1_1profiling.xhtml#ae5ace88c65e65ab7cf5572613601a60d">WriteUint16</a>(data.get(), 6, counterUidB);</div><div class="line"><a name="l02945"></a><span class="lineno"> 2945</span>&#160;</div><div class="line"><a name="l02946"></a><span class="lineno"> 2946</span>&#160;    <span class="comment">// Create the Periodic Counter Selection packet</span></div><div class="line"><a name="l02947"></a><span class="lineno"> 2947</span>&#160;    <span class="comment">// Length &gt; 0, this will start the Period Counter Capture thread</span></div><div class="line"><a name="l02948"></a><span class="lineno"> 2948</span>&#160;    arm::pipe::Packet periodicCounterSelectionPacket(header, length, data);</div><div class="line"><a name="l02949"></a><span class="lineno"> 2949</span>&#160;</div><div class="line"><a name="l02950"></a><span class="lineno"> 2950</span>&#160;    <span class="comment">// Write the packet to the mock profiling connection</span></div><div class="line"><a name="l02951"></a><span class="lineno"> 2951</span>&#160;    mockProfilingConnection-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#a42eb542b5a1d73d00c4ce474140bb78c">WritePacket</a>(std::move(periodicCounterSelectionPacket));</div><div class="line"><a name="l02952"></a><span class="lineno"> 2952</span>&#160;</div><div class="line"><a name="l02953"></a><span class="lineno"> 2953</span>&#160;    <span class="comment">// Expecting one PeriodicCounterSelection Packet with a length of 16</span></div><div class="line"><a name="l02954"></a><span class="lineno"> 2954</span>&#160;    <span class="comment">// And at least one PeriodicCounterCapture Packet with a length of 28</span></div><div class="line"><a name="l02955"></a><span class="lineno"> 2955</span>&#160;    BOOST_CHECK(helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">WaitForPacketsSent</a>(mockProfilingConnection, PacketType::PeriodicCounterSelection, 16) == 1);</div><div class="line"><a name="l02956"></a><span class="lineno"> 2956</span>&#160;    BOOST_CHECK(helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">WaitForPacketsSent</a>(mockProfilingConnection, PacketType::PeriodicCounterCapture, 28) &gt;= 1);</div><div class="line"><a name="l02957"></a><span class="lineno"> 2957</span>&#160;</div><div class="line"><a name="l02958"></a><span class="lineno"> 2958</span>&#160;    <span class="comment">// The Periodic Counter Selection Handler should not have updated the profiling state</span></div><div class="line"><a name="l02959"></a><span class="lineno"> 2959</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l02960"></a><span class="lineno"> 2960</span>&#160;</div><div class="line"><a name="l02961"></a><span class="lineno"> 2961</span>&#160;    <span class="comment">// Reset the profiling service to stop any running thread</span></div><div class="line"><a name="l02962"></a><span class="lineno"> 2962</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l02963"></a><span class="lineno"> 2963</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l02964"></a><span class="lineno"> 2964</span>&#160;}</div><div class="line"><a name="l02965"></a><span class="lineno"> 2965</span>&#160;</div><div class="line"><a name="l02966"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a6e8c5af299a4b6d37d45d2b71459f179"> 2966</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingServiceDisconnect)</div><div class="line"><a name="l02967"></a><span class="lineno"> 2967</span>&#160;{</div><div class="line"><a name="l02968"></a><span class="lineno"> 2968</span>&#160;    <span class="comment">// Reset the profiling service to the uninitialized state</span></div><div class="line"><a name="l02969"></a><span class="lineno"> 2969</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l02970"></a><span class="lineno"> 2970</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>          = <span class="keyword">true</span>;</div><div class="line"><a name="l02971"></a><span class="lineno"> 2971</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l02972"></a><span class="lineno"> 2972</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l02973"></a><span class="lineno"> 2973</span>&#160;</div><div class="line"><a name="l02974"></a><span class="lineno"> 2974</span>&#160;    <span class="comment">// Swap the profiling connection factory in the profiling service instance with our mock one</span></div><div class="line"><a name="l02975"></a><span class="lineno"> 2975</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml">SwapProfilingConnectionFactoryHelper</a> helper(profilingService);</div><div class="line"><a name="l02976"></a><span class="lineno"> 2976</span>&#160;</div><div class="line"><a name="l02977"></a><span class="lineno"> 2977</span>&#160;    <span class="comment">// Try to disconnect the profiling service while in the &quot;Uninitialised&quot; state</span></div><div class="line"><a name="l02978"></a><span class="lineno"> 2978</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l02979"></a><span class="lineno"> 2979</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a65d18fa17ec0238d7e72f6c8f5c880b6">Disconnect</a>();</div><div class="line"><a name="l02980"></a><span class="lineno"> 2980</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);    <span class="comment">// The state should not change</span></div><div class="line"><a name="l02981"></a><span class="lineno"> 2981</span>&#160;</div><div class="line"><a name="l02982"></a><span class="lineno"> 2982</span>&#160;    <span class="comment">// Try to disconnect the profiling service while in the &quot;NotConnected&quot; state</span></div><div class="line"><a name="l02983"></a><span class="lineno"> 2983</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Initialize the counter directory</span></div><div class="line"><a name="l02984"></a><span class="lineno"> 2984</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l02985"></a><span class="lineno"> 2985</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a65d18fa17ec0238d7e72f6c8f5c880b6">Disconnect</a>();</div><div class="line"><a name="l02986"></a><span class="lineno"> 2986</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);    <span class="comment">// The state should not change</span></div><div class="line"><a name="l02987"></a><span class="lineno"> 2987</span>&#160;</div><div class="line"><a name="l02988"></a><span class="lineno"> 2988</span>&#160;    <span class="comment">// Try to disconnect the profiling service while in the &quot;WaitingForAck&quot; state</span></div><div class="line"><a name="l02989"></a><span class="lineno"> 2989</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Create the profiling connection</span></div><div class="line"><a name="l02990"></a><span class="lineno"> 2990</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l02991"></a><span class="lineno"> 2991</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a65d18fa17ec0238d7e72f6c8f5c880b6">Disconnect</a>();</div><div class="line"><a name="l02992"></a><span class="lineno"> 2992</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);    <span class="comment">// The state should not change</span></div><div class="line"><a name="l02993"></a><span class="lineno"> 2993</span>&#160;</div><div class="line"><a name="l02994"></a><span class="lineno"> 2994</span>&#160;    <span class="comment">// Try to disconnect the profiling service while in the &quot;Active&quot; state</span></div><div class="line"><a name="l02995"></a><span class="lineno"> 2995</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Start the command handler and the send thread</span></div><div class="line"><a name="l02996"></a><span class="lineno"> 2996</span>&#160;</div><div class="line"><a name="l02997"></a><span class="lineno"> 2997</span>&#160;    <span class="comment">// Get the mock profiling connection</span></div><div class="line"><a name="l02998"></a><span class="lineno"> 2998</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml">MockProfilingConnection</a>* mockProfilingConnection = helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a8ccd73b0bb970c18b05a0bc63fcd0279">GetMockProfilingConnection</a>();</div><div class="line"><a name="l02999"></a><span class="lineno"> 2999</span>&#160;    BOOST_CHECK(mockProfilingConnection);</div><div class="line"><a name="l03000"></a><span class="lineno"> 3000</span>&#160;</div><div class="line"><a name="l03001"></a><span class="lineno"> 3001</span>&#160;    <span class="comment">// Wait for the Stream Metadata packet the be sent</span></div><div class="line"><a name="l03002"></a><span class="lineno"> 3002</span>&#160;    <span class="comment">// (we are not testing the connection acknowledgement here so it will be ignored by this test)</span></div><div class="line"><a name="l03003"></a><span class="lineno"> 3003</span>&#160;    helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">WaitForPacketsSent</a>(mockProfilingConnection, PacketType::StreamMetaData);</div><div class="line"><a name="l03004"></a><span class="lineno"> 3004</span>&#160;</div><div class="line"><a name="l03005"></a><span class="lineno"> 3005</span>&#160;    <span class="comment">// Force the profiling service to the &quot;Active&quot; state</span></div><div class="line"><a name="l03006"></a><span class="lineno"> 3006</span>&#160;    helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a03f72b1ccbef21ab7caafb037ce2144c">ForceTransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l03007"></a><span class="lineno"> 3007</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l03008"></a><span class="lineno"> 3008</span>&#160;</div><div class="line"><a name="l03009"></a><span class="lineno"> 3009</span>&#160;    <span class="comment">// Check that the profiling connection is open</span></div><div class="line"><a name="l03010"></a><span class="lineno"> 3010</span>&#160;    BOOST_CHECK(mockProfilingConnection-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#a91bdc9d5497d47f5d707418beb83b140">IsOpen</a>());</div><div class="line"><a name="l03011"></a><span class="lineno"> 3011</span>&#160;</div><div class="line"><a name="l03012"></a><span class="lineno"> 3012</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a65d18fa17ec0238d7e72f6c8f5c880b6">Disconnect</a>();</div><div class="line"><a name="l03013"></a><span class="lineno"> 3013</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);   <span class="comment">// The state should have changed</span></div><div class="line"><a name="l03014"></a><span class="lineno"> 3014</span>&#160;</div><div class="line"><a name="l03015"></a><span class="lineno"> 3015</span>&#160;    <span class="comment">// Check that the profiling connection has been reset</span></div><div class="line"><a name="l03016"></a><span class="lineno"> 3016</span>&#160;    mockProfilingConnection = helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a8ccd73b0bb970c18b05a0bc63fcd0279">GetMockProfilingConnection</a>();</div><div class="line"><a name="l03017"></a><span class="lineno"> 3017</span>&#160;    BOOST_CHECK(mockProfilingConnection == <span class="keyword">nullptr</span>);</div><div class="line"><a name="l03018"></a><span class="lineno"> 3018</span>&#160;</div><div class="line"><a name="l03019"></a><span class="lineno"> 3019</span>&#160;    <span class="comment">// Reset the profiling service to stop any running thread</span></div><div class="line"><a name="l03020"></a><span class="lineno"> 3020</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l03021"></a><span class="lineno"> 3021</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l03022"></a><span class="lineno"> 3022</span>&#160;}</div><div class="line"><a name="l03023"></a><span class="lineno"> 3023</span>&#160;</div><div class="line"><a name="l03024"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a4a4fce8bf84cceca7a4e31f5f6a43cd9"> 3024</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingServiceGoodPerJobCounterSelectionPacket)</div><div class="line"><a name="l03025"></a><span class="lineno"> 3025</span>&#160;{</div><div class="line"><a name="l03026"></a><span class="lineno"> 3026</span>&#160;    <span class="comment">// Reset the profiling service to the uninitialized state</span></div><div class="line"><a name="l03027"></a><span class="lineno"> 3027</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l03028"></a><span class="lineno"> 3028</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>          = <span class="keyword">true</span>;</div><div class="line"><a name="l03029"></a><span class="lineno"> 3029</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l03030"></a><span class="lineno"> 3030</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l03031"></a><span class="lineno"> 3031</span>&#160;</div><div class="line"><a name="l03032"></a><span class="lineno"> 3032</span>&#160;    <span class="comment">// Swap the profiling connection factory in the profiling service instance with our mock one</span></div><div class="line"><a name="l03033"></a><span class="lineno"> 3033</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml">SwapProfilingConnectionFactoryHelper</a> helper(profilingService);</div><div class="line"><a name="l03034"></a><span class="lineno"> 3034</span>&#160;</div><div class="line"><a name="l03035"></a><span class="lineno"> 3035</span>&#160;    <span class="comment">// Bring the profiling service to the &quot;Active&quot; state</span></div><div class="line"><a name="l03036"></a><span class="lineno"> 3036</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l03037"></a><span class="lineno"> 3037</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Initialize the counter directory</span></div><div class="line"><a name="l03038"></a><span class="lineno"> 3038</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l03039"></a><span class="lineno"> 3039</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Create the profiling connection</span></div><div class="line"><a name="l03040"></a><span class="lineno"> 3040</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l03041"></a><span class="lineno"> 3041</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Start the command handler and the send thread</span></div><div class="line"><a name="l03042"></a><span class="lineno"> 3042</span>&#160;</div><div class="line"><a name="l03043"></a><span class="lineno"> 3043</span>&#160;    <span class="comment">// Get the mock profiling connection</span></div><div class="line"><a name="l03044"></a><span class="lineno"> 3044</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml">MockProfilingConnection</a>* mockProfilingConnection = helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a8ccd73b0bb970c18b05a0bc63fcd0279">GetMockProfilingConnection</a>();</div><div class="line"><a name="l03045"></a><span class="lineno"> 3045</span>&#160;    BOOST_CHECK(mockProfilingConnection);</div><div class="line"><a name="l03046"></a><span class="lineno"> 3046</span>&#160;</div><div class="line"><a name="l03047"></a><span class="lineno"> 3047</span>&#160;    <span class="comment">// Wait for the Stream Metadata packet the be sent</span></div><div class="line"><a name="l03048"></a><span class="lineno"> 3048</span>&#160;    <span class="comment">// (we are not testing the connection acknowledgement here so it will be ignored by this test)</span></div><div class="line"><a name="l03049"></a><span class="lineno"> 3049</span>&#160;    helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">WaitForPacketsSent</a>(mockProfilingConnection, PacketType::StreamMetaData);</div><div class="line"><a name="l03050"></a><span class="lineno"> 3050</span>&#160;</div><div class="line"><a name="l03051"></a><span class="lineno"> 3051</span>&#160;    <span class="comment">// Force the profiling service to the &quot;Active&quot; state</span></div><div class="line"><a name="l03052"></a><span class="lineno"> 3052</span>&#160;    helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a03f72b1ccbef21ab7caafb037ce2144c">ForceTransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l03053"></a><span class="lineno"> 3053</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l03054"></a><span class="lineno"> 3054</span>&#160;</div><div class="line"><a name="l03055"></a><span class="lineno"> 3055</span>&#160;    <span class="comment">// Write a &quot;Per-Job Counter Selection&quot; packet into the mock profiling connection, to simulate an input from an</span></div><div class="line"><a name="l03056"></a><span class="lineno"> 3056</span>&#160;    <span class="comment">// external profiling service</span></div><div class="line"><a name="l03057"></a><span class="lineno"> 3057</span>&#160;</div><div class="line"><a name="l03058"></a><span class="lineno"> 3058</span>&#160;    <span class="comment">// Per-Job Counter Selection packet header:</span></div><div class="line"><a name="l03059"></a><span class="lineno"> 3059</span>&#160;    <span class="comment">// 26:31 [6]  packet_family: Control Packet Family, value 0b000000</span></div><div class="line"><a name="l03060"></a><span class="lineno"> 3060</span>&#160;    <span class="comment">// 16:25 [10] packet_id: Packet identifier, value 0b0000000100</span></div><div class="line"><a name="l03061"></a><span class="lineno"> 3061</span>&#160;    <span class="comment">// 8:15  [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l03062"></a><span class="lineno"> 3062</span>&#160;    <span class="comment">// 0:7   [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l03063"></a><span class="lineno"> 3063</span>&#160;    uint32_t packetFamily = 0;</div><div class="line"><a name="l03064"></a><span class="lineno"> 3064</span>&#160;    uint32_t packetId     = 5;</div><div class="line"><a name="l03065"></a><span class="lineno"> 3065</span>&#160;    uint32_t header       = ((packetFamily &amp; 0x0000003F) &lt;&lt; 26) | ((packetId &amp; 0x000003FF) &lt;&lt; 16);</div><div class="line"><a name="l03066"></a><span class="lineno"> 3066</span>&#160;</div><div class="line"><a name="l03067"></a><span class="lineno"> 3067</span>&#160;    <span class="comment">// Create the Per-Job Counter Selection packet</span></div><div class="line"><a name="l03068"></a><span class="lineno"> 3068</span>&#160;    <span class="comment">// Length == 0, this will disable the collection of counters</span></div><div class="line"><a name="l03069"></a><span class="lineno"> 3069</span>&#160;    arm::pipe::Packet periodicCounterSelectionPacket(header);</div><div class="line"><a name="l03070"></a><span class="lineno"> 3070</span>&#160;</div><div class="line"><a name="l03071"></a><span class="lineno"> 3071</span>&#160;    <span class="comment">// Write the packet to the mock profiling connection</span></div><div class="line"><a name="l03072"></a><span class="lineno"> 3072</span>&#160;    mockProfilingConnection-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#a42eb542b5a1d73d00c4ce474140bb78c">WritePacket</a>(std::move(periodicCounterSelectionPacket));</div><div class="line"><a name="l03073"></a><span class="lineno"> 3073</span>&#160;</div><div class="line"><a name="l03074"></a><span class="lineno"> 3074</span>&#160;    <span class="comment">// Wait for a bit (must at least be the delay value of the mock profiling connection) to make sure that</span></div><div class="line"><a name="l03075"></a><span class="lineno"> 3075</span>&#160;    <span class="comment">// the Per-Job Counter Selection packet gets processed by the profiling service</span></div><div class="line"><a name="l03076"></a><span class="lineno"> 3076</span>&#160;    std::this_thread::sleep_for(std::chrono::milliseconds(5));</div><div class="line"><a name="l03077"></a><span class="lineno"> 3077</span>&#160;</div><div class="line"><a name="l03078"></a><span class="lineno"> 3078</span>&#160;    <span class="comment">// The Per-Job Counter Selection Command Handler should not have updated the profiling state</span></div><div class="line"><a name="l03079"></a><span class="lineno"> 3079</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">ProfilingState::Active</a>);</div><div class="line"><a name="l03080"></a><span class="lineno"> 3080</span>&#160;</div><div class="line"><a name="l03081"></a><span class="lineno"> 3081</span>&#160;    <span class="comment">// The Per-Job Counter Selection packets are dropped silently, so there should be no reply coming</span></div><div class="line"><a name="l03082"></a><span class="lineno"> 3082</span>&#160;    <span class="comment">// from the profiling service</span></div><div class="line"><a name="l03083"></a><span class="lineno"> 3083</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> StreamMetaDataSize = <span class="keyword">static_cast&lt;</span><span class="keywordtype">unsigned</span> <span class="keywordtype">long</span><span class="keyword">&gt;</span>(</div><div class="line"><a name="l03084"></a><span class="lineno"> 3084</span>&#160;            helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">WaitForPacketsSent</a>(mockProfilingConnection, PacketType::StreamMetaData, 0, 0));</div><div class="line"><a name="l03085"></a><span class="lineno"> 3085</span>&#160;    BOOST_CHECK(StreamMetaDataSize == mockProfilingConnection-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#adc32d741a992ea6f9af3f9e65aebf34d">GetWrittenDataSize</a>());</div><div class="line"><a name="l03086"></a><span class="lineno"> 3086</span>&#160;</div><div class="line"><a name="l03087"></a><span class="lineno"> 3087</span>&#160;    <span class="comment">// Reset the profiling service to stop any running thread</span></div><div class="line"><a name="l03088"></a><span class="lineno"> 3088</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l03089"></a><span class="lineno"> 3089</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l03090"></a><span class="lineno"> 3090</span>&#160;}</div><div class="line"><a name="l03091"></a><span class="lineno"> 3091</span>&#160;</div><div class="line"><a name="l03092"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a79ba3794f787183d8de0668425686073"> 3092</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckConfigureProfilingServiceOn)</div><div class="line"><a name="l03093"></a><span class="lineno"> 3093</span>&#160;{</div><div class="line"><a name="l03094"></a><span class="lineno"> 3094</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l03095"></a><span class="lineno"> 3095</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>          = <span class="keyword">true</span>;</div><div class="line"><a name="l03096"></a><span class="lineno"> 3096</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l03097"></a><span class="lineno"> 3097</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l03098"></a><span class="lineno"> 3098</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a004992fdba75e298495d6b628234a4bd">ConfigureProfilingService</a>(options);</div><div class="line"><a name="l03099"></a><span class="lineno"> 3099</span>&#160;    <span class="comment">// should get as far as NOT_CONNECTED</span></div><div class="line"><a name="l03100"></a><span class="lineno"> 3100</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l03101"></a><span class="lineno"> 3101</span>&#160;    <span class="comment">// Reset the profiling service to stop any running thread</span></div><div class="line"><a name="l03102"></a><span class="lineno"> 3102</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l03103"></a><span class="lineno"> 3103</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l03104"></a><span class="lineno"> 3104</span>&#160;}</div><div class="line"><a name="l03105"></a><span class="lineno"> 3105</span>&#160;</div><div class="line"><a name="l03106"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a9ecce5c2c01dacfdb6d7030f84880d1e"> 3106</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckConfigureProfilingServiceOff)</div><div class="line"><a name="l03107"></a><span class="lineno"> 3107</span>&#160;{</div><div class="line"><a name="l03108"></a><span class="lineno"> 3108</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l03109"></a><span class="lineno"> 3109</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l03110"></a><span class="lineno"> 3110</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l03111"></a><span class="lineno"> 3111</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a004992fdba75e298495d6b628234a4bd">ConfigureProfilingService</a>(options);</div><div class="line"><a name="l03112"></a><span class="lineno"> 3112</span>&#160;    <span class="comment">// should not move from Uninitialised</span></div><div class="line"><a name="l03113"></a><span class="lineno"> 3113</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l03114"></a><span class="lineno"> 3114</span>&#160;    <span class="comment">// Reset the profiling service to stop any running thread</span></div><div class="line"><a name="l03115"></a><span class="lineno"> 3115</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l03116"></a><span class="lineno"> 3116</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l03117"></a><span class="lineno"> 3117</span>&#160;}</div><div class="line"><a name="l03118"></a><span class="lineno"> 3118</span>&#160;</div><div class="line"><a name="l03119"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a6a67deff78089cc7374b380207e20347"> 3119</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingServiceEnabled)</div><div class="line"><a name="l03120"></a><span class="lineno"> 3120</span>&#160;{</div><div class="line"><a name="l03121"></a><span class="lineno"> 3121</span>&#160;    <span class="comment">// Locally reduce log level to &quot;Warning&quot;, as this test needs to parse a warning message from the standard output</span></div><div class="line"><a name="l03122"></a><span class="lineno"> 3122</span>&#160;    <a class="code" href="structarmnn_1_1profiling_1_1_log_level_swapper.xhtml">LogLevelSwapper</a> logLevelSwapper(<a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">armnn::LogSeverity::Warning</a>);</div><div class="line"><a name="l03123"></a><span class="lineno"> 3123</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l03124"></a><span class="lineno"> 3124</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>          = <span class="keyword">true</span>;</div><div class="line"><a name="l03125"></a><span class="lineno"> 3125</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l03126"></a><span class="lineno"> 3126</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l03127"></a><span class="lineno"> 3127</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l03128"></a><span class="lineno"> 3128</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();</div><div class="line"><a name="l03129"></a><span class="lineno"> 3129</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l03130"></a><span class="lineno"> 3130</span>&#160;</div><div class="line"><a name="l03131"></a><span class="lineno"> 3131</span>&#160;    <span class="comment">// Redirect the output to a local stream so that we can parse the warning message</span></div><div class="line"><a name="l03132"></a><span class="lineno"> 3132</span>&#160;    std::stringstream ss;</div><div class="line"><a name="l03133"></a><span class="lineno"> 3133</span>&#160;    <a class="code" href="structarmnn_1_1profiling_1_1_stream_redirector.xhtml">StreamRedirector</a> streamRedirector(std::cout, ss.rdbuf());</div><div class="line"><a name="l03134"></a><span class="lineno"> 3134</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();</div><div class="line"><a name="l03135"></a><span class="lineno"> 3135</span>&#160;</div><div class="line"><a name="l03136"></a><span class="lineno"> 3136</span>&#160;    <span class="comment">// Reset the profiling service to stop any running thread</span></div><div class="line"><a name="l03137"></a><span class="lineno"> 3137</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l03138"></a><span class="lineno"> 3138</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l03139"></a><span class="lineno"> 3139</span>&#160;</div><div class="line"><a name="l03140"></a><span class="lineno"> 3140</span>&#160;    streamRedirector.CancelRedirect();</div><div class="line"><a name="l03141"></a><span class="lineno"> 3141</span>&#160;</div><div class="line"><a name="l03142"></a><span class="lineno"> 3142</span>&#160;    <span class="comment">// Check that the expected error has occurred and logged to the standard output</span></div><div class="line"><a name="l03143"></a><span class="lineno"> 3143</span>&#160;    <span class="keywordflow">if</span> (ss.str().find(<span class="stringliteral">&quot;Cannot connect to stream socket: Connection refused&quot;</span>) == std::string::npos)</div><div class="line"><a name="l03144"></a><span class="lineno"> 3144</span>&#160;    {</div><div class="line"><a name="l03145"></a><span class="lineno"> 3145</span>&#160;        std::cout &lt;&lt; ss.str();</div><div class="line"><a name="l03146"></a><span class="lineno"> 3146</span>&#160;        BOOST_FAIL(<span class="stringliteral">&quot;Expected string not found.&quot;</span>);</div><div class="line"><a name="l03147"></a><span class="lineno"> 3147</span>&#160;    }</div><div class="line"><a name="l03148"></a><span class="lineno"> 3148</span>&#160;}</div><div class="line"><a name="l03149"></a><span class="lineno"> 3149</span>&#160;</div><div class="line"><a name="l03150"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a8ef5ab4264edcd049568ae2dc594ddaf"> 3150</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingServiceEnabledRuntime)</div><div class="line"><a name="l03151"></a><span class="lineno"> 3151</span>&#160;{</div><div class="line"><a name="l03152"></a><span class="lineno"> 3152</span>&#160;    <span class="comment">// Locally reduce log level to &quot;Warning&quot;, as this test needs to parse a warning message from the standard output</span></div><div class="line"><a name="l03153"></a><span class="lineno"> 3153</span>&#160;    <a class="code" href="structarmnn_1_1profiling_1_1_log_level_swapper.xhtml">LogLevelSwapper</a> logLevelSwapper(<a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">armnn::LogSeverity::Warning</a>);</div><div class="line"><a name="l03154"></a><span class="lineno"> 3154</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l03155"></a><span class="lineno"> 3155</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l03156"></a><span class="lineno"> 3156</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l03157"></a><span class="lineno"> 3157</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l03158"></a><span class="lineno"> 3158</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();</div><div class="line"><a name="l03159"></a><span class="lineno"> 3159</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l03160"></a><span class="lineno"> 3160</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l03161"></a><span class="lineno"> 3161</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options);</div><div class="line"><a name="l03162"></a><span class="lineno"> 3162</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l03163"></a><span class="lineno"> 3163</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();</div><div class="line"><a name="l03164"></a><span class="lineno"> 3164</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l03165"></a><span class="lineno"> 3165</span>&#160;</div><div class="line"><a name="l03166"></a><span class="lineno"> 3166</span>&#160;    <span class="comment">// Redirect the output to a local stream so that we can parse the warning message</span></div><div class="line"><a name="l03167"></a><span class="lineno"> 3167</span>&#160;    std::stringstream ss;</div><div class="line"><a name="l03168"></a><span class="lineno"> 3168</span>&#160;    <a class="code" href="structarmnn_1_1profiling_1_1_stream_redirector.xhtml">StreamRedirector</a> streamRedirector(std::cout, ss.rdbuf());</div><div class="line"><a name="l03169"></a><span class="lineno"> 3169</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();</div><div class="line"><a name="l03170"></a><span class="lineno"> 3170</span>&#160;</div><div class="line"><a name="l03171"></a><span class="lineno"> 3171</span>&#160;    <span class="comment">// Reset the profiling service to stop any running thread</span></div><div class="line"><a name="l03172"></a><span class="lineno"> 3172</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l03173"></a><span class="lineno"> 3173</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l03174"></a><span class="lineno"> 3174</span>&#160;</div><div class="line"><a name="l03175"></a><span class="lineno"> 3175</span>&#160;    streamRedirector.CancelRedirect();</div><div class="line"><a name="l03176"></a><span class="lineno"> 3176</span>&#160;</div><div class="line"><a name="l03177"></a><span class="lineno"> 3177</span>&#160;    <span class="comment">// Check that the expected error has occurred and logged to the standard output</span></div><div class="line"><a name="l03178"></a><span class="lineno"> 3178</span>&#160;    <span class="keywordflow">if</span> (ss.str().find(<span class="stringliteral">&quot;Cannot connect to stream socket: Connection refused&quot;</span>) == std::string::npos)</div><div class="line"><a name="l03179"></a><span class="lineno"> 3179</span>&#160;    {</div><div class="line"><a name="l03180"></a><span class="lineno"> 3180</span>&#160;        std::cout &lt;&lt; ss.str();</div><div class="line"><a name="l03181"></a><span class="lineno"> 3181</span>&#160;        BOOST_FAIL(<span class="stringliteral">&quot;Expected string not found.&quot;</span>);</div><div class="line"><a name="l03182"></a><span class="lineno"> 3182</span>&#160;    }</div><div class="line"><a name="l03183"></a><span class="lineno"> 3183</span>&#160;}</div><div class="line"><a name="l03184"></a><span class="lineno"> 3184</span>&#160;</div><div class="line"><a name="l03185"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a77b72c2a50797bcb6cdf444262891c8f"> 3185</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingServiceBadConnectionAcknowledgedPacket)</div><div class="line"><a name="l03186"></a><span class="lineno"> 3186</span>&#160;{</div><div class="line"><a name="l03187"></a><span class="lineno"> 3187</span>&#160;    <span class="comment">// Locally reduce log level to &quot;Warning&quot;, as this test needs to parse a warning message from the standard output</span></div><div class="line"><a name="l03188"></a><span class="lineno"> 3188</span>&#160;    <a class="code" href="structarmnn_1_1profiling_1_1_log_level_swapper.xhtml">LogLevelSwapper</a> logLevelSwapper(<a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">armnn::LogSeverity::Warning</a>);</div><div class="line"><a name="l03189"></a><span class="lineno"> 3189</span>&#160;</div><div class="line"><a name="l03190"></a><span class="lineno"> 3190</span>&#160;</div><div class="line"><a name="l03191"></a><span class="lineno"> 3191</span>&#160;    <span class="comment">// Redirect the standard output to a local stream so that we can parse the warning message</span></div><div class="line"><a name="l03192"></a><span class="lineno"> 3192</span>&#160;    std::stringstream ss;</div><div class="line"><a name="l03193"></a><span class="lineno"> 3193</span>&#160;    <a class="code" href="structarmnn_1_1profiling_1_1_stream_redirector.xhtml">StreamRedirector</a> streamRedirector(std::cout, ss.rdbuf());</div><div class="line"><a name="l03194"></a><span class="lineno"> 3194</span>&#160;</div><div class="line"><a name="l03195"></a><span class="lineno"> 3195</span>&#160;    <span class="comment">// Reset the profiling service to the uninitialized state</span></div><div class="line"><a name="l03196"></a><span class="lineno"> 3196</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l03197"></a><span class="lineno"> 3197</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>          = <span class="keyword">true</span>;</div><div class="line"><a name="l03198"></a><span class="lineno"> 3198</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l03199"></a><span class="lineno"> 3199</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l03200"></a><span class="lineno"> 3200</span>&#160;</div><div class="line"><a name="l03201"></a><span class="lineno"> 3201</span>&#160;    <span class="comment">// Swap the profiling connection factory in the profiling service instance with our mock one</span></div><div class="line"><a name="l03202"></a><span class="lineno"> 3202</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml">SwapProfilingConnectionFactoryHelper</a> helper(profilingService);</div><div class="line"><a name="l03203"></a><span class="lineno"> 3203</span>&#160;</div><div class="line"><a name="l03204"></a><span class="lineno"> 3204</span>&#160;    <span class="comment">// Bring the profiling service to the &quot;WaitingForAck&quot; state</span></div><div class="line"><a name="l03205"></a><span class="lineno"> 3205</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l03206"></a><span class="lineno"> 3206</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Initialize the counter directory</span></div><div class="line"><a name="l03207"></a><span class="lineno"> 3207</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l03208"></a><span class="lineno"> 3208</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Create the profiling connection</span></div><div class="line"><a name="l03209"></a><span class="lineno"> 3209</span>&#160;</div><div class="line"><a name="l03210"></a><span class="lineno"> 3210</span>&#160;    <span class="comment">// Get the mock profiling connection</span></div><div class="line"><a name="l03211"></a><span class="lineno"> 3211</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml">MockProfilingConnection</a>* mockProfilingConnection = helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a8ccd73b0bb970c18b05a0bc63fcd0279">GetMockProfilingConnection</a>();</div><div class="line"><a name="l03212"></a><span class="lineno"> 3212</span>&#160;    BOOST_CHECK(mockProfilingConnection);</div><div class="line"><a name="l03213"></a><span class="lineno"> 3213</span>&#160;</div><div class="line"><a name="l03214"></a><span class="lineno"> 3214</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l03215"></a><span class="lineno"> 3215</span>&#160;</div><div class="line"><a name="l03216"></a><span class="lineno"> 3216</span>&#160;    <span class="comment">// Connection Acknowledged Packet header (word 0, word 1 is always zero):</span></div><div class="line"><a name="l03217"></a><span class="lineno"> 3217</span>&#160;    <span class="comment">// 26:31 [6]  packet_family: Control Packet Family, value 0b000000</span></div><div class="line"><a name="l03218"></a><span class="lineno"> 3218</span>&#160;    <span class="comment">// 16:25 [10] packet_id: Packet identifier, value 0b0000000001</span></div><div class="line"><a name="l03219"></a><span class="lineno"> 3219</span>&#160;    <span class="comment">// 8:15  [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l03220"></a><span class="lineno"> 3220</span>&#160;    <span class="comment">// 0:7   [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l03221"></a><span class="lineno"> 3221</span>&#160;    uint32_t packetFamily = 0;</div><div class="line"><a name="l03222"></a><span class="lineno"> 3222</span>&#160;    uint32_t packetId     = 37;    <span class="comment">// Wrong packet id!!!</span></div><div class="line"><a name="l03223"></a><span class="lineno"> 3223</span>&#160;    uint32_t header       = ((packetFamily &amp; 0x0000003F) &lt;&lt; 26) | ((packetId &amp; 0x000003FF) &lt;&lt; 16);</div><div class="line"><a name="l03224"></a><span class="lineno"> 3224</span>&#160;</div><div class="line"><a name="l03225"></a><span class="lineno"> 3225</span>&#160;    <span class="comment">// Create the Connection Acknowledged Packet</span></div><div class="line"><a name="l03226"></a><span class="lineno"> 3226</span>&#160;    arm::pipe::Packet connectionAcknowledgedPacket(header);</div><div class="line"><a name="l03227"></a><span class="lineno"> 3227</span>&#160;    <span class="comment">// Write an invalid &quot;Connection Acknowledged&quot; packet into the mock profiling connection, to simulate an invalid</span></div><div class="line"><a name="l03228"></a><span class="lineno"> 3228</span>&#160;    <span class="comment">// reply from an external profiling service</span></div><div class="line"><a name="l03229"></a><span class="lineno"> 3229</span>&#160;    mockProfilingConnection-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#a42eb542b5a1d73d00c4ce474140bb78c">WritePacket</a>(std::move(connectionAcknowledgedPacket));</div><div class="line"><a name="l03230"></a><span class="lineno"> 3230</span>&#160;</div><div class="line"><a name="l03231"></a><span class="lineno"> 3231</span>&#160;    <span class="comment">// Start the command thread</span></div><div class="line"><a name="l03232"></a><span class="lineno"> 3232</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();</div><div class="line"><a name="l03233"></a><span class="lineno"> 3233</span>&#160;</div><div class="line"><a name="l03234"></a><span class="lineno"> 3234</span>&#160;    <span class="comment">// Wait for the command thread to join</span></div><div class="line"><a name="l03235"></a><span class="lineno"> 3235</span>&#160;    options.m_EnableProfiling = <span class="keyword">false</span>;</div><div class="line"><a name="l03236"></a><span class="lineno"> 3236</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l03237"></a><span class="lineno"> 3237</span>&#160;</div><div class="line"><a name="l03238"></a><span class="lineno"> 3238</span>&#160;    streamRedirector.CancelRedirect();</div><div class="line"><a name="l03239"></a><span class="lineno"> 3239</span>&#160;</div><div class="line"><a name="l03240"></a><span class="lineno"> 3240</span>&#160;    <span class="comment">// Check that the expected error has occurred and logged to the standard output</span></div><div class="line"><a name="l03241"></a><span class="lineno"> 3241</span>&#160;    <span class="keywordflow">if</span> (ss.str().find(<span class="stringliteral">&quot;Functor with requested PacketId=37 and Version=4194304 does not exist&quot;</span>) == std::string::npos)</div><div class="line"><a name="l03242"></a><span class="lineno"> 3242</span>&#160;    {</div><div class="line"><a name="l03243"></a><span class="lineno"> 3243</span>&#160;        std::cout &lt;&lt; ss.str();</div><div class="line"><a name="l03244"></a><span class="lineno"> 3244</span>&#160;        BOOST_FAIL(<span class="stringliteral">&quot;Expected string not found.&quot;</span>);</div><div class="line"><a name="l03245"></a><span class="lineno"> 3245</span>&#160;    }</div><div class="line"><a name="l03246"></a><span class="lineno"> 3246</span>&#160;}</div><div class="line"><a name="l03247"></a><span class="lineno"> 3247</span>&#160;</div><div class="line"><a name="l03248"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a31760190fa75f68ff6a170cb93f6f701"> 3248</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingServiceBadRequestCounterDirectoryPacket)</div><div class="line"><a name="l03249"></a><span class="lineno"> 3249</span>&#160;{</div><div class="line"><a name="l03250"></a><span class="lineno"> 3250</span>&#160;    <span class="comment">// Locally reduce log level to &quot;Warning&quot;, as this test needs to parse a warning message from the standard output</span></div><div class="line"><a name="l03251"></a><span class="lineno"> 3251</span>&#160;    <a class="code" href="structarmnn_1_1profiling_1_1_log_level_swapper.xhtml">LogLevelSwapper</a> logLevelSwapper(<a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">armnn::LogSeverity::Warning</a>);</div><div class="line"><a name="l03252"></a><span class="lineno"> 3252</span>&#160;</div><div class="line"><a name="l03253"></a><span class="lineno"> 3253</span>&#160;    <span class="comment">// Redirect the standard output to a local stream so that we can parse the warning message</span></div><div class="line"><a name="l03254"></a><span class="lineno"> 3254</span>&#160;    std::stringstream ss;</div><div class="line"><a name="l03255"></a><span class="lineno"> 3255</span>&#160;    <a class="code" href="structarmnn_1_1profiling_1_1_stream_redirector.xhtml">StreamRedirector</a> streamRedirector(std::cout, ss.rdbuf());</div><div class="line"><a name="l03256"></a><span class="lineno"> 3256</span>&#160;</div><div class="line"><a name="l03257"></a><span class="lineno"> 3257</span>&#160;    <span class="comment">// Reset the profiling service to the uninitialized state</span></div><div class="line"><a name="l03258"></a><span class="lineno"> 3258</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l03259"></a><span class="lineno"> 3259</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>          = <span class="keyword">true</span>;</div><div class="line"><a name="l03260"></a><span class="lineno"> 3260</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l03261"></a><span class="lineno"> 3261</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l03262"></a><span class="lineno"> 3262</span>&#160;</div><div class="line"><a name="l03263"></a><span class="lineno"> 3263</span>&#160;    <span class="comment">// Swap the profiling connection factory in the profiling service instance with our mock one</span></div><div class="line"><a name="l03264"></a><span class="lineno"> 3264</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml">SwapProfilingConnectionFactoryHelper</a> helper(profilingService);</div><div class="line"><a name="l03265"></a><span class="lineno"> 3265</span>&#160;</div><div class="line"><a name="l03266"></a><span class="lineno"> 3266</span>&#160;    <span class="comment">// Bring the profiling service to the &quot;Active&quot; state</span></div><div class="line"><a name="l03267"></a><span class="lineno"> 3267</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l03268"></a><span class="lineno"> 3268</span>&#160;    helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a03f72b1ccbef21ab7caafb037ce2144c">ForceTransitionToState</a>(<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l03269"></a><span class="lineno"> 3269</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l03270"></a><span class="lineno"> 3270</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Create the profiling connection</span></div><div class="line"><a name="l03271"></a><span class="lineno"> 3271</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l03272"></a><span class="lineno"> 3272</span>&#160;</div><div class="line"><a name="l03273"></a><span class="lineno"> 3273</span>&#160;    <span class="comment">// Get the mock profiling connection</span></div><div class="line"><a name="l03274"></a><span class="lineno"> 3274</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml">MockProfilingConnection</a>* mockProfilingConnection = helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a8ccd73b0bb970c18b05a0bc63fcd0279">GetMockProfilingConnection</a>();</div><div class="line"><a name="l03275"></a><span class="lineno"> 3275</span>&#160;    BOOST_CHECK(mockProfilingConnection);</div><div class="line"><a name="l03276"></a><span class="lineno"> 3276</span>&#160;</div><div class="line"><a name="l03277"></a><span class="lineno"> 3277</span>&#160;    <span class="comment">// Write a valid &quot;Request Counter Directory&quot; packet into the mock profiling connection, to simulate a valid</span></div><div class="line"><a name="l03278"></a><span class="lineno"> 3278</span>&#160;    <span class="comment">// reply from an external profiling service</span></div><div class="line"><a name="l03279"></a><span class="lineno"> 3279</span>&#160;</div><div class="line"><a name="l03280"></a><span class="lineno"> 3280</span>&#160;    <span class="comment">// Request Counter Directory packet header (word 0, word 1 is always zero):</span></div><div class="line"><a name="l03281"></a><span class="lineno"> 3281</span>&#160;    <span class="comment">// 26:31 [6]  packet_family: Control Packet Family, value 0b000000</span></div><div class="line"><a name="l03282"></a><span class="lineno"> 3282</span>&#160;    <span class="comment">// 16:25 [10] packet_id: Packet identifier, value 0b0000000011</span></div><div class="line"><a name="l03283"></a><span class="lineno"> 3283</span>&#160;    <span class="comment">// 8:15  [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l03284"></a><span class="lineno"> 3284</span>&#160;    <span class="comment">// 0:7   [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l03285"></a><span class="lineno"> 3285</span>&#160;    uint32_t packetFamily = 0;</div><div class="line"><a name="l03286"></a><span class="lineno"> 3286</span>&#160;    uint32_t packetId     = 123;    <span class="comment">// Wrong packet id!!!</span></div><div class="line"><a name="l03287"></a><span class="lineno"> 3287</span>&#160;    uint32_t header       = ((packetFamily &amp; 0x0000003F) &lt;&lt; 26) | ((packetId &amp; 0x000003FF) &lt;&lt; 16);</div><div class="line"><a name="l03288"></a><span class="lineno"> 3288</span>&#160;</div><div class="line"><a name="l03289"></a><span class="lineno"> 3289</span>&#160;    <span class="comment">// Create the Request Counter Directory packet</span></div><div class="line"><a name="l03290"></a><span class="lineno"> 3290</span>&#160;    arm::pipe::Packet requestCounterDirectoryPacket(header);</div><div class="line"><a name="l03291"></a><span class="lineno"> 3291</span>&#160;</div><div class="line"><a name="l03292"></a><span class="lineno"> 3292</span>&#160;    <span class="comment">// Write the packet to the mock profiling connection</span></div><div class="line"><a name="l03293"></a><span class="lineno"> 3293</span>&#160;    mockProfilingConnection-&gt;WritePacket(std::move(requestCounterDirectoryPacket));</div><div class="line"><a name="l03294"></a><span class="lineno"> 3294</span>&#160;</div><div class="line"><a name="l03295"></a><span class="lineno"> 3295</span>&#160;    <span class="comment">// Start the command handler and the send thread</span></div><div class="line"><a name="l03296"></a><span class="lineno"> 3296</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();</div><div class="line"><a name="l03297"></a><span class="lineno"> 3297</span>&#160;</div><div class="line"><a name="l03298"></a><span class="lineno"> 3298</span>&#160;    <span class="comment">// Reset the profiling service to stop and join any running thread</span></div><div class="line"><a name="l03299"></a><span class="lineno"> 3299</span>&#160;    options.m_EnableProfiling = <span class="keyword">false</span>;</div><div class="line"><a name="l03300"></a><span class="lineno"> 3300</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l03301"></a><span class="lineno"> 3301</span>&#160;</div><div class="line"><a name="l03302"></a><span class="lineno"> 3302</span>&#160;    streamRedirector.CancelRedirect();</div><div class="line"><a name="l03303"></a><span class="lineno"> 3303</span>&#160;</div><div class="line"><a name="l03304"></a><span class="lineno"> 3304</span>&#160;    <span class="comment">// Check that the expected error has occurred and logged to the standard output</span></div><div class="line"><a name="l03305"></a><span class="lineno"> 3305</span>&#160;    <span class="keywordflow">if</span> (ss.str().find(<span class="stringliteral">&quot;Functor with requested PacketId=123 and Version=4194304 does not exist&quot;</span>) == std::string::npos)</div><div class="line"><a name="l03306"></a><span class="lineno"> 3306</span>&#160;    {</div><div class="line"><a name="l03307"></a><span class="lineno"> 3307</span>&#160;        std::cout &lt;&lt; ss.str();</div><div class="line"><a name="l03308"></a><span class="lineno"> 3308</span>&#160;        BOOST_FAIL(<span class="stringliteral">&quot;Expected string not found.&quot;</span>);</div><div class="line"><a name="l03309"></a><span class="lineno"> 3309</span>&#160;    }</div><div class="line"><a name="l03310"></a><span class="lineno"> 3310</span>&#160;}</div><div class="line"><a name="l03311"></a><span class="lineno"> 3311</span>&#160;</div><div class="line"><a name="l03312"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#ac931d32b976169ad377f388b2878bc43"> 3312</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckProfilingServiceBadPeriodicCounterSelectionPacket)</div><div class="line"><a name="l03313"></a><span class="lineno"> 3313</span>&#160;{</div><div class="line"><a name="l03314"></a><span class="lineno"> 3314</span>&#160;    <span class="comment">// Locally reduce log level to &quot;Warning&quot;, as this test needs to parse a warning message from the standard output</span></div><div class="line"><a name="l03315"></a><span class="lineno"> 3315</span>&#160;    <a class="code" href="structarmnn_1_1profiling_1_1_log_level_swapper.xhtml">LogLevelSwapper</a> logLevelSwapper(<a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">armnn::LogSeverity::Warning</a>);</div><div class="line"><a name="l03316"></a><span class="lineno"> 3316</span>&#160;</div><div class="line"><a name="l03317"></a><span class="lineno"> 3317</span>&#160;    <span class="comment">// Redirect the standard output to a local stream so that we can parse the warning message</span></div><div class="line"><a name="l03318"></a><span class="lineno"> 3318</span>&#160;    std::stringstream ss;</div><div class="line"><a name="l03319"></a><span class="lineno"> 3319</span>&#160;    <a class="code" href="structarmnn_1_1profiling_1_1_stream_redirector.xhtml">StreamRedirector</a> streamRedirector(std::cout, ss.rdbuf());</div><div class="line"><a name="l03320"></a><span class="lineno"> 3320</span>&#160;</div><div class="line"><a name="l03321"></a><span class="lineno"> 3321</span>&#160;    <span class="comment">// Reset the profiling service to the uninitialized state</span></div><div class="line"><a name="l03322"></a><span class="lineno"> 3322</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l03323"></a><span class="lineno"> 3323</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>          = <span class="keyword">true</span>;</div><div class="line"><a name="l03324"></a><span class="lineno"> 3324</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l03325"></a><span class="lineno"> 3325</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l03326"></a><span class="lineno"> 3326</span>&#160;</div><div class="line"><a name="l03327"></a><span class="lineno"> 3327</span>&#160;    <span class="comment">// Swap the profiling connection factory in the profiling service instance with our mock one</span></div><div class="line"><a name="l03328"></a><span class="lineno"> 3328</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml">SwapProfilingConnectionFactoryHelper</a> helper(profilingService);</div><div class="line"><a name="l03329"></a><span class="lineno"> 3329</span>&#160;</div><div class="line"><a name="l03330"></a><span class="lineno"> 3330</span>&#160;    <span class="comment">// Bring the profiling service to the &quot;Active&quot; state</span></div><div class="line"><a name="l03331"></a><span class="lineno"> 3331</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">ProfilingState::Uninitialised</a>);</div><div class="line"><a name="l03332"></a><span class="lineno"> 3332</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Initialize the counter directory</span></div><div class="line"><a name="l03333"></a><span class="lineno"> 3333</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l03334"></a><span class="lineno"> 3334</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Create the profiling connection</span></div><div class="line"><a name="l03335"></a><span class="lineno"> 3335</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>() == <a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">ProfilingState::WaitingForAck</a>);</div><div class="line"><a name="l03336"></a><span class="lineno"> 3336</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();    <span class="comment">// Start the command handler and the send thread</span></div><div class="line"><a name="l03337"></a><span class="lineno"> 3337</span>&#160;</div><div class="line"><a name="l03338"></a><span class="lineno"> 3338</span>&#160;    <span class="comment">// Get the mock profiling connection</span></div><div class="line"><a name="l03339"></a><span class="lineno"> 3339</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml">MockProfilingConnection</a>* mockProfilingConnection = helper.<a class="code" href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a8ccd73b0bb970c18b05a0bc63fcd0279">GetMockProfilingConnection</a>();</div><div class="line"><a name="l03340"></a><span class="lineno"> 3340</span>&#160;    BOOST_CHECK(mockProfilingConnection);</div><div class="line"><a name="l03341"></a><span class="lineno"> 3341</span>&#160;</div><div class="line"><a name="l03342"></a><span class="lineno"> 3342</span>&#160;    <span class="comment">// Write a &quot;Periodic Counter Selection&quot; packet into the mock profiling connection, to simulate an input from an</span></div><div class="line"><a name="l03343"></a><span class="lineno"> 3343</span>&#160;    <span class="comment">// external profiling service</span></div><div class="line"><a name="l03344"></a><span class="lineno"> 3344</span>&#160;</div><div class="line"><a name="l03345"></a><span class="lineno"> 3345</span>&#160;    <span class="comment">// Periodic Counter Selection packet header:</span></div><div class="line"><a name="l03346"></a><span class="lineno"> 3346</span>&#160;    <span class="comment">// 26:31 [6]  packet_family: Control Packet Family, value 0b000000</span></div><div class="line"><a name="l03347"></a><span class="lineno"> 3347</span>&#160;    <span class="comment">// 16:25 [10] packet_id: Packet identifier, value 0b0000000100</span></div><div class="line"><a name="l03348"></a><span class="lineno"> 3348</span>&#160;    <span class="comment">// 8:15  [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l03349"></a><span class="lineno"> 3349</span>&#160;    <span class="comment">// 0:7   [8]  reserved: Reserved, value 0b00000000</span></div><div class="line"><a name="l03350"></a><span class="lineno"> 3350</span>&#160;    uint32_t packetFamily = 0;</div><div class="line"><a name="l03351"></a><span class="lineno"> 3351</span>&#160;    uint32_t packetId     = 999;    <span class="comment">// Wrong packet id!!!</span></div><div class="line"><a name="l03352"></a><span class="lineno"> 3352</span>&#160;    uint32_t header       = ((packetFamily &amp; 0x0000003F) &lt;&lt; 26) | ((packetId &amp; 0x000003FF) &lt;&lt; 16);</div><div class="line"><a name="l03353"></a><span class="lineno"> 3353</span>&#160;</div><div class="line"><a name="l03354"></a><span class="lineno"> 3354</span>&#160;    <span class="comment">// Create the Periodic Counter Selection packet</span></div><div class="line"><a name="l03355"></a><span class="lineno"> 3355</span>&#160;    <span class="comment">// Length == 0, this will disable the collection of counters</span></div><div class="line"><a name="l03356"></a><span class="lineno"> 3356</span>&#160;    arm::pipe::Packet periodicCounterSelectionPacket(header);</div><div class="line"><a name="l03357"></a><span class="lineno"> 3357</span>&#160;</div><div class="line"><a name="l03358"></a><span class="lineno"> 3358</span>&#160;    <span class="comment">// Write the packet to the mock profiling connection</span></div><div class="line"><a name="l03359"></a><span class="lineno"> 3359</span>&#160;    mockProfilingConnection-&gt;<a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#a42eb542b5a1d73d00c4ce474140bb78c">WritePacket</a>(std::move(periodicCounterSelectionPacket));</div><div class="line"><a name="l03360"></a><span class="lineno"> 3360</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();</div><div class="line"><a name="l03361"></a><span class="lineno"> 3361</span>&#160;</div><div class="line"><a name="l03362"></a><span class="lineno"> 3362</span>&#160;    <span class="comment">// Reset the profiling service to stop any running thread</span></div><div class="line"><a name="l03363"></a><span class="lineno"> 3363</span>&#160;    options.m_EnableProfiling = <span class="keyword">false</span>;</div><div class="line"><a name="l03364"></a><span class="lineno"> 3364</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l03365"></a><span class="lineno"> 3365</span>&#160;</div><div class="line"><a name="l03366"></a><span class="lineno"> 3366</span>&#160;    <span class="comment">// Check that the expected error has occurred and logged to the standard output</span></div><div class="line"><a name="l03367"></a><span class="lineno"> 3367</span>&#160;    streamRedirector.CancelRedirect();</div><div class="line"><a name="l03368"></a><span class="lineno"> 3368</span>&#160;</div><div class="line"><a name="l03369"></a><span class="lineno"> 3369</span>&#160;    <span class="comment">// Check that the expected error has occurred and logged to the standard output</span></div><div class="line"><a name="l03370"></a><span class="lineno"> 3370</span>&#160;    <span class="keywordflow">if</span> (ss.str().find(<span class="stringliteral">&quot;Functor with requested PacketId=999 and Version=4194304 does not exist&quot;</span>) == std::string::npos)</div><div class="line"><a name="l03371"></a><span class="lineno"> 3371</span>&#160;    {</div><div class="line"><a name="l03372"></a><span class="lineno"> 3372</span>&#160;        std::cout &lt;&lt; ss.str();</div><div class="line"><a name="l03373"></a><span class="lineno"> 3373</span>&#160;        BOOST_FAIL(<span class="stringliteral">&quot;Expected string not found.&quot;</span>);</div><div class="line"><a name="l03374"></a><span class="lineno"> 3374</span>&#160;    }</div><div class="line"><a name="l03375"></a><span class="lineno"> 3375</span>&#160;}</div><div class="line"><a name="l03376"></a><span class="lineno"> 3376</span>&#160;</div><div class="line"><a name="l03377"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a868da369c37b49f59bb56b72cdaac880"> 3377</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckCounterIdMap)</div><div class="line"><a name="l03378"></a><span class="lineno"> 3378</span>&#160;{</div><div class="line"><a name="l03379"></a><span class="lineno"> 3379</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml">CounterIdMap</a> counterIdMap;</div><div class="line"><a name="l03380"></a><span class="lineno"> 3380</span>&#160;    BOOST_CHECK_THROW(counterIdMap.<a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a332eb20cab18c17fb869168dc493514e">GetBackendId</a>(0), <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>);</div><div class="line"><a name="l03381"></a><span class="lineno"> 3381</span>&#160;    BOOST_CHECK_THROW(counterIdMap.<a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a40f23e39c9e564d9276caa8d8331aa47">GetGlobalId</a>(0, armnn::profiling::BACKEND_ID), <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>);</div><div class="line"><a name="l03382"></a><span class="lineno"> 3382</span>&#160;</div><div class="line"><a name="l03383"></a><span class="lineno"> 3383</span>&#160;    uint16_t globalCounterIds = 0;</div><div class="line"><a name="l03384"></a><span class="lineno"> 3384</span>&#160;</div><div class="line"><a name="l03385"></a><span class="lineno"> 3385</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> cpuRefId(<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a>);</div><div class="line"><a name="l03386"></a><span class="lineno"> 3386</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> cpuAccId(<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a>);</div><div class="line"><a name="l03387"></a><span class="lineno"> 3387</span>&#160;</div><div class="line"><a name="l03388"></a><span class="lineno"> 3388</span>&#160;    std::vector&lt;uint16_t&gt; cpuRefCounters = {0, 1, 2, 3};</div><div class="line"><a name="l03389"></a><span class="lineno"> 3389</span>&#160;    std::vector&lt;uint16_t&gt; cpuAccCounters = {0, 1};</div><div class="line"><a name="l03390"></a><span class="lineno"> 3390</span>&#160;</div><div class="line"><a name="l03391"></a><span class="lineno"> 3391</span>&#160;    <span class="keywordflow">for</span> (uint16_t backendCounterId : cpuRefCounters)</div><div class="line"><a name="l03392"></a><span class="lineno"> 3392</span>&#160;    {</div><div class="line"><a name="l03393"></a><span class="lineno"> 3393</span>&#160;        counterIdMap.<a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a4c014af62ced747fc2ebbbc312f9845f">RegisterMapping</a>(globalCounterIds, backendCounterId, cpuRefId);</div><div class="line"><a name="l03394"></a><span class="lineno"> 3394</span>&#160;        ++globalCounterIds;</div><div class="line"><a name="l03395"></a><span class="lineno"> 3395</span>&#160;    }</div><div class="line"><a name="l03396"></a><span class="lineno"> 3396</span>&#160;    <span class="keywordflow">for</span> (uint16_t backendCounterId : cpuAccCounters)</div><div class="line"><a name="l03397"></a><span class="lineno"> 3397</span>&#160;    {</div><div class="line"><a name="l03398"></a><span class="lineno"> 3398</span>&#160;        counterIdMap.<a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a4c014af62ced747fc2ebbbc312f9845f">RegisterMapping</a>(globalCounterIds, backendCounterId, cpuAccId);</div><div class="line"><a name="l03399"></a><span class="lineno"> 3399</span>&#160;        ++globalCounterIds;</div><div class="line"><a name="l03400"></a><span class="lineno"> 3400</span>&#160;    }</div><div class="line"><a name="l03401"></a><span class="lineno"> 3401</span>&#160;</div><div class="line"><a name="l03402"></a><span class="lineno"> 3402</span>&#160;    BOOST_CHECK(counterIdMap.<a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a332eb20cab18c17fb869168dc493514e">GetBackendId</a>(0) == (std::pair&lt;uint16_t, armnn::BackendId&gt;(0, cpuRefId)));</div><div class="line"><a name="l03403"></a><span class="lineno"> 3403</span>&#160;    BOOST_CHECK(counterIdMap.<a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a332eb20cab18c17fb869168dc493514e">GetBackendId</a>(1) == (std::pair&lt;uint16_t, armnn::BackendId&gt;(1, cpuRefId)));</div><div class="line"><a name="l03404"></a><span class="lineno"> 3404</span>&#160;    BOOST_CHECK(counterIdMap.<a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a332eb20cab18c17fb869168dc493514e">GetBackendId</a>(2) == (std::pair&lt;uint16_t, armnn::BackendId&gt;(2, cpuRefId)));</div><div class="line"><a name="l03405"></a><span class="lineno"> 3405</span>&#160;    BOOST_CHECK(counterIdMap.<a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a332eb20cab18c17fb869168dc493514e">GetBackendId</a>(3) == (std::pair&lt;uint16_t, armnn::BackendId&gt;(3, cpuRefId)));</div><div class="line"><a name="l03406"></a><span class="lineno"> 3406</span>&#160;    BOOST_CHECK(counterIdMap.<a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a332eb20cab18c17fb869168dc493514e">GetBackendId</a>(4) == (std::pair&lt;uint16_t, armnn::BackendId&gt;(0, cpuAccId)));</div><div class="line"><a name="l03407"></a><span class="lineno"> 3407</span>&#160;    BOOST_CHECK(counterIdMap.<a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a332eb20cab18c17fb869168dc493514e">GetBackendId</a>(5) == (std::pair&lt;uint16_t, armnn::BackendId&gt;(1, cpuAccId)));</div><div class="line"><a name="l03408"></a><span class="lineno"> 3408</span>&#160;</div><div class="line"><a name="l03409"></a><span class="lineno"> 3409</span>&#160;    BOOST_CHECK(counterIdMap.<a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a40f23e39c9e564d9276caa8d8331aa47">GetGlobalId</a>(0, cpuRefId) == 0);</div><div class="line"><a name="l03410"></a><span class="lineno"> 3410</span>&#160;    BOOST_CHECK(counterIdMap.<a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a40f23e39c9e564d9276caa8d8331aa47">GetGlobalId</a>(1, cpuRefId) == 1);</div><div class="line"><a name="l03411"></a><span class="lineno"> 3411</span>&#160;    BOOST_CHECK(counterIdMap.<a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a40f23e39c9e564d9276caa8d8331aa47">GetGlobalId</a>(2, cpuRefId) == 2);</div><div class="line"><a name="l03412"></a><span class="lineno"> 3412</span>&#160;    BOOST_CHECK(counterIdMap.<a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a40f23e39c9e564d9276caa8d8331aa47">GetGlobalId</a>(3, cpuRefId) == 3);</div><div class="line"><a name="l03413"></a><span class="lineno"> 3413</span>&#160;    BOOST_CHECK(counterIdMap.<a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a40f23e39c9e564d9276caa8d8331aa47">GetGlobalId</a>(0, cpuAccId) == 4);</div><div class="line"><a name="l03414"></a><span class="lineno"> 3414</span>&#160;    BOOST_CHECK(counterIdMap.<a class="code" href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a40f23e39c9e564d9276caa8d8331aa47">GetGlobalId</a>(1, cpuAccId) == 5);</div><div class="line"><a name="l03415"></a><span class="lineno"> 3415</span>&#160;}</div><div class="line"><a name="l03416"></a><span class="lineno"> 3416</span>&#160;</div><div class="line"><a name="l03417"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#ad5e72b8de3691a24ae842d0c1db11163"> 3417</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckRegisterBackendCounters)</div><div class="line"><a name="l03418"></a><span class="lineno"> 3418</span>&#160;{</div><div class="line"><a name="l03419"></a><span class="lineno"> 3419</span>&#160;    uint16_t globalCounterIds = armnn::profiling::INFERENCES_RUN;</div><div class="line"><a name="l03420"></a><span class="lineno"> 3420</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> cpuRefId(<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a>);</div><div class="line"><a name="l03421"></a><span class="lineno"> 3421</span>&#160;</div><div class="line"><a name="l03422"></a><span class="lineno"> 3422</span>&#160;    <span class="comment">// Reset the profiling service to the uninitialized state</span></div><div class="line"><a name="l03423"></a><span class="lineno"> 3423</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l03424"></a><span class="lineno"> 3424</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>          = <span class="keyword">true</span>;</div><div class="line"><a name="l03425"></a><span class="lineno"> 3425</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">ProfilingService</a> profilingService;</div><div class="line"><a name="l03426"></a><span class="lineno"> 3426</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l03427"></a><span class="lineno"> 3427</span>&#160;</div><div class="line"><a name="l03428"></a><span class="lineno"> 3428</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_register_backend_counters.xhtml">RegisterBackendCounters</a> registerBackendCounters(globalCounterIds, cpuRefId, profilingService);</div><div class="line"><a name="l03429"></a><span class="lineno"> 3429</span>&#160;</div><div class="line"><a name="l03430"></a><span class="lineno"> 3430</span>&#160;</div><div class="line"><a name="l03431"></a><span class="lineno"> 3431</span>&#160;</div><div class="line"><a name="l03432"></a><span class="lineno"> 3432</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#adfaa32654e05eab63b2adc34b2138475">GetCounterDirectory</a>().<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#a718a75d4c178cf3f687b3f27b8f55091">GetCategories</a>().empty());</div><div class="line"><a name="l03433"></a><span class="lineno"> 3433</span>&#160;    registerBackendCounters.<a class="code" href="classarmnn_1_1profiling_1_1_register_backend_counters.xhtml#a547f56db3e9e8c6f5b6ac7b7d3194bfe">RegisterCategory</a>(<span class="stringliteral">&quot;categoryOne&quot;</span>);</div><div class="line"><a name="l03434"></a><span class="lineno"> 3434</span>&#160;    <span class="keyword">auto</span> categoryOnePtr = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#adfaa32654e05eab63b2adc34b2138475">GetCounterDirectory</a>().<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#a90890aee41059d8fed244538acc4044f">GetCategory</a>(<span class="stringliteral">&quot;categoryOne&quot;</span>);</div><div class="line"><a name="l03435"></a><span class="lineno"> 3435</span>&#160;    BOOST_CHECK(categoryOnePtr);</div><div class="line"><a name="l03436"></a><span class="lineno"> 3436</span>&#160;</div><div class="line"><a name="l03437"></a><span class="lineno"> 3437</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#adfaa32654e05eab63b2adc34b2138475">GetCounterDirectory</a>().<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#a98e6769cb933d30bfd3ca25f61bd8438">GetDevices</a>().empty());</div><div class="line"><a name="l03438"></a><span class="lineno"> 3438</span>&#160;    globalCounterIds = registerBackendCounters.<a class="code" href="classarmnn_1_1profiling_1_1_register_backend_counters.xhtml#aa59f702553e07454e57b7d75294ded25">RegisterDevice</a>(<span class="stringliteral">&quot;deviceOne&quot;</span>);</div><div class="line"><a name="l03439"></a><span class="lineno"> 3439</span>&#160;    <span class="keyword">auto</span> deviceOnePtr = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#adfaa32654e05eab63b2adc34b2138475">GetCounterDirectory</a>().<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#a228989d3c53e86e779567ca5c2033ec2">GetDevice</a>(globalCounterIds);</div><div class="line"><a name="l03440"></a><span class="lineno"> 3440</span>&#160;    BOOST_CHECK(deviceOnePtr);</div><div class="line"><a name="l03441"></a><span class="lineno"> 3441</span>&#160;    BOOST_CHECK(deviceOnePtr-&gt;m_Name == <span class="stringliteral">&quot;deviceOne&quot;</span>);</div><div class="line"><a name="l03442"></a><span class="lineno"> 3442</span>&#160;</div><div class="line"><a name="l03443"></a><span class="lineno"> 3443</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#adfaa32654e05eab63b2adc34b2138475">GetCounterDirectory</a>().<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#a8908490db3b8a0003a639ac56b956cee">GetCounterSets</a>().empty());</div><div class="line"><a name="l03444"></a><span class="lineno"> 3444</span>&#160;    globalCounterIds = registerBackendCounters.<a class="code" href="classarmnn_1_1profiling_1_1_register_backend_counters.xhtml#a3760d7378ebc54c779f5032662890154">RegisterCounterSet</a>(<span class="stringliteral">&quot;counterSetOne&quot;</span>);</div><div class="line"><a name="l03445"></a><span class="lineno"> 3445</span>&#160;    <span class="keyword">auto</span> counterSetOnePtr = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#adfaa32654e05eab63b2adc34b2138475">GetCounterDirectory</a>().<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#a67693dcf840ffeadc066ce77ef7b2044">GetCounterSet</a>(globalCounterIds);</div><div class="line"><a name="l03446"></a><span class="lineno"> 3446</span>&#160;    BOOST_CHECK(counterSetOnePtr);</div><div class="line"><a name="l03447"></a><span class="lineno"> 3447</span>&#160;    BOOST_CHECK(counterSetOnePtr-&gt;m_Name == <span class="stringliteral">&quot;counterSetOne&quot;</span>);</div><div class="line"><a name="l03448"></a><span class="lineno"> 3448</span>&#160;</div><div class="line"><a name="l03449"></a><span class="lineno"> 3449</span>&#160;    uint16_t newGlobalCounterId = registerBackendCounters.<a class="code" href="classarmnn_1_1profiling_1_1_register_backend_counters.xhtml#a380988b279ec147ed405cc86d4436975">RegisterCounter</a>(0,</div><div class="line"><a name="l03450"></a><span class="lineno"> 3450</span>&#160;                                                                          <span class="stringliteral">&quot;categoryOne&quot;</span>,</div><div class="line"><a name="l03451"></a><span class="lineno"> 3451</span>&#160;                                                                          0,</div><div class="line"><a name="l03452"></a><span class="lineno"> 3452</span>&#160;                                                                          0,</div><div class="line"><a name="l03453"></a><span class="lineno"> 3453</span>&#160;                                                                          1.f,</div><div class="line"><a name="l03454"></a><span class="lineno"> 3454</span>&#160;                                                                          <span class="stringliteral">&quot;CounterOne&quot;</span>,</div><div class="line"><a name="l03455"></a><span class="lineno"> 3455</span>&#160;                                                                          <span class="stringliteral">&quot;first test counter&quot;</span>);</div><div class="line"><a name="l03456"></a><span class="lineno"> 3456</span>&#160;    BOOST_CHECK(newGlobalCounterId = armnn::profiling::INFERENCES_RUN + 1);</div><div class="line"><a name="l03457"></a><span class="lineno"> 3457</span>&#160;    uint16_t mappedGlobalId = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aed969262d8bf6d59eb8f65fb89d47959">GetCounterMappings</a>().<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_mappings.xhtml#a83e6db8d13e21158334ca6722b20fa67">GetGlobalId</a>(0, cpuRefId);</div><div class="line"><a name="l03458"></a><span class="lineno"> 3458</span>&#160;    BOOST_CHECK(mappedGlobalId == newGlobalCounterId);</div><div class="line"><a name="l03459"></a><span class="lineno"> 3459</span>&#160;    <span class="keyword">auto</span> backendMapping = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aed969262d8bf6d59eb8f65fb89d47959">GetCounterMappings</a>().<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_mappings.xhtml#a8c03a58ac20b34e541bad78df16859e8">GetBackendId</a>(newGlobalCounterId);</div><div class="line"><a name="l03460"></a><span class="lineno"> 3460</span>&#160;    BOOST_CHECK(backendMapping.first == 0);</div><div class="line"><a name="l03461"></a><span class="lineno"> 3461</span>&#160;    BOOST_CHECK(backendMapping.second == cpuRefId);</div><div class="line"><a name="l03462"></a><span class="lineno"> 3462</span>&#160;</div><div class="line"><a name="l03463"></a><span class="lineno"> 3463</span>&#160;    <span class="comment">// Reset the profiling service to stop any running thread</span></div><div class="line"><a name="l03464"></a><span class="lineno"> 3464</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l03465"></a><span class="lineno"> 3465</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l03466"></a><span class="lineno"> 3466</span>&#160;}</div><div class="line"><a name="l03467"></a><span class="lineno"> 3467</span>&#160;</div><div class="line"><a name="l03468"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a251446bde244c5655848809567f1b8cd"> 3468</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckCounterStatusQuery)</div><div class="line"><a name="l03469"></a><span class="lineno"> 3469</span>&#160;{</div><div class="line"><a name="l03470"></a><span class="lineno"> 3470</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">armnn::IRuntime::CreationOptions</a> options;</div><div class="line"><a name="l03471"></a><span class="lineno"> 3471</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml#a30412a91cadff138686eaeb12f5357cc">m_ProfilingOptions</a>.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l03472"></a><span class="lineno"> 3472</span>&#160;</div><div class="line"><a name="l03473"></a><span class="lineno"> 3473</span>&#160;    <span class="comment">// Reset the profiling service to the uninitialized state</span></div><div class="line"><a name="l03474"></a><span class="lineno"> 3474</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">ProfilingService</a> profilingService;</div><div class="line"><a name="l03475"></a><span class="lineno"> 3475</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml#a30412a91cadff138686eaeb12f5357cc">m_ProfilingOptions</a>, <span class="keyword">true</span>);</div><div class="line"><a name="l03476"></a><span class="lineno"> 3476</span>&#160;</div><div class="line"><a name="l03477"></a><span class="lineno"> 3477</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> cpuRefId(<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a>);</div><div class="line"><a name="l03478"></a><span class="lineno"> 3478</span>&#160;    <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> cpuAccId(<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a>);</div><div class="line"><a name="l03479"></a><span class="lineno"> 3479</span>&#160;</div><div class="line"><a name="l03480"></a><span class="lineno"> 3480</span>&#160;    <span class="comment">// Create BackendProfiling for each backend</span></div><div class="line"><a name="l03481"></a><span class="lineno"> 3481</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_backend_profiling.xhtml">BackendProfiling</a> backendProfilingCpuRef(options, profilingService, cpuRefId);</div><div class="line"><a name="l03482"></a><span class="lineno"> 3482</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_backend_profiling.xhtml">BackendProfiling</a> backendProfilingCpuAcc(options, profilingService, cpuAccId);</div><div class="line"><a name="l03483"></a><span class="lineno"> 3483</span>&#160;</div><div class="line"><a name="l03484"></a><span class="lineno"> 3484</span>&#160;    uint16_t initialNumGlobalCounterIds = armnn::profiling::INFERENCES_RUN;</div><div class="line"><a name="l03485"></a><span class="lineno"> 3485</span>&#160;</div><div class="line"><a name="l03486"></a><span class="lineno"> 3486</span>&#160;    <span class="comment">// Create RegisterBackendCounters for CpuRef</span></div><div class="line"><a name="l03487"></a><span class="lineno"> 3487</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_register_backend_counters.xhtml">RegisterBackendCounters</a> registerBackendCountersCpuRef(initialNumGlobalCounterIds, cpuRefId, profilingService);</div><div class="line"><a name="l03488"></a><span class="lineno"> 3488</span>&#160;</div><div class="line"><a name="l03489"></a><span class="lineno"> 3489</span>&#160;    <span class="comment">// Create &#39;testCategory&#39; in CounterDirectory (backend agnostic)</span></div><div class="line"><a name="l03490"></a><span class="lineno"> 3490</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#adfaa32654e05eab63b2adc34b2138475">GetCounterDirectory</a>().<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#a718a75d4c178cf3f687b3f27b8f55091">GetCategories</a>().empty());</div><div class="line"><a name="l03491"></a><span class="lineno"> 3491</span>&#160;    registerBackendCountersCpuRef.<a class="code" href="classarmnn_1_1profiling_1_1_register_backend_counters.xhtml#a547f56db3e9e8c6f5b6ac7b7d3194bfe">RegisterCategory</a>(<span class="stringliteral">&quot;testCategory&quot;</span>);</div><div class="line"><a name="l03492"></a><span class="lineno"> 3492</span>&#160;    <span class="keyword">auto</span> categoryOnePtr = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#adfaa32654e05eab63b2adc34b2138475">GetCounterDirectory</a>().<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#a90890aee41059d8fed244538acc4044f">GetCategory</a>(<span class="stringliteral">&quot;testCategory&quot;</span>);</div><div class="line"><a name="l03493"></a><span class="lineno"> 3493</span>&#160;    BOOST_CHECK(categoryOnePtr);</div><div class="line"><a name="l03494"></a><span class="lineno"> 3494</span>&#160;</div><div class="line"><a name="l03495"></a><span class="lineno"> 3495</span>&#160;    <span class="comment">// Counters:</span></div><div class="line"><a name="l03496"></a><span class="lineno"> 3496</span>&#160;    <span class="comment">// Global | Local | Backend</span></div><div class="line"><a name="l03497"></a><span class="lineno"> 3497</span>&#160;    <span class="comment">//    5   |   0   | CpuRef</span></div><div class="line"><a name="l03498"></a><span class="lineno"> 3498</span>&#160;    <span class="comment">//    6   |   1   | CpuRef</span></div><div class="line"><a name="l03499"></a><span class="lineno"> 3499</span>&#160;    <span class="comment">//    7   |   1   | CpuAcc</span></div><div class="line"><a name="l03500"></a><span class="lineno"> 3500</span>&#160;</div><div class="line"><a name="l03501"></a><span class="lineno"> 3501</span>&#160;    std::vector&lt;uint16_t&gt; cpuRefCounters = {0, 1};</div><div class="line"><a name="l03502"></a><span class="lineno"> 3502</span>&#160;    std::vector&lt;uint16_t&gt; cpuAccCounters = {0};</div><div class="line"><a name="l03503"></a><span class="lineno"> 3503</span>&#160;</div><div class="line"><a name="l03504"></a><span class="lineno"> 3504</span>&#160;    <span class="comment">// Register the backend counters for CpuRef and validate GetGlobalId and GetBackendId</span></div><div class="line"><a name="l03505"></a><span class="lineno"> 3505</span>&#160;    uint16_t currentNumGlobalCounterIds = registerBackendCountersCpuRef.<a class="code" href="classarmnn_1_1profiling_1_1_register_backend_counters.xhtml#a380988b279ec147ed405cc86d4436975">RegisterCounter</a>(</div><div class="line"><a name="l03506"></a><span class="lineno"> 3506</span>&#160;            0, <span class="stringliteral">&quot;testCategory&quot;</span>, 0, 0, 1.f, <span class="stringliteral">&quot;CpuRefCounter0&quot;</span>, <span class="stringliteral">&quot;Zeroth CpuRef Counter&quot;</span>);</div><div class="line"><a name="l03507"></a><span class="lineno"> 3507</span>&#160;    BOOST_CHECK(currentNumGlobalCounterIds == initialNumGlobalCounterIds + 1);</div><div class="line"><a name="l03508"></a><span class="lineno"> 3508</span>&#160;    uint16_t mappedGlobalId = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aed969262d8bf6d59eb8f65fb89d47959">GetCounterMappings</a>().<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_mappings.xhtml#a83e6db8d13e21158334ca6722b20fa67">GetGlobalId</a>(0, cpuRefId);</div><div class="line"><a name="l03509"></a><span class="lineno"> 3509</span>&#160;    BOOST_CHECK(mappedGlobalId == currentNumGlobalCounterIds);</div><div class="line"><a name="l03510"></a><span class="lineno"> 3510</span>&#160;    <span class="keyword">auto</span> backendMapping = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aed969262d8bf6d59eb8f65fb89d47959">GetCounterMappings</a>().<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_mappings.xhtml#a8c03a58ac20b34e541bad78df16859e8">GetBackendId</a>(currentNumGlobalCounterIds);</div><div class="line"><a name="l03511"></a><span class="lineno"> 3511</span>&#160;    BOOST_CHECK(backendMapping.first == 0);</div><div class="line"><a name="l03512"></a><span class="lineno"> 3512</span>&#160;    BOOST_CHECK(backendMapping.second == cpuRefId);</div><div class="line"><a name="l03513"></a><span class="lineno"> 3513</span>&#160;</div><div class="line"><a name="l03514"></a><span class="lineno"> 3514</span>&#160;    currentNumGlobalCounterIds = registerBackendCountersCpuRef.<a class="code" href="classarmnn_1_1profiling_1_1_register_backend_counters.xhtml#a380988b279ec147ed405cc86d4436975">RegisterCounter</a>(</div><div class="line"><a name="l03515"></a><span class="lineno"> 3515</span>&#160;            1, <span class="stringliteral">&quot;testCategory&quot;</span>, 0, 0, 1.f, <span class="stringliteral">&quot;CpuRefCounter1&quot;</span>, <span class="stringliteral">&quot;First CpuRef Counter&quot;</span>);</div><div class="line"><a name="l03516"></a><span class="lineno"> 3516</span>&#160;    BOOST_CHECK(currentNumGlobalCounterIds == initialNumGlobalCounterIds + 2);</div><div class="line"><a name="l03517"></a><span class="lineno"> 3517</span>&#160;    mappedGlobalId = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aed969262d8bf6d59eb8f65fb89d47959">GetCounterMappings</a>().<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_mappings.xhtml#a83e6db8d13e21158334ca6722b20fa67">GetGlobalId</a>(1, cpuRefId);</div><div class="line"><a name="l03518"></a><span class="lineno"> 3518</span>&#160;    BOOST_CHECK(mappedGlobalId == currentNumGlobalCounterIds);</div><div class="line"><a name="l03519"></a><span class="lineno"> 3519</span>&#160;    backendMapping = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aed969262d8bf6d59eb8f65fb89d47959">GetCounterMappings</a>().<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_mappings.xhtml#a8c03a58ac20b34e541bad78df16859e8">GetBackendId</a>(currentNumGlobalCounterIds);</div><div class="line"><a name="l03520"></a><span class="lineno"> 3520</span>&#160;    BOOST_CHECK(backendMapping.first == 1);</div><div class="line"><a name="l03521"></a><span class="lineno"> 3521</span>&#160;    BOOST_CHECK(backendMapping.second == cpuRefId);</div><div class="line"><a name="l03522"></a><span class="lineno"> 3522</span>&#160;</div><div class="line"><a name="l03523"></a><span class="lineno"> 3523</span>&#160;    <span class="comment">// Create RegisterBackendCounters for CpuAcc</span></div><div class="line"><a name="l03524"></a><span class="lineno"> 3524</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_register_backend_counters.xhtml">RegisterBackendCounters</a> registerBackendCountersCpuAcc(currentNumGlobalCounterIds, cpuAccId, profilingService);</div><div class="line"><a name="l03525"></a><span class="lineno"> 3525</span>&#160;</div><div class="line"><a name="l03526"></a><span class="lineno"> 3526</span>&#160;    <span class="comment">// Register the backend counter for CpuAcc and validate GetGlobalId and GetBackendId</span></div><div class="line"><a name="l03527"></a><span class="lineno"> 3527</span>&#160;    currentNumGlobalCounterIds = registerBackendCountersCpuAcc.<a class="code" href="classarmnn_1_1profiling_1_1_register_backend_counters.xhtml#a380988b279ec147ed405cc86d4436975">RegisterCounter</a>(</div><div class="line"><a name="l03528"></a><span class="lineno"> 3528</span>&#160;            0, <span class="stringliteral">&quot;testCategory&quot;</span>, 0, 0, 1.f, <span class="stringliteral">&quot;CpuAccCounter0&quot;</span>, <span class="stringliteral">&quot;Zeroth CpuAcc Counter&quot;</span>);</div><div class="line"><a name="l03529"></a><span class="lineno"> 3529</span>&#160;    BOOST_CHECK(currentNumGlobalCounterIds == initialNumGlobalCounterIds + 3);</div><div class="line"><a name="l03530"></a><span class="lineno"> 3530</span>&#160;    mappedGlobalId = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aed969262d8bf6d59eb8f65fb89d47959">GetCounterMappings</a>().<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_mappings.xhtml#a83e6db8d13e21158334ca6722b20fa67">GetGlobalId</a>(0, cpuAccId);</div><div class="line"><a name="l03531"></a><span class="lineno"> 3531</span>&#160;    BOOST_CHECK(mappedGlobalId == currentNumGlobalCounterIds);</div><div class="line"><a name="l03532"></a><span class="lineno"> 3532</span>&#160;    backendMapping = profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aed969262d8bf6d59eb8f65fb89d47959">GetCounterMappings</a>().<a class="code" href="classarmnn_1_1profiling_1_1_i_counter_mappings.xhtml#a8c03a58ac20b34e541bad78df16859e8">GetBackendId</a>(currentNumGlobalCounterIds);</div><div class="line"><a name="l03533"></a><span class="lineno"> 3533</span>&#160;    BOOST_CHECK(backendMapping.first == 0);</div><div class="line"><a name="l03534"></a><span class="lineno"> 3534</span>&#160;    BOOST_CHECK(backendMapping.second == cpuAccId);</div><div class="line"><a name="l03535"></a><span class="lineno"> 3535</span>&#160;</div><div class="line"><a name="l03536"></a><span class="lineno"> 3536</span>&#160;    <span class="comment">// Create vectors for active counters</span></div><div class="line"><a name="l03537"></a><span class="lineno"> 3537</span>&#160;    <span class="keyword">const</span> std::vector&lt;uint16_t&gt; activeGlobalCounterIds = {5}; <span class="comment">// CpuRef(0) activated</span></div><div class="line"><a name="l03538"></a><span class="lineno"> 3538</span>&#160;    <span class="keyword">const</span> std::vector&lt;uint16_t&gt; newActiveGlobalCounterIds = {6, 7}; <span class="comment">// CpuRef(0) and CpuAcc(1) activated</span></div><div class="line"><a name="l03539"></a><span class="lineno"> 3539</span>&#160;</div><div class="line"><a name="l03540"></a><span class="lineno"> 3540</span>&#160;    <span class="keyword">const</span> uint32_t capturePeriod = 200;</div><div class="line"><a name="l03541"></a><span class="lineno"> 3541</span>&#160;    <span class="keyword">const</span> uint32_t newCapturePeriod = 100;</div><div class="line"><a name="l03542"></a><span class="lineno"> 3542</span>&#160;</div><div class="line"><a name="l03543"></a><span class="lineno"> 3543</span>&#160;    <span class="comment">// Set capture period and active counters in CaptureData</span></div><div class="line"><a name="l03544"></a><span class="lineno"> 3544</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a40078141c4d1216eef4215fc10d0cbbc">SetCaptureData</a>(capturePeriod, activeGlobalCounterIds, {});</div><div class="line"><a name="l03545"></a><span class="lineno"> 3545</span>&#160;</div><div class="line"><a name="l03546"></a><span class="lineno"> 3546</span>&#160;    <span class="comment">// Get vector of active counters for CpuRef and CpuAcc backends</span></div><div class="line"><a name="l03547"></a><span class="lineno"> 3547</span>&#160;    std::vector&lt;CounterStatus&gt; cpuRefCounterStatus = backendProfilingCpuRef.<a class="code" href="classarmnn_1_1profiling_1_1_backend_profiling.xhtml#a54b66ce39aa9a413d8d68f6e2569af45">GetActiveCounters</a>();</div><div class="line"><a name="l03548"></a><span class="lineno"> 3548</span>&#160;    std::vector&lt;CounterStatus&gt; cpuAccCounterStatus = backendProfilingCpuAcc.<a class="code" href="classarmnn_1_1profiling_1_1_backend_profiling.xhtml#a54b66ce39aa9a413d8d68f6e2569af45">GetActiveCounters</a>();</div><div class="line"><a name="l03549"></a><span class="lineno"> 3549</span>&#160;    BOOST_CHECK_EQUAL(cpuRefCounterStatus.size(), 1);</div><div class="line"><a name="l03550"></a><span class="lineno"> 3550</span>&#160;    BOOST_CHECK_EQUAL(cpuAccCounterStatus.size(), 0);</div><div class="line"><a name="l03551"></a><span class="lineno"> 3551</span>&#160;</div><div class="line"><a name="l03552"></a><span class="lineno"> 3552</span>&#160;    <span class="comment">// Check active CpuRef counter</span></div><div class="line"><a name="l03553"></a><span class="lineno"> 3553</span>&#160;    BOOST_CHECK_EQUAL(cpuRefCounterStatus[0].m_GlobalCounterId, activeGlobalCounterIds[0]);</div><div class="line"><a name="l03554"></a><span class="lineno"> 3554</span>&#160;    BOOST_CHECK_EQUAL(cpuRefCounterStatus[0].m_BackendCounterId, cpuRefCounters[0]);</div><div class="line"><a name="l03555"></a><span class="lineno"> 3555</span>&#160;    BOOST_CHECK_EQUAL(cpuRefCounterStatus[0].m_SamplingRateInMicroseconds, capturePeriod);</div><div class="line"><a name="l03556"></a><span class="lineno"> 3556</span>&#160;    BOOST_CHECK_EQUAL(cpuRefCounterStatus[0].m_Enabled, <span class="keyword">true</span>);</div><div class="line"><a name="l03557"></a><span class="lineno"> 3557</span>&#160;</div><div class="line"><a name="l03558"></a><span class="lineno"> 3558</span>&#160;    <span class="comment">// Check inactive CpuRef counter</span></div><div class="line"><a name="l03559"></a><span class="lineno"> 3559</span>&#160;    <a class="code" href="structarmnn_1_1profiling_1_1_counter_status.xhtml">CounterStatus</a> inactiveCpuRefCounter = backendProfilingCpuRef.<a class="code" href="classarmnn_1_1profiling_1_1_backend_profiling.xhtml#a23d09d59f5da5d396a89c9543204dce3">GetCounterStatus</a>(cpuRefCounters[1]);</div><div class="line"><a name="l03560"></a><span class="lineno"> 3560</span>&#160;    BOOST_CHECK_EQUAL(inactiveCpuRefCounter.<a class="code" href="structarmnn_1_1profiling_1_1_counter_status.xhtml#a968102920ba1226a62e1551d45f1e2d8">m_GlobalCounterId</a>, 6);</div><div class="line"><a name="l03561"></a><span class="lineno"> 3561</span>&#160;    BOOST_CHECK_EQUAL(inactiveCpuRefCounter.<a class="code" href="structarmnn_1_1profiling_1_1_counter_status.xhtml#a29f0ccf670004d1b4127bbfba5ded78b">m_BackendCounterId</a>, cpuRefCounters[1]);</div><div class="line"><a name="l03562"></a><span class="lineno"> 3562</span>&#160;    BOOST_CHECK_EQUAL(inactiveCpuRefCounter.<a class="code" href="structarmnn_1_1profiling_1_1_counter_status.xhtml#a20d049794ba79333eaae506448b764b6">m_SamplingRateInMicroseconds</a>, 0);</div><div class="line"><a name="l03563"></a><span class="lineno"> 3563</span>&#160;    BOOST_CHECK_EQUAL(inactiveCpuRefCounter.<a class="code" href="structarmnn_1_1profiling_1_1_counter_status.xhtml#a34e0355a7ef90e2770f21df2fec7045d">m_Enabled</a>, <span class="keyword">false</span>);</div><div class="line"><a name="l03564"></a><span class="lineno"> 3564</span>&#160;</div><div class="line"><a name="l03565"></a><span class="lineno"> 3565</span>&#160;    <span class="comment">// Check inactive CpuAcc counter</span></div><div class="line"><a name="l03566"></a><span class="lineno"> 3566</span>&#160;    <a class="code" href="structarmnn_1_1profiling_1_1_counter_status.xhtml">CounterStatus</a> inactiveCpuAccCounter = backendProfilingCpuAcc.<a class="code" href="classarmnn_1_1profiling_1_1_backend_profiling.xhtml#a23d09d59f5da5d396a89c9543204dce3">GetCounterStatus</a>(cpuAccCounters[0]);</div><div class="line"><a name="l03567"></a><span class="lineno"> 3567</span>&#160;    BOOST_CHECK_EQUAL(inactiveCpuAccCounter.<a class="code" href="structarmnn_1_1profiling_1_1_counter_status.xhtml#a968102920ba1226a62e1551d45f1e2d8">m_GlobalCounterId</a>, 7);</div><div class="line"><a name="l03568"></a><span class="lineno"> 3568</span>&#160;    BOOST_CHECK_EQUAL(inactiveCpuAccCounter.<a class="code" href="structarmnn_1_1profiling_1_1_counter_status.xhtml#a29f0ccf670004d1b4127bbfba5ded78b">m_BackendCounterId</a>, cpuAccCounters[0]);</div><div class="line"><a name="l03569"></a><span class="lineno"> 3569</span>&#160;    BOOST_CHECK_EQUAL(inactiveCpuAccCounter.<a class="code" href="structarmnn_1_1profiling_1_1_counter_status.xhtml#a20d049794ba79333eaae506448b764b6">m_SamplingRateInMicroseconds</a>, 0);</div><div class="line"><a name="l03570"></a><span class="lineno"> 3570</span>&#160;    BOOST_CHECK_EQUAL(inactiveCpuAccCounter.<a class="code" href="structarmnn_1_1profiling_1_1_counter_status.xhtml#a34e0355a7ef90e2770f21df2fec7045d">m_Enabled</a>, <span class="keyword">false</span>);</div><div class="line"><a name="l03571"></a><span class="lineno"> 3571</span>&#160;</div><div class="line"><a name="l03572"></a><span class="lineno"> 3572</span>&#160;    <span class="comment">// Set new capture period and new active counters in CaptureData</span></div><div class="line"><a name="l03573"></a><span class="lineno"> 3573</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a40078141c4d1216eef4215fc10d0cbbc">SetCaptureData</a>(newCapturePeriod, newActiveGlobalCounterIds, {});</div><div class="line"><a name="l03574"></a><span class="lineno"> 3574</span>&#160;</div><div class="line"><a name="l03575"></a><span class="lineno"> 3575</span>&#160;    <span class="comment">// Get vector of active counters for CpuRef and CpuAcc backends</span></div><div class="line"><a name="l03576"></a><span class="lineno"> 3576</span>&#160;    cpuRefCounterStatus = backendProfilingCpuRef.<a class="code" href="classarmnn_1_1profiling_1_1_backend_profiling.xhtml#a54b66ce39aa9a413d8d68f6e2569af45">GetActiveCounters</a>();</div><div class="line"><a name="l03577"></a><span class="lineno"> 3577</span>&#160;    cpuAccCounterStatus = backendProfilingCpuAcc.<a class="code" href="classarmnn_1_1profiling_1_1_backend_profiling.xhtml#a54b66ce39aa9a413d8d68f6e2569af45">GetActiveCounters</a>();</div><div class="line"><a name="l03578"></a><span class="lineno"> 3578</span>&#160;    BOOST_CHECK_EQUAL(cpuRefCounterStatus.size(), 1);</div><div class="line"><a name="l03579"></a><span class="lineno"> 3579</span>&#160;    BOOST_CHECK_EQUAL(cpuAccCounterStatus.size(), 1);</div><div class="line"><a name="l03580"></a><span class="lineno"> 3580</span>&#160;</div><div class="line"><a name="l03581"></a><span class="lineno"> 3581</span>&#160;    <span class="comment">// Check active CpuRef counter</span></div><div class="line"><a name="l03582"></a><span class="lineno"> 3582</span>&#160;    BOOST_CHECK_EQUAL(cpuRefCounterStatus[0].m_GlobalCounterId, newActiveGlobalCounterIds[0]);</div><div class="line"><a name="l03583"></a><span class="lineno"> 3583</span>&#160;    BOOST_CHECK_EQUAL(cpuRefCounterStatus[0].m_BackendCounterId, cpuRefCounters[1]);</div><div class="line"><a name="l03584"></a><span class="lineno"> 3584</span>&#160;    BOOST_CHECK_EQUAL(cpuRefCounterStatus[0].m_SamplingRateInMicroseconds, newCapturePeriod);</div><div class="line"><a name="l03585"></a><span class="lineno"> 3585</span>&#160;    BOOST_CHECK_EQUAL(cpuRefCounterStatus[0].m_Enabled, <span class="keyword">true</span>);</div><div class="line"><a name="l03586"></a><span class="lineno"> 3586</span>&#160;</div><div class="line"><a name="l03587"></a><span class="lineno"> 3587</span>&#160;    <span class="comment">// Check active CpuAcc counter</span></div><div class="line"><a name="l03588"></a><span class="lineno"> 3588</span>&#160;    BOOST_CHECK_EQUAL(cpuAccCounterStatus[0].m_GlobalCounterId, newActiveGlobalCounterIds[1]);</div><div class="line"><a name="l03589"></a><span class="lineno"> 3589</span>&#160;    BOOST_CHECK_EQUAL(cpuAccCounterStatus[0].m_BackendCounterId, cpuAccCounters[0]);</div><div class="line"><a name="l03590"></a><span class="lineno"> 3590</span>&#160;    BOOST_CHECK_EQUAL(cpuAccCounterStatus[0].m_SamplingRateInMicroseconds, newCapturePeriod);</div><div class="line"><a name="l03591"></a><span class="lineno"> 3591</span>&#160;    BOOST_CHECK_EQUAL(cpuAccCounterStatus[0].m_Enabled, <span class="keyword">true</span>);</div><div class="line"><a name="l03592"></a><span class="lineno"> 3592</span>&#160;</div><div class="line"><a name="l03593"></a><span class="lineno"> 3593</span>&#160;    <span class="comment">// Check inactive CpuRef counter</span></div><div class="line"><a name="l03594"></a><span class="lineno"> 3594</span>&#160;    inactiveCpuRefCounter = backendProfilingCpuRef.<a class="code" href="classarmnn_1_1profiling_1_1_backend_profiling.xhtml#a23d09d59f5da5d396a89c9543204dce3">GetCounterStatus</a>(cpuRefCounters[0]);</div><div class="line"><a name="l03595"></a><span class="lineno"> 3595</span>&#160;    BOOST_CHECK_EQUAL(inactiveCpuRefCounter.<a class="code" href="structarmnn_1_1profiling_1_1_counter_status.xhtml#a968102920ba1226a62e1551d45f1e2d8">m_GlobalCounterId</a>, 5);</div><div class="line"><a name="l03596"></a><span class="lineno"> 3596</span>&#160;    BOOST_CHECK_EQUAL(inactiveCpuRefCounter.<a class="code" href="structarmnn_1_1profiling_1_1_counter_status.xhtml#a29f0ccf670004d1b4127bbfba5ded78b">m_BackendCounterId</a>, cpuRefCounters[0]);</div><div class="line"><a name="l03597"></a><span class="lineno"> 3597</span>&#160;    BOOST_CHECK_EQUAL(inactiveCpuRefCounter.<a class="code" href="structarmnn_1_1profiling_1_1_counter_status.xhtml#a20d049794ba79333eaae506448b764b6">m_SamplingRateInMicroseconds</a>, 0);</div><div class="line"><a name="l03598"></a><span class="lineno"> 3598</span>&#160;    BOOST_CHECK_EQUAL(inactiveCpuRefCounter.<a class="code" href="structarmnn_1_1profiling_1_1_counter_status.xhtml#a34e0355a7ef90e2770f21df2fec7045d">m_Enabled</a>, <span class="keyword">false</span>);</div><div class="line"><a name="l03599"></a><span class="lineno"> 3599</span>&#160;</div><div class="line"><a name="l03600"></a><span class="lineno"> 3600</span>&#160;    <span class="comment">// Reset the profiling service to stop any running thread</span></div><div class="line"><a name="l03601"></a><span class="lineno"> 3601</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml#a30412a91cadff138686eaeb12f5357cc">m_ProfilingOptions</a>.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">false</span>;</div><div class="line"><a name="l03602"></a><span class="lineno"> 3602</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml#a30412a91cadff138686eaeb12f5357cc">m_ProfilingOptions</a>, <span class="keyword">true</span>);</div><div class="line"><a name="l03603"></a><span class="lineno"> 3603</span>&#160;}</div><div class="line"><a name="l03604"></a><span class="lineno"> 3604</span>&#160;</div><div class="line"><a name="l03605"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#ad2ff9e88f8513262bee42f441f3d3b5a"> 3605</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckRegisterCounters)</div><div class="line"><a name="l03606"></a><span class="lineno"> 3606</span>&#160;{</div><div class="line"><a name="l03607"></a><span class="lineno"> 3607</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">armnn::IRuntime::CreationOptions</a> options;</div><div class="line"><a name="l03608"></a><span class="lineno"> 3608</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml#a30412a91cadff138686eaeb12f5357cc">m_ProfilingOptions</a>.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l03609"></a><span class="lineno"> 3609</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml">MockBufferManager</a> mockBuffer(1024);</div><div class="line"><a name="l03610"></a><span class="lineno"> 3610</span>&#160;</div><div class="line"><a name="l03611"></a><span class="lineno"> 3611</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_capture_data.xhtml">CaptureData</a> captureData;</div><div class="line"><a name="l03612"></a><span class="lineno"> 3612</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_service.xhtml">MockProfilingService</a> mockProfilingService(mockBuffer, options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml#a30412a91cadff138686eaeb12f5357cc">m_ProfilingOptions</a>.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a>, captureData);</div><div class="line"><a name="l03613"></a><span class="lineno"> 3613</span>&#160;    <a class="code" href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a> cpuRefId(<a class="code" href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a>);</div><div class="line"><a name="l03614"></a><span class="lineno"> 3614</span>&#160;</div><div class="line"><a name="l03615"></a><span class="lineno"> 3615</span>&#160;    mockProfilingService.<a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_service.xhtml#a87421bf314b7d9f4e881671120d66e9d">RegisterMapping</a>(6, 0, cpuRefId);</div><div class="line"><a name="l03616"></a><span class="lineno"> 3616</span>&#160;    mockProfilingService.<a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_service.xhtml#a87421bf314b7d9f4e881671120d66e9d">RegisterMapping</a>(7, 1, cpuRefId);</div><div class="line"><a name="l03617"></a><span class="lineno"> 3617</span>&#160;    mockProfilingService.<a class="code" href="classarmnn_1_1profiling_1_1_mock_profiling_service.xhtml#a87421bf314b7d9f4e881671120d66e9d">RegisterMapping</a>(8, 2, cpuRefId);</div><div class="line"><a name="l03618"></a><span class="lineno"> 3618</span>&#160;</div><div class="line"><a name="l03619"></a><span class="lineno"> 3619</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_backend_profiling.xhtml">armnn::profiling::BackendProfiling</a> backendProfiling(options,</div><div class="line"><a name="l03620"></a><span class="lineno"> 3620</span>&#160;                                                        mockProfilingService,</div><div class="line"><a name="l03621"></a><span class="lineno"> 3621</span>&#160;                                                        cpuRefId);</div><div class="line"><a name="l03622"></a><span class="lineno"> 3622</span>&#160;</div><div class="line"><a name="l03623"></a><span class="lineno"> 3623</span>&#160;    <a class="code" href="structarmnn_1_1profiling_1_1_timestamp.xhtml">armnn::profiling::Timestamp</a> timestamp;</div><div class="line"><a name="l03624"></a><span class="lineno"> 3624</span>&#160;    timestamp.<a class="code" href="structarmnn_1_1profiling_1_1_timestamp.xhtml#a465bef81f6478756e5443025b1f2ddfa">timestamp</a> = 1000998;</div><div class="line"><a name="l03625"></a><span class="lineno"> 3625</span>&#160;    timestamp.<a class="code" href="structarmnn_1_1profiling_1_1_timestamp.xhtml#a92029bbd41c23ebf7a7f2e2cc5ad4dd7">counterValues</a>.emplace_back(0, 700);</div><div class="line"><a name="l03626"></a><span class="lineno"> 3626</span>&#160;    timestamp.<a class="code" href="structarmnn_1_1profiling_1_1_timestamp.xhtml#a92029bbd41c23ebf7a7f2e2cc5ad4dd7">counterValues</a>.emplace_back(2, 93);</div><div class="line"><a name="l03627"></a><span class="lineno"> 3627</span>&#160;    std::vector&lt;armnn::profiling::Timestamp&gt; timestamps;</div><div class="line"><a name="l03628"></a><span class="lineno"> 3628</span>&#160;    timestamps.push_back(timestamp);</div><div class="line"><a name="l03629"></a><span class="lineno"> 3629</span>&#160;    backendProfiling.<a class="code" href="classarmnn_1_1profiling_1_1_backend_profiling.xhtml#aa51df0c342290615803a99525816e3e3">ReportCounters</a>(timestamps);</div><div class="line"><a name="l03630"></a><span class="lineno"> 3630</span>&#160;</div><div class="line"><a name="l03631"></a><span class="lineno"> 3631</span>&#160;    <span class="keyword">auto</span> readBuffer = mockBuffer.<a class="code" href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml#abce8709dc1b666a26f427ba7ff08b737">GetReadableBuffer</a>();</div><div class="line"><a name="l03632"></a><span class="lineno"> 3632</span>&#160;</div><div class="line"><a name="l03633"></a><span class="lineno"> 3633</span>&#160;    uint32_t headerWord0 = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer, 0);</div><div class="line"><a name="l03634"></a><span class="lineno"> 3634</span>&#160;    uint32_t headerWord1 = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer, 4);</div><div class="line"><a name="l03635"></a><span class="lineno"> 3635</span>&#160;    uint64_t readTimestamp = <a class="code" href="namespacearmnn_1_1profiling.xhtml#aa4de2b511faa41accc2c35cadf051124">ReadUint64</a>(readBuffer, 8);</div><div class="line"><a name="l03636"></a><span class="lineno"> 3636</span>&#160;</div><div class="line"><a name="l03637"></a><span class="lineno"> 3637</span>&#160;    BOOST_TEST(((headerWord0 &gt;&gt; 26) &amp; 0x0000003F) == 3); <span class="comment">// packet family</span></div><div class="line"><a name="l03638"></a><span class="lineno"> 3638</span>&#160;    BOOST_TEST(((headerWord0 &gt;&gt; 19) &amp; 0x0000007F) == 0); <span class="comment">// packet class</span></div><div class="line"><a name="l03639"></a><span class="lineno"> 3639</span>&#160;    BOOST_TEST(((headerWord0 &gt;&gt; 16) &amp; 0x00000007) == 0); <span class="comment">// packet type</span></div><div class="line"><a name="l03640"></a><span class="lineno"> 3640</span>&#160;    BOOST_TEST(headerWord1 == 20);                       <span class="comment">// data length</span></div><div class="line"><a name="l03641"></a><span class="lineno"> 3641</span>&#160;    BOOST_TEST(1000998 == readTimestamp);                <span class="comment">// capture period</span></div><div class="line"><a name="l03642"></a><span class="lineno"> 3642</span>&#160;</div><div class="line"><a name="l03643"></a><span class="lineno"> 3643</span>&#160;    uint32_t offset = 16;</div><div class="line"><a name="l03644"></a><span class="lineno"> 3644</span>&#160;    <span class="comment">// Check Counter Index</span></div><div class="line"><a name="l03645"></a><span class="lineno"> 3645</span>&#160;    uint16_t readIndex = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">ReadUint16</a>(readBuffer, offset);</div><div class="line"><a name="l03646"></a><span class="lineno"> 3646</span>&#160;    BOOST_TEST(6 == readIndex);</div><div class="line"><a name="l03647"></a><span class="lineno"> 3647</span>&#160;</div><div class="line"><a name="l03648"></a><span class="lineno"> 3648</span>&#160;    <span class="comment">// Check Counter Value</span></div><div class="line"><a name="l03649"></a><span class="lineno"> 3649</span>&#160;    offset += 2;</div><div class="line"><a name="l03650"></a><span class="lineno"> 3650</span>&#160;    uint32_t readValue = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer, offset);</div><div class="line"><a name="l03651"></a><span class="lineno"> 3651</span>&#160;    BOOST_TEST(700 == readValue);</div><div class="line"><a name="l03652"></a><span class="lineno"> 3652</span>&#160;</div><div class="line"><a name="l03653"></a><span class="lineno"> 3653</span>&#160;    <span class="comment">// Check Counter Index</span></div><div class="line"><a name="l03654"></a><span class="lineno"> 3654</span>&#160;    offset += 4;</div><div class="line"><a name="l03655"></a><span class="lineno"> 3655</span>&#160;    readIndex = <a class="code" href="namespacearmnn_1_1profiling.xhtml#a0ffb94cb0085a54a92f1c4eeaa6cf772">ReadUint16</a>(readBuffer, offset);</div><div class="line"><a name="l03656"></a><span class="lineno"> 3656</span>&#160;    BOOST_TEST(8 == readIndex);</div><div class="line"><a name="l03657"></a><span class="lineno"> 3657</span>&#160;</div><div class="line"><a name="l03658"></a><span class="lineno"> 3658</span>&#160;    <span class="comment">// Check Counter Value</span></div><div class="line"><a name="l03659"></a><span class="lineno"> 3659</span>&#160;    offset += 2;</div><div class="line"><a name="l03660"></a><span class="lineno"> 3660</span>&#160;    readValue = <a class="code" href="namespacearmnn_1_1profiling.xhtml#ad56f4c3ea5e88279bb6ef1f31d9dc6df">ReadUint32</a>(readBuffer, offset);</div><div class="line"><a name="l03661"></a><span class="lineno"> 3661</span>&#160;    BOOST_TEST(93 == readValue);</div><div class="line"><a name="l03662"></a><span class="lineno"> 3662</span>&#160;}</div><div class="line"><a name="l03663"></a><span class="lineno"> 3663</span>&#160;</div><div class="line"><a name="l03664"></a><span class="lineno"><a class="line" href="_profiling_tests_8cpp.xhtml#a1d081838fd1b6ab50d36ef78bc4bc3b4"> 3664</a></span>&#160;<a class="code" href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">BOOST_AUTO_TEST_CASE</a>(CheckFileFormat) {</div><div class="line"><a name="l03665"></a><span class="lineno"> 3665</span>&#160;    <span class="comment">// Locally reduce log level to &quot;Warning&quot;, as this test needs to parse a warning message from the standard output</span></div><div class="line"><a name="l03666"></a><span class="lineno"> 3666</span>&#160;    <a class="code" href="structarmnn_1_1profiling_1_1_log_level_swapper.xhtml">LogLevelSwapper</a> logLevelSwapper(<a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">armnn::LogSeverity::Warning</a>);</div><div class="line"><a name="l03667"></a><span class="lineno"> 3667</span>&#160;</div><div class="line"><a name="l03668"></a><span class="lineno"> 3668</span>&#160;    <span class="comment">// Create profiling options.</span></div><div class="line"><a name="l03669"></a><span class="lineno"> 3669</span>&#160;    <a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a> options;</div><div class="line"><a name="l03670"></a><span class="lineno"> 3670</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">m_EnableProfiling</a> = <span class="keyword">true</span>;</div><div class="line"><a name="l03671"></a><span class="lineno"> 3671</span>&#160;    <span class="comment">// Check the default value set to binary</span></div><div class="line"><a name="l03672"></a><span class="lineno"> 3672</span>&#160;    BOOST_CHECK(options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#aeec9a6408083ab1b6bf7fa3e566ebe46">m_FileFormat</a> == <span class="stringliteral">&quot;binary&quot;</span>);</div><div class="line"><a name="l03673"></a><span class="lineno"> 3673</span>&#160;</div><div class="line"><a name="l03674"></a><span class="lineno"> 3674</span>&#160;    <span class="comment">// Change file format to an unsupported value</span></div><div class="line"><a name="l03675"></a><span class="lineno"> 3675</span>&#160;    options.<a class="code" href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#aeec9a6408083ab1b6bf7fa3e566ebe46">m_FileFormat</a> = <span class="stringliteral">&quot;json&quot;</span>;</div><div class="line"><a name="l03676"></a><span class="lineno"> 3676</span>&#160;    <span class="comment">// Enable the profiling service</span></div><div class="line"><a name="l03677"></a><span class="lineno"> 3677</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a> profilingService;</div><div class="line"><a name="l03678"></a><span class="lineno"> 3678</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">ResetExternalProfilingOptions</a>(options, <span class="keyword">true</span>);</div><div class="line"><a name="l03679"></a><span class="lineno"> 3679</span>&#160;    <span class="comment">// Start the command handler and the send thread</span></div><div class="line"><a name="l03680"></a><span class="lineno"> 3680</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();</div><div class="line"><a name="l03681"></a><span class="lineno"> 3681</span>&#160;    BOOST_CHECK(profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">GetCurrentState</a>()==<a class="code" href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">ProfilingState::NotConnected</a>);</div><div class="line"><a name="l03682"></a><span class="lineno"> 3682</span>&#160;</div><div class="line"><a name="l03683"></a><span class="lineno"> 3683</span>&#160;    <span class="comment">// Redirect the output to a local stream so that we can parse the warning message</span></div><div class="line"><a name="l03684"></a><span class="lineno"> 3684</span>&#160;    std::stringstream ss;</div><div class="line"><a name="l03685"></a><span class="lineno"> 3685</span>&#160;    <a class="code" href="structarmnn_1_1profiling_1_1_stream_redirector.xhtml">StreamRedirector</a> streamRedirector(std::cout, ss.rdbuf());</div><div class="line"><a name="l03686"></a><span class="lineno"> 3686</span>&#160;</div><div class="line"><a name="l03687"></a><span class="lineno"> 3687</span>&#160;    <span class="comment">// When Update is called and the current state is ProfilingState::NotConnected</span></div><div class="line"><a name="l03688"></a><span class="lineno"> 3688</span>&#160;    <span class="comment">// an exception will be raised from GetProfilingConnection and displayed as warning in the output local stream</span></div><div class="line"><a name="l03689"></a><span class="lineno"> 3689</span>&#160;    profilingService.<a class="code" href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">Update</a>();</div><div class="line"><a name="l03690"></a><span class="lineno"> 3690</span>&#160;</div><div class="line"><a name="l03691"></a><span class="lineno"> 3691</span>&#160;    streamRedirector.CancelRedirect();</div><div class="line"><a name="l03692"></a><span class="lineno"> 3692</span>&#160;</div><div class="line"><a name="l03693"></a><span class="lineno"> 3693</span>&#160;    <span class="comment">// Check that the expected error has occurred and logged to the standard output</span></div><div class="line"><a name="l03694"></a><span class="lineno"> 3694</span>&#160;    <span class="keywordflow">if</span> (ss.str().find(<span class="stringliteral">&quot;Unsupported profiling file format, only binary is supported&quot;</span>) == std::string::npos)</div><div class="line"><a name="l03695"></a><span class="lineno"> 3695</span>&#160;    {</div><div class="line"><a name="l03696"></a><span class="lineno"> 3696</span>&#160;        std::cout &lt;&lt; ss.str();</div><div class="line"><a name="l03697"></a><span class="lineno"> 3697</span>&#160;        BOOST_FAIL(<span class="stringliteral">&quot;Expected string not found.&quot;</span>);</div><div class="line"><a name="l03698"></a><span class="lineno"> 3698</span>&#160;    }</div><div class="line"><a name="l03699"></a><span class="lineno"> 3699</span>&#160;}</div><div class="line"><a name="l03700"></a><span class="lineno"> 3700</span>&#160;</div><div class="line"><a name="l03701"></a><span class="lineno"> 3701</span>&#160;<a class="code" href="_profiler_tests_8cpp.xhtml#af7f71af5c6c124222dd1c42c5df892f4">BOOST_AUTO_TEST_SUITE_END</a>()</div><div class="ttc" id="_output_shape_of_squeeze_8cpp_xhtml_ae3a6cb217a792718f2bd0e8f45e3ca9e"><div class="ttname"><a href="_output_shape_of_squeeze_8cpp.xhtml#ae3a6cb217a792718f2bd0e8f45e3ca9e">BOOST_AUTO_TEST_SUITE</a></div><div class="ttdeci">BOOST_AUTO_TEST_SUITE(TensorflowLiteParser)</div></div>
<div class="ttc" id="namespacearmnn_xhtml_a22f1d90f329261a58e14827f99090e93"><div class="ttname"><a href="namespacearmnn.xhtml#a22f1d90f329261a58e14827f99090e93">armnn::GetProfilingService</a></div><div class="ttdeci">profiling::ProfilingService &amp; GetProfilingService(armnn::RuntimeImpl *runtime)</div><div class="ttdef"><b>Definition:</b> <a href="_test_utils_8cpp_source.xhtml#l00035">TestUtils.cpp:35</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa"><div class="ttname"><a href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da0eaadb4fcb48a0a0ed7bc9868be9fbaa">armnn::LogSeverity::Warning</a></div></div>
<div class="ttc" id="_ignore_unused_8hpp_xhtml"><div class="ttname"><a href="_ignore_unused_8hpp.xhtml">IgnoreUnused.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_state_machine_xhtml_ad8d263669817cf577760710ff6c96bb9"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#ad8d263669817cf577760710ff6c96bb9">armnn::profiling::ProfilingStateMachine::GetCurrentState</a></div><div class="ttdeci">ProfilingState GetCurrentState() const</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_state_machine_8cpp_source.xhtml#l00031">ProfilingStateMachine.cpp:31</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_state_machine_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml">armnn::profiling::ProfilingStateMachine</a></div><div class="ttdef"><b>Definition:</b> <a href="_profiling_state_machine_8hpp_source.xhtml#l00026">ProfilingStateMachine.hpp:26</a></div></div>
<div class="ttc" id="structarmnn_1_1profiling_1_1_counter_status_xhtml_a34e0355a7ef90e2770f21df2fec7045d"><div class="ttname"><a href="structarmnn_1_1profiling_1_1_counter_status.xhtml#a34e0355a7ef90e2770f21df2fec7045d">armnn::profiling::CounterStatus::m_Enabled</a></div><div class="ttdeci">bool m_Enabled</div><div class="ttdef"><b>Definition:</b> <a href="_i_backend_profiling_8hpp_source.xhtml#l00045">IBackendProfiling.hpp:45</a></div></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="_profiling_tests_8cpp_xhtml_ab4d41bacbbe4c3524a95c6d67f6037f3"><div class="ttname"><a href="_profiling_tests_8cpp.xhtml#ab4d41bacbbe4c3524a95c6d67f6037f3">ProfilingCurrentStateThreadImpl</a></div><div class="ttdeci">void ProfilingCurrentStateThreadImpl(ProfilingStateMachine &amp;states)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8cpp_source.xhtml#l00467">ProfilingTests.cpp:467</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="_send_timeline_packet_8hpp_xhtml"><div class="ttname"><a href="_send_timeline_packet_8hpp.xhtml">SendTimelinePacket.hpp</a></div></div>
<div class="ttc" id="_profiling_tests_8cpp_xhtml_afbc30a5751c7cc292a235d5d3651a691"><div class="ttname"><a href="_profiling_tests_8cpp.xhtml#afbc30a5751c7cc292a235d5d3651a691">StringToSwTraceStringTestHelper</a></div><div class="ttdeci">void StringToSwTraceStringTestHelper(const std::string &amp;testString, std::vector&lt; uint32_t &gt; buffer, size_t expectedSize)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8cpp_source.xhtml#l02212">ProfilingTests.cpp:2212</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_service_xhtml_a5a8454419fcb43e456ad6ad1b2143402"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a5a8454419fcb43e456ad6ad1b2143402">armnn::profiling::ProfilingService::GetAbsoluteCounterValue</a></div><div class="ttdeci">uint32_t GetAbsoluteCounterValue(uint16_t counterUid) const override</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_service_8cpp_source.xhtml#l00245">ProfilingService.cpp:245</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_id_map_xhtml_a40f23e39c9e564d9276caa8d8331aa47"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a40f23e39c9e564d9276caa8d8331aa47">armnn::profiling::CounterIdMap::GetGlobalId</a></div><div class="ttdeci">uint16_t GetGlobalId(uint16_t backendCounterId, const armnn::BackendId &amp;backendId) const override</div><div class="ttdef"><b>Definition:</b> <a href="_counter_id_map_8cpp_source.xhtml#l00030">CounterIdMap.cpp:30</a></div></div>
<div class="ttc" id="structarmnn_1_1profiling_1_1_timestamp_xhtml_a465bef81f6478756e5443025b1f2ddfa"><div class="ttname"><a href="structarmnn_1_1profiling_1_1_timestamp.xhtml#a465bef81f6478756e5443025b1f2ddfa">armnn::profiling::Timestamp::timestamp</a></div><div class="ttdeci">uint64_t timestamp</div><div class="ttdef"><b>Definition:</b> <a href="_i_backend_profiling_8hpp_source.xhtml#l00029">IBackendProfiling.hpp:29</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_backend_profiling_xhtml_a54b66ce39aa9a413d8d68f6e2569af45"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_backend_profiling.xhtml#a54b66ce39aa9a413d8d68f6e2569af45">armnn::profiling::BackendProfiling::GetActiveCounters</a></div><div class="ttdeci">std::vector&lt; CounterStatus &gt; GetActiveCounters() override</div><div class="ttdef"><b>Definition:</b> <a href="_backend_profiling_8cpp_source.xhtml#l00067">BackendProfiling.cpp:67</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea83c2c4e9b658ccafbcbe6309c5d84c64">armnn::Compute::CpuRef</a></div><div class="ttdoc">CPU Execution: Reference C++ kernels. </div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper_xhtml_a19cea020509e009eb4661618eecf3cf3"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a19cea020509e009eb4661618eecf3cf3">armnn::profiling::SwapProfilingConnectionFactoryHelper::WaitForPacketsSent</a></div><div class="ttdeci">long WaitForPacketsSent(MockProfilingConnection *mockProfilingConnection, MockProfilingConnection::PacketType packetType, uint32_t length=0, uint32_t timeout=1000)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8hpp_source.xhtml#l00242">ProfilingTests.hpp:242</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_test_profiling_connection_timeout_error_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_test_profiling_connection_timeout_error.xhtml">armnn::profiling::TestProfilingConnectionTimeoutError</a></div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8hpp_source.xhtml#l00106">ProfilingTests.hpp:106</a></div></div>
<div class="ttc" id="_utils_8hpp_xhtml"><div class="ttname"><a href="_utils_8hpp.xhtml">Utils.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_service_xhtml_ad8d263669817cf577760710ff6c96bb9"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ad8d263669817cf577760710ff6c96bb9">armnn::profiling::ProfilingService::GetCurrentState</a></div><div class="ttdeci">ProfilingState GetCurrentState() const</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_service_8cpp_source.xhtml#l00230">ProfilingService.cpp:230</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_read_counter_values_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_read_counter_values.xhtml">armnn::profiling::IReadCounterValues</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_values_8hpp_source.xhtml#l00016">ICounterValues.hpp:16</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_command_handler_xhtml_af5f886492fa5da4ff3cde1769e9da2cb"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_command_handler.xhtml#af5f886492fa5da4ff3cde1769e9da2cb">armnn::profiling::CommandHandler::Start</a></div><div class="ttdeci">void Start(IProfilingConnection &amp;profilingConnection)</div><div class="ttdef"><b>Definition:</b> <a href="_command_handler_8cpp_source.xhtml#l00017">CommandHandler.cpp:17</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_directory_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_directory.xhtml">armnn::profiling::CounterDirectory</a></div><div class="ttdef"><b>Definition:</b> <a href="src_2profiling_2_counter_directory_8hpp_source.xhtml#l00023">CounterDirectory.hpp:23</a></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="classarmnn_1_1profiling_1_1_capture_data_xhtml_a47fc9ce6c654658dfeb9f8ed2071885e"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_capture_data.xhtml#a47fc9ce6c654658dfeb9f8ed2071885e">armnn::profiling::CaptureData::GetCounterIds</a></div><div class="ttdeci">const std::vector&lt; uint16_t &gt; &amp; GetCounterIds() const</div><div class="ttdef"><b>Definition:</b> <a href="_holder_8cpp_source.xhtml#l00049">Holder.cpp:49</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_counter_xhtml_a69719c180aafcdf5a25f81a851c74809"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter.xhtml#a69719c180aafcdf5a25f81a851c74809">armnn::profiling::Counter::m_Interpolation</a></div><div class="ttdeci">uint16_t m_Interpolation</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00126">ICounterDirectory.hpp:126</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_aa4de2b511faa41accc2c35cadf051124"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#aa4de2b511faa41accc2c35cadf051124">armnn::profiling::ReadUint64</a></div><div class="ttdeci">uint64_t ReadUint64(const IPacketBufferPtr &amp;packetBuffer, unsigned int offset)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00174">ProfilingUtils.cpp:174</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_service_runtime_helper_xhtml_a03f72b1ccbef21ab7caafb037ce2144c"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service_runtime_helper.xhtml#a03f72b1ccbef21ab7caafb037ce2144c">armnn::profiling::ProfilingServiceRuntimeHelper::ForceTransitionToState</a></div><div class="ttdeci">void ForceTransitionToState(ProfilingState newState)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_test_utils_8hpp_source.xhtml#l00084">ProfilingTestUtils.hpp:84</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_set_xhtml_ab4676c63d2f2d14922a8f7cc768d1618"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_set.xhtml#ab4676c63d2f2d14922a8f7cc768d1618">armnn::profiling::CounterSet::m_Count</a></div><div class="ttdeci">uint16_t m_Count</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00090">ICounterDirectory.hpp:90</a></div></div>
<div class="ttc" id="structarmnn_1_1profiling_1_1_counter_status_xhtml_a20d049794ba79333eaae506448b764b6"><div class="ttname"><a href="structarmnn_1_1profiling_1_1_counter_status.xhtml#a20d049794ba79333eaae506448b764b6">armnn::profiling::CounterStatus::m_SamplingRateInMicroseconds</a></div><div class="ttdeci">uint32_t m_SamplingRateInMicroseconds</div><div class="ttdef"><b>Definition:</b> <a href="_i_backend_profiling_8hpp_source.xhtml#l00046">IBackendProfiling.hpp:46</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_aeeb6904ffbae435c8d0a7138427688f4"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#aeeb6904ffbae435c8d0a7138427688f4">armnn::profiling::Counters</a></div><div class="ttdeci">std::unordered_map&lt; uint16_t, CounterPtr &gt; Counters</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00038">ICounterDirectory.hpp:38</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_counter_directory_xhtml_a90890aee41059d8fed244538acc4044f"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#a90890aee41059d8fed244538acc4044f">armnn::profiling::ICounterDirectory::GetCategory</a></div><div class="ttdeci">virtual const Category * GetCategory(const std::string &amp;name) const =0</div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_register_backend_counters_xhtml_aa59f702553e07454e57b7d75294ded25"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_register_backend_counters.xhtml#aa59f702553e07454e57b7d75294ded25">armnn::profiling::RegisterBackendCounters::RegisterDevice</a></div><div class="ttdeci">uint16_t 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="_register_backend_counters_8cpp_source.xhtml#l00019">RegisterBackendCounters.cpp:19</a></div></div>
<div class="ttc" id="_runtime_8hpp_xhtml"><div class="ttname"><a href="_runtime_8hpp.xhtml">Runtime.hpp</a></div></div>
<div class="ttc" id="_profiling_tests_8hpp_xhtml"><div class="ttname"><a href="_profiling_tests_8hpp.xhtml">ProfilingTests.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_capture_data_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_capture_data.xhtml">armnn::profiling::CaptureData</a></div><div class="ttdef"><b>Definition:</b> <a href="_holder_8hpp_source.xhtml#l00019">Holder.hpp:19</a></div></div>
<div class="ttc" id="_connection_acknowledged_command_handler_8hpp_xhtml"><div class="ttname"><a href="_connection_acknowledged_command_handler_8hpp.xhtml">ConnectionAcknowledgedCommandHandler.hpp</a></div></div>
<div class="ttc" id="_profiling_test_utils_8cpp_xhtml_aa449021ed1a9de7abcdbd0ca903577db"><div class="ttname"><a href="_profiling_test_utils_8cpp.xhtml#aa449021ed1a9de7abcdbd0ca903577db">GetStreamMetaDataPacketSize</a></div><div class="ttdeci">uint32_t GetStreamMetaDataPacketSize()</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_test_utils_8cpp_source.xhtml#l00021">ProfilingTestUtils.cpp:21</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper_xhtml_a03f72b1ccbef21ab7caafb037ce2144c"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a03f72b1ccbef21ab7caafb037ce2144c">armnn::profiling::SwapProfilingConnectionFactoryHelper::ForceTransitionToState</a></div><div class="ttdeci">void ForceTransitionToState(ProfilingState newState)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8hpp_source.xhtml#l00237">ProfilingTests.hpp:237</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_mock_profiling_service_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_mock_profiling_service.xhtml">armnn::profiling::MockProfilingService</a></div><div class="ttdef"><b>Definition:</b> <a href="_profiling_mocks_8hpp_source.xhtml#l00627">ProfilingMocks.hpp:627</a></div></div>
<div class="ttc" id="structarmnn_1_1profiling_1_1_timestamp_xhtml"><div class="ttname"><a href="structarmnn_1_1profiling_1_1_timestamp.xhtml">armnn::profiling::Timestamp</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_backend_profiling_8hpp_source.xhtml#l00027">IBackendProfiling.hpp:27</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_backend_profiling_xhtml_aa51df0c342290615803a99525816e3e3"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_backend_profiling.xhtml#aa51df0c342290615803a99525816e3e3">armnn::profiling::BackendProfiling::ReportCounters</a></div><div class="ttdeci">void ReportCounters(const std::vector&lt; Timestamp &gt; &amp;) override</div><div class="ttdef"><b>Definition:</b> <a href="_backend_profiling_8cpp_source.xhtml#l00033">BackendProfiling.cpp:33</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="classarmnn_1_1profiling_1_1_counter_directory_xhtml_aa898e858d26d200fbc3788ac6d14fd90"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#aa898e858d26d200fbc3788ac6d14fd90">armnn::profiling::CounterDirectory::GetDevice</a></div><div class="ttdeci">const Device * GetDevice(uint16_t uid) const override</div><div class="ttdef"><b>Definition:</b> <a href="_counter_directory_8cpp_source.xhtml#l00343">CounterDirectory.cpp:343</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_counter_directory_xhtml_acab78d0987a9cca5a9cac957be610a7d"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#acab78d0987a9cca5a9cac957be610a7d">armnn::profiling::ICounterDirectory::GetCounterCount</a></div><div class="ttdeci">virtual uint16_t GetCounterCount() const =0</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_a84079a1f364c37c59230bc52332d8d19"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter.xhtml#a84079a1f364c37c59230bc52332d8d19">armnn::profiling::Counter::m_Units</a></div><div class="ttdeci">std::string m_Units</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00130">ICounterDirectory.hpp:130</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_directory_xhtml_ae3b7dbaa7317dacbcec25f30f6a16075"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ae3b7dbaa7317dacbcec25f30f6a16075">armnn::profiling::CounterDirectory::GetCounterSetCount</a></div><div class="ttdeci">uint16_t GetCounterSetCount() const override</div><div class="ttdef"><b>Definition:</b> <a href="src_2profiling_2_counter_directory_8hpp_source.xhtml#l00053">CounterDirectory.hpp:53</a></div></div>
<div class="ttc" id="structarmnn_1_1profiling_1_1_stream_redirector_xhtml"><div class="ttname"><a href="structarmnn_1_1profiling_1_1_stream_redirector.xhtml">armnn::profiling::StreamRedirector</a></div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8hpp_source.xhtml#l00045">ProfilingTests.hpp:45</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="_send_thread_8hpp_xhtml"><div class="ttname"><a href="_send_thread_8hpp.xhtml">SendThread.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_test_profiling_connection_bad_ack_packet_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_test_profiling_connection_bad_ack_packet.xhtml">armnn::profiling::TestProfilingConnectionBadAckPacket</a></div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8hpp_source.xhtml#l00158">ProfilingTests.hpp:158</a></div></div>
<div class="ttc" id="_profiling_state_machine_8hpp_xhtml"><div class="ttname"><a href="_profiling_state_machine_8hpp.xhtml">ProfilingStateMachine.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_counter_directory_xhtml_a228989d3c53e86e779567ca5c2033ec2"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#a228989d3c53e86e779567ca5c2033ec2">armnn::profiling::ICounterDirectory::GetDevice</a></div><div class="ttdeci">virtual const Device * GetDevice(uint16_t uid) const =0</div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_mock_profiling_connection_xhtml_adc32d741a992ea6f9af3f9e65aebf34d"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#adc32d741a992ea6f9af3f9e65aebf34d">armnn::profiling::MockProfilingConnection::GetWrittenDataSize</a></div><div class="ttdeci">unsigned long GetWrittenDataSize()</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_mocks_8hpp_source.xhtml#l00141">ProfilingMocks.hpp:141</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_mock_profiling_connection_xhtml_aa71d36872f416feaa853788a7a7a7ef8"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#aa71d36872f416feaa853788a7a7a7ef8">armnn::profiling::MockProfilingConnection::Clear</a></div><div class="ttdeci">void Clear()</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_mocks_8hpp_source.xhtml#l00148">ProfilingMocks.hpp:148</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="namespacearmnn_xhtml_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_counter_directory_xhtml_a8908490db3b8a0003a639ac56b956cee"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#a8908490db3b8a0003a639ac56b956cee">armnn::profiling::ICounterDirectory::GetCounterSets</a></div><div class="ttdeci">virtual const CounterSets &amp; GetCounterSets() const =0</div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_id_map_xhtml_a4c014af62ced747fc2ebbbc312f9845f"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a4c014af62ced747fc2ebbbc312f9845f">armnn::profiling::CounterIdMap::RegisterMapping</a></div><div class="ttdeci">void RegisterMapping(uint16_t globalCounterId, uint16_t backendCounterId, const armnn::BackendId &amp;backendId) override</div><div class="ttdef"><b>Definition:</b> <a href="_counter_id_map_8cpp_source.xhtml#l00015">CounterIdMap.cpp:15</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_service_xhtml_a65d18fa17ec0238d7e72f6c8f5c880b6"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a65d18fa17ec0238d7e72f6c8f5c880b6">armnn::profiling::ProfilingService::Disconnect</a></div><div class="ttdeci">void Disconnect()</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_service_8cpp_source.xhtml#l00191">ProfilingService.cpp:191</a></div></div>
<div class="ttc" id="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options_xhtml_a26d42007440bb01a1a6d0ab3b5a657ee"><div class="ttname"><a href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#a26d42007440bb01a1a6d0ab3b5a657ee">armnn::IRuntime::CreationOptions::ExternalProfilingOptions::m_EnableProfiling</a></div><div class="ttdeci">bool m_EnableProfiling</div><div class="ttdef"><b>Definition:</b> <a href="_i_runtime_8hpp_source.xhtml#l00075">IRuntime.hpp:75</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_service_xhtml_aec0783b5a136e042adcc47bae4fe5291"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aec0783b5a136e042adcc47bae4fe5291">armnn::profiling::ProfilingService::Update</a></div><div class="ttdeci">void Update()</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_service_8cpp_source.xhtml#l00110">ProfilingService.cpp:110</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_service_xhtml_a6c2d955d387944f5b7ad37ebb435a37f"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a6c2d955d387944f5b7ad37ebb435a37f">armnn::profiling::ProfilingService::IncrementCounterValue</a></div><div class="ttdeci">uint32_t IncrementCounterValue(uint16_t counterUid) override</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_service_8cpp_source.xhtml#l00309">ProfilingService.cpp:309</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_xhtml_ad5399f5bba038956f1fbde241bc44096"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter.xhtml#ad5399f5bba038956f1fbde241bc44096">armnn::profiling::Counter::m_Multiplier</a></div><div class="ttdeci">double m_Multiplier</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00127">ICounterDirectory.hpp:127</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_connection_acknowledged_command_handler_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_connection_acknowledged_command_handler.xhtml">armnn::profiling::ConnectionAcknowledgedCommandHandler</a></div><div class="ttdef"><b>Definition:</b> <a href="_connection_acknowledged_command_handler_8hpp_source.xhtml#l00023">ConnectionAcknowledgedCommandHandler.hpp:23</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_periodic_counter_capture_xhtml_a634c58de2126b4a4e6a2a093e60e1290"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_periodic_counter_capture.xhtml#a634c58de2126b4a4e6a2a093e60e1290">armnn::profiling::PeriodicCounterCapture::Stop</a></div><div class="ttdeci">void Stop() override</div><div class="ttdef"><b>Definition:</b> <a href="_periodic_counter_capture_8cpp_source.xhtml#l00037">PeriodicCounterCapture.cpp:37</a></div></div>
<div class="ttc" id="_profiling_tests_8cpp_xhtml_ad95829dbe631cef66652fb42784d9d23"><div class="ttname"><a href="_profiling_tests_8cpp.xhtml#ad95829dbe631cef66652fb42784d9d23">CaptureDataReadThreadImpl</a></div><div class="ttdeci">void CaptureDataReadThreadImpl(const Holder &amp;holder, CaptureData &amp;captureData)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8cpp_source.xhtml#l00555">ProfilingTests.cpp:555</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_set_xhtml_a58ce26007b307f7e6200e4af7fbf601d"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_set.xhtml#a58ce26007b307f7e6200e4af7fbf601d">armnn::profiling::CounterSet::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#l00088">ICounterDirectory.hpp:88</a></div></div>
<div class="ttc" id="_periodic_counter_selection_command_handler_8hpp_xhtml"><div class="ttname"><a href="_periodic_counter_selection_command_handler_8hpp.xhtml">PeriodicCounterSelectionCommandHandler.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml">armnn::profiling::SwapProfilingConnectionFactoryHelper</a></div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8hpp_source.xhtml#l00204">ProfilingTests.hpp:204</a></div></div>
<div class="ttc" id="_command_handler_8hpp_xhtml"><div class="ttname"><a href="_command_handler_8hpp.xhtml">CommandHandler.hpp</a></div></div>
<div class="ttc" id="_numeric_cast_8hpp_xhtml"><div class="ttname"><a href="_numeric_cast_8hpp.xhtml">NumericCast.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_test_functor_a_xhtml_a9cbf98c17d6b7027e60c59fb8ad69a85"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml#a9cbf98c17d6b7027e60c59fb8ad69a85">armnn::profiling::TestFunctorA::GetCount</a></div><div class="ttdeci">int GetCount()</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8hpp_source.xhtml#l00182">ProfilingTests.hpp:182</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_counter_directory_xhtml_a718a75d4c178cf3f687b3f27b8f55091"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#a718a75d4c178cf3f687b3f27b8f55091">armnn::profiling::ICounterDirectory::GetCategories</a></div><div class="ttdeci">virtual const Categories &amp; GetCategories() const =0</div></div>
<div class="ttc" id="_register_backend_counters_8hpp_xhtml"><div class="ttname"><a href="_register_backend_counters_8hpp.xhtml">RegisterBackendCounters.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a982b094fe2faa67a3560cdaf3901d0f8"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a982b094fe2faa67a3560cdaf3901d0f8">armnn::profiling::GetNextUid</a></div><div class="ttdeci">uint16_t GetNextUid(bool peekOnly)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00058">ProfilingUtils.cpp:58</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_test_functor_b_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_test_functor_b.xhtml">armnn::profiling::TestFunctorB</a></div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8hpp_source.xhtml#l00194">ProfilingTests.hpp:194</a></div></div>
<div class="ttc" id="_request_counter_directory_command_handler_8hpp_xhtml"><div class="ttname"><a href="_request_counter_directory_command_handler_8hpp.xhtml">RequestCounterDirectoryCommandHandler.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_mock_profiling_connection_xhtml_a0a80a7bc045affcf10846075b88cbca0"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#a0a80a7bc045affcf10846075b88cbca0">armnn::profiling::MockProfilingConnection::PacketType</a></div><div class="ttdeci">PacketType</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_mocks_8hpp_source.xhtml#l00044">ProfilingMocks.hpp:44</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_directory_xhtml_ad742b37bc2beb568e083225f3fd8160b"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad742b37bc2beb568e083225f3fd8160b">armnn::profiling::CounterDirectory::GetDeviceCount</a></div><div class="ttdeci">uint16_t GetDeviceCount() const override</div><div class="ttdef"><b>Definition:</b> <a href="src_2profiling_2_counter_directory_8hpp_source.xhtml#l00052">CounterDirectory.hpp:52</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_backend_profiling_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_backend_profiling.xhtml">armnn::profiling::BackendProfiling</a></div><div class="ttdef"><b>Definition:</b> <a href="_backend_profiling_8hpp_source.xhtml#l00017">BackendProfiling.hpp:17</a></div></div>
<div class="ttc" id="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options_xhtml"><div class="ttname"><a href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml">armnn::IRuntime::CreationOptions::ExternalProfilingOptions</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_runtime_8hpp_source.xhtml#l00062">IRuntime.hpp:62</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4075072d219e061ca0f3124f8fbef463">armnn::profiling::ProfilingState::NotConnected</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_service_xhtml_a8f9bcec7e9c0fb2fe463c120a0fb43fe"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a8f9bcec7e9c0fb2fe463c120a0fb43fe">armnn::profiling::ProfilingService::GetDeltaCounterValue</a></div><div class="ttdeci">uint32_t GetDeltaCounterValue(uint16_t counterUid) override</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_service_8cpp_source.xhtml#l00253">ProfilingService.cpp:253</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_service_xhtml_a2e08a9bc2818fb46503c1720562de8d7"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a2e08a9bc2818fb46503c1720562de8d7">armnn::profiling::ProfilingService::SubtractCounterValue</a></div><div class="ttdeci">uint32_t SubtractCounterValue(uint16_t counterUid, uint32_t value) override</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_service_8cpp_source.xhtml#l00301">ProfilingService.cpp:301</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_device_xhtml_ab13844df5477a9ab8f13069e3d8abad6"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_device.xhtml#ab13844df5477a9ab8f13069e3d8abad6">armnn::profiling::Device::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#l00073">ICounterDirectory.hpp:73</a></div></div>
<div class="ttc" id="_backend_profiling_8hpp_xhtml"><div class="ttname"><a href="_backend_profiling_8hpp.xhtml">BackendProfiling.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_backend_profiling_xhtml_a23d09d59f5da5d396a89c9543204dce3"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_backend_profiling.xhtml#a23d09d59f5da5d396a89c9543204dce3">armnn::profiling::BackendProfiling::GetCounterStatus</a></div><div class="ttdeci">CounterStatus GetCounterStatus(uint16_t backendCounterId) override</div><div class="ttdef"><b>Definition:</b> <a href="_backend_profiling_8cpp_source.xhtml#l00051">BackendProfiling.cpp:51</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_counter_directory_xhtml_a98e6769cb933d30bfd3ca25f61bd8438"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#a98e6769cb933d30bfd3ca25f61bd8438">armnn::profiling::ICounterDirectory::GetDevices</a></div><div class="ttdeci">virtual const Devices &amp; GetDevices() const =0</div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_mock_buffer_manager_xhtml_ae717263b3243e9f88f4caea6d31b0652"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml#ae717263b3243e9f88f4caea6d31b0652">armnn::profiling::MockBufferManager::MarkRead</a></div><div class="ttdeci">void MarkRead(IPacketBufferPtr &amp;packetBuffer) override</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_mocks_8hpp_source.xhtml#l00248">ProfilingMocks.hpp:248</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_capture_data_xhtml_afe10396cc1bc0b90637e6070351661e9"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_capture_data.xhtml#afe10396cc1bc0b90637e6070351661e9">armnn::profiling::CaptureData::SetCapturePeriod</a></div><div class="ttdeci">void SetCapturePeriod(uint32_t capturePeriod)</div><div class="ttdef"><b>Definition:</b> <a href="_holder_8cpp_source.xhtml#l00029">Holder.cpp:29</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_capture_data_xhtml_a8386da56facf23364a6005a4769bf962"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_capture_data.xhtml#a8386da56facf23364a6005a4769bf962">armnn::profiling::CaptureData::GetCapturePeriod</a></div><div class="ttdeci">uint32_t GetCapturePeriod() const</div><div class="ttdef"><b>Definition:</b> <a href="_holder_8cpp_source.xhtml#l00044">Holder.cpp:44</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_activate_timeline_reporting_command_handler_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_activate_timeline_reporting_command_handler.xhtml">armnn::profiling::ActivateTimelineReportingCommandHandler</a></div><div class="ttdef"><b>Definition:</b> <a href="_activate_timeline_reporting_command_handler_8hpp_source.xhtml#l00025">ActivateTimelineReportingCommandHandler.hpp:25</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a4d3d769b812b6faa6b76e1a8abaece2d">armnn::profiling::ProfilingState::Active</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_counter_directory_xhtml_a67693dcf840ffeadc066ce77ef7b2044"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#a67693dcf840ffeadc066ce77ef7b2044">armnn::profiling::ICounterDirectory::GetCounterSet</a></div><div class="ttdeci">virtual const CounterSet * GetCounterSet(uint16_t uid) const =0</div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_holder_xhtml_a95c8634416821480a8140c87054718f6"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_holder.xhtml#a95c8634416821480a8140c87054718f6">armnn::profiling::Holder::GetCaptureData</a></div><div class="ttdeci">CaptureData GetCaptureData() const</div><div class="ttdef"><b>Definition:</b> <a href="_holder_8cpp_source.xhtml#l00054">Holder.cpp:54</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_set_xhtml_ab13844df5477a9ab8f13069e3d8abad6"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_set.xhtml#ab13844df5477a9ab8f13069e3d8abad6">armnn::profiling::CounterSet::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#l00089">ICounterDirectory.hpp:89</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_service_xhtml_a40078141c4d1216eef4215fc10d0cbbc"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a40078141c4d1216eef4215fc10d0cbbc">armnn::profiling::ProfilingService::SetCaptureData</a></div><div class="ttdeci">void SetCaptureData(uint32_t capturePeriod, const std::vector&lt; uint16_t &gt; &amp;counterIds, const std::set&lt; BackendId &gt; &amp;activeBackends)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_service_8cpp_source.xhtml#l00278">ProfilingService.cpp:278</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_xhtml_ae4a480dde76c2182ba3611d43cc0d109"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter.xhtml#ae4a480dde76c2182ba3611d43cc0d109">armnn::profiling::Counter::m_MaxCounterUid</a></div><div class="ttdeci">uint16_t m_MaxCounterUid</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00124">ICounterDirectory.hpp:124</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_holder_xhtml_ae904af7c6336ceeeb95ab8435047c7cb"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_holder.xhtml#ae904af7c6336ceeeb95ab8435047c7cb">armnn::profiling::Holder::SetCaptureData</a></div><div class="ttdeci">void SetCaptureData(uint32_t capturePeriod, const std::vector&lt; uint16_t &gt; &amp;counterIds, const std::set&lt; armnn::BackendId &gt; &amp;activeBackends)</div><div class="ttdef"><b>Definition:</b> <a href="_holder_8cpp_source.xhtml#l00074">Holder.cpp:74</a></div></div>
<div class="ttc" id="_types_8hpp_xhtml"><div class="ttname"><a href="_types_8hpp.xhtml">Types.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_a6605c82bc625fbd40f24d35edee15fe3"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#a6605c82bc625fbd40f24d35edee15fe3">armnn::profiling::GetNextCounterUids</a></div><div class="ttdeci">std::vector&lt; uint16_t &gt; GetNextCounterUids(uint16_t firstUid, uint16_t cores)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_utils_8cpp_source.xhtml#l00078">ProfilingUtils.cpp:78</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_notify_backends_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_notify_backends.xhtml">armnn::profiling::INotifyBackends</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_notify_backends_8hpp_source.xhtml#l00014">INotifyBackends.hpp:14</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_id_map_xhtml_a332eb20cab18c17fb869168dc493514e"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml#a332eb20cab18c17fb869168dc493514e">armnn::profiling::CounterIdMap::GetBackendId</a></div><div class="ttdeci">const std::pair&lt; uint16_t, armnn::BackendId &gt; &amp; GetBackendId(uint16_t globalCounterId) const override</div><div class="ttdef"><b>Definition:</b> <a href="_counter_id_map_8cpp_source.xhtml#l00043">CounterIdMap.cpp:43</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_register_backend_counters_xhtml_a3760d7378ebc54c779f5032662890154"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_register_backend_counters.xhtml#a3760d7378ebc54c779f5032662890154">armnn::profiling::RegisterBackendCounters::RegisterCounterSet</a></div><div class="ttdeci">uint16_t 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="_register_backend_counters_8cpp_source.xhtml#l00027">RegisterBackendCounters.cpp:27</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_periodic_counter_capture_xhtml_a156f3866ca69d98b4d9e6e1c1b3ec7da"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_periodic_counter_capture.xhtml#a156f3866ca69d98b4d9e6e1c1b3ec7da">armnn::profiling::PeriodicCounterCapture::Start</a></div><div class="ttdeci">void Start() override</div><div class="ttdef"><b>Definition:</b> <a href="_periodic_counter_capture_8cpp_source.xhtml#l00018">PeriodicCounterCapture.cpp:18</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_mock_buffer_manager_xhtml_abce8709dc1b666a26f427ba7ff08b737"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml#abce8709dc1b666a26f427ba7ff08b737">armnn::profiling::MockBufferManager::GetReadableBuffer</a></div><div class="ttdeci">IPacketBufferPtr GetReadableBuffer() override</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_mocks_8hpp_source.xhtml#l00237">ProfilingMocks.hpp:237</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_command_handler_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_command_handler.xhtml">armnn::profiling::CommandHandler</a></div><div class="ttdef"><b>Definition:</b> <a href="_command_handler_8hpp_source.xhtml#l00022">CommandHandler.hpp:22</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_xhtml_a3b95c70c6d9c60fe7b25a4fa9bf20ea0"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter.xhtml#a3b95c70c6d9c60fe7b25a4fa9bf20ea0">armnn::profiling::Counter::m_CounterSetUid</a></div><div class="ttdeci">uint16_t m_CounterSetUid</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00134">ICounterDirectory.hpp:134</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_xhtml_a7aa5f39e2eddecaa9b1b5730c0481b11"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter.xhtml#a7aa5f39e2eddecaa9b1b5730c0481b11">armnn::profiling::Counter::m_Class</a></div><div class="ttdeci">uint16_t m_Class</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00125">ICounterDirectory.hpp:125</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="_counter_id_map_8hpp_xhtml"><div class="ttname"><a href="_counter_id_map_8hpp.xhtml">CounterIdMap.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_service_xhtml_aed969262d8bf6d59eb8f65fb89d47959"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#aed969262d8bf6d59eb8f65fb89d47959">armnn::profiling::ProfilingService::GetCounterMappings</a></div><div class="ttdeci">const ICounterMappings &amp; GetCounterMappings() const override</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_service_8cpp_source.xhtml#l00263">ProfilingService.cpp:263</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_service_xhtml_ae7a3588986b93e13fda47c7ce4b0627c"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#ae7a3588986b93e13fda47c7ce4b0627c">armnn::profiling::ProfilingService::ResetExternalProfilingOptions</a></div><div class="ttdeci">void ResetExternalProfilingOptions(const ExternalProfilingOptions &amp;options, bool resetProfilingService=false)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_service_8cpp_source.xhtml#l00039">ProfilingService.cpp:39</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_test_profiling_connection_timeout_error_xhtml_afb1d388dbb6bed7623ef1d3fb52fb52b"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_test_profiling_connection_timeout_error.xhtml#afb1d388dbb6bed7623ef1d3fb52fb52b">armnn::profiling::TestProfilingConnectionTimeoutError::ReadCalledCount</a></div><div class="ttdeci">int ReadCalledCount()</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8hpp_source.xhtml#l00126">ProfilingTests.hpp:126</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_xhtml_af734583ef63236e643f64bc6f3f93c3d"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter.xhtml#af734583ef63236e643f64bc6f3f93c3d">armnn::profiling::Counter::m_DeviceUid</a></div><div class="ttdeci">uint16_t m_DeviceUid</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00133">ICounterDirectory.hpp:133</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="classarmnn_1_1profiling_1_1_mock_profiling_service_status_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_mock_profiling_service_status.xhtml">armnn::profiling::MockProfilingServiceStatus</a></div><div class="ttdef"><b>Definition:</b> <a href="_profiling_mocks_8hpp_source.xhtml#l00696">ProfilingMocks.hpp:696</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_service_xhtml_a2d1ab72611dfc67cf1b491849ea386a4"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a2d1ab72611dfc67cf1b491849ea386a4">armnn::profiling::ProfilingService::AddCounterValue</a></div><div class="ttdeci">uint32_t AddCounterValue(uint16_t counterUid, uint32_t value) override</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_service_8cpp_source.xhtml#l00293">ProfilingService.cpp:293</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_directory_xhtml_a4626db62503c13042a745a40399f8317"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#a4626db62503c13042a745a40399f8317">armnn::profiling::CounterDirectory::GetCategoryCount</a></div><div class="ttdeci">uint16_t GetCategoryCount() const override</div><div class="ttdef"><b>Definition:</b> <a href="src_2profiling_2_counter_directory_8hpp_source.xhtml#l00051">CounterDirectory.hpp:51</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml">armnn::profiling</a></div><div class="ttdef"><b>Definition:</b> <a href="_backend_id_8hpp_source.xhtml#l00168">BackendId.hpp:168</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a602ddc6408c3347ba4c1eba623003984"><div class="ttname"><a href="namespacearmnn.xhtml#a602ddc6408c3347ba4c1eba623003984">armnn::LOWEST_CAPTURE_PERIOD</a></div><div class="ttdeci">constexpr unsigned int LOWEST_CAPTURE_PERIOD</div><div class="ttdoc">The lowest performance data capture interval we support is 10 miliseconds. </div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00021">Types.hpp:21</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a10d15f3df1ab52b3b915a4be1dbf386b"><div class="ttname"><a href="namespacearmnn.xhtml#a10d15f3df1ab52b3b915a4be1dbf386b">armnn::BOOST_AUTO_TEST_CASE</a></div><div class="ttdeci">BOOST_AUTO_TEST_CASE(CheckConvolution2dLayer)</div><div class="ttdef"><b>Definition:</b> <a href="_const_tensor_layer_visitor_8cpp_source.xhtml#l00268">ConstTensorLayerVisitor.cpp:268</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_xhtml_ab13844df5477a9ab8f13069e3d8abad6"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter.xhtml#ab13844df5477a9ab8f13069e3d8abad6">armnn::profiling::Counter::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#l00128">ICounterDirectory.hpp:128</a></div></div>
<div class="ttc" id="classarmnn_1_1_runtime_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_runtime_exception.xhtml">armnn::RuntimeException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00120">Exceptions.hpp:120</a></div></div>
<div class="ttc" id="structarmnn_1_1profiling_1_1_timestamp_xhtml_a92029bbd41c23ebf7a7f2e2cc5ad4dd7"><div class="ttname"><a href="structarmnn_1_1profiling_1_1_timestamp.xhtml#a92029bbd41c23ebf7a7f2e2cc5ad4dd7">armnn::profiling::Timestamp::counterValues</a></div><div class="ttdeci">std::vector&lt; CounterValue &gt; counterValues</div><div class="ttdef"><b>Definition:</b> <a href="_i_backend_profiling_8hpp_source.xhtml#l00030">IBackendProfiling.hpp:30</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_buffer_manager_xhtml_abce8709dc1b666a26f427ba7ff08b737"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_buffer_manager.xhtml#abce8709dc1b666a26f427ba7ff08b737">armnn::profiling::BufferManager::GetReadableBuffer</a></div><div class="ttdeci">IPacketBufferPtr GetReadableBuffer() override</div><div class="ttdef"><b>Definition:</b> <a href="_buffer_manager_8cpp_source.xhtml#l00116">BufferManager.cpp:116</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_request_counter_directory_command_handler_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_request_counter_directory_command_handler.xhtml">armnn::profiling::RequestCounterDirectoryCommandHandler</a></div><div class="ttdef"><b>Definition:</b> <a href="_request_counter_directory_command_handler_8hpp_source.xhtml#l00021">RequestCounterDirectoryCommandHandler.hpp:21</a></div></div>
<div class="ttc" id="classarmnn_1_1_invalid_argument_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_invalid_argument_exception.xhtml">armnn::InvalidArgumentException</a></div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00080">Exceptions.hpp:80</a></div></div>
<div class="ttc" id="structarmnn_1_1_runtime_impl_xhtml"><div class="ttname"><a href="structarmnn_1_1_runtime_impl.xhtml">armnn::RuntimeImpl</a></div><div class="ttdef"><b>Definition:</b> <a href="_runtime_8hpp_source.xhtml#l00030">Runtime.hpp:30</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_register_backend_counters_xhtml_a380988b279ec147ed405cc86d4436975"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_register_backend_counters.xhtml#a380988b279ec147ed405cc86d4436975">armnn::profiling::RegisterBackendCounters::RegisterCounter</a></div><div class="ttdeci">uint16_t RegisterCounter(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="_register_backend_counters_8cpp_source.xhtml#l00035">RegisterBackendCounters.cpp:35</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_command_handler_xhtml_a17a237457e57625296e6b24feb19c60a"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_command_handler.xhtml#a17a237457e57625296e6b24feb19c60a">armnn::profiling::CommandHandler::Stop</a></div><div class="ttdeci">void Stop()</div><div class="ttdef"><b>Definition:</b> <a href="_command_handler_8cpp_source.xhtml#l00034">CommandHandler.cpp:34</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_device_xhtml_a28e8394686112e495caf069eb46b44ca"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_device.xhtml#a28e8394686112e495caf069eb46b44ca">armnn::profiling::Device::m_Cores</a></div><div class="ttdeci">uint16_t m_Cores</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00074">ICounterDirectory.hpp:74</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_command_handler_xhtml_ad201152b05beda61e51e3594ff07c8fe"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_command_handler.xhtml#ad201152b05beda61e51e3594ff07c8fe">armnn::profiling::CommandHandler::IsRunning</a></div><div class="ttdeci">bool IsRunning() const</div><div class="ttdef"><b>Definition:</b> <a href="_command_handler_8hpp_source.xhtml#l00044">CommandHandler.hpp:44</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a1dc1edc76d5b3c0325f00002f4c841f5">armnn::profiling::ProfilingState::WaitingForAck</a></div></div>
<div class="ttc" id="structarmnn_1_1profiling_1_1_counter_status_xhtml_a968102920ba1226a62e1551d45f1e2d8"><div class="ttname"><a href="structarmnn_1_1profiling_1_1_counter_status.xhtml#a968102920ba1226a62e1551d45f1e2d8">armnn::profiling::CounterStatus::m_GlobalCounterId</a></div><div class="ttdeci">uint16_t m_GlobalCounterId</div><div class="ttdef"><b>Definition:</b> <a href="_i_backend_profiling_8hpp_source.xhtml#l00044">IBackendProfiling.hpp:44</a></div></div>
<div class="ttc" id="_i_counter_values_8hpp_xhtml"><div class="ttname"><a href="_i_counter_values_8hpp.xhtml">ICounterValues.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_mock_profiling_connection_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml">armnn::profiling::MockProfilingConnection</a></div><div class="ttdef"><b>Definition:</b> <a href="_profiling_mocks_8hpp_source.xhtml#l00035">ProfilingMocks.hpp:35</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_periodic_counter_selection_command_handler_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_periodic_counter_selection_command_handler.xhtml">armnn::profiling::PeriodicCounterSelectionCommandHandler</a></div><div class="ttdef"><b>Definition:</b> <a href="_periodic_counter_selection_command_handler_8hpp_source.xhtml#l00031">PeriodicCounterSelectionCommandHandler.hpp:31</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_report_structure_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_report_structure.xhtml">armnn::profiling::IReportStructure</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_report_structure_8hpp_source.xhtml#l00014">IReportStructure.hpp:14</a></div></div>
<div class="ttc" id="_holder_8hpp_xhtml"><div class="ttname"><a href="_holder_8hpp.xhtml">Holder.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper_xhtml_a8ccd73b0bb970c18b05a0bc63fcd0279"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_swap_profiling_connection_factory_helper.xhtml#a8ccd73b0bb970c18b05a0bc63fcd0279">armnn::profiling::SwapProfilingConnectionFactoryHelper::GetMockProfilingConnection</a></div><div class="ttdeci">MockProfilingConnection * GetMockProfilingConnection()</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8hpp_source.xhtml#l00231">ProfilingTests.hpp:231</a></div></div>
<div class="ttc" id="structarmnn_1_1_i_runtime_1_1_creation_options_xhtml"><div class="ttname"><a href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml">armnn::IRuntime::CreationOptions</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_runtime_8hpp_source.xhtml#l00043">IRuntime.hpp:43</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="classarmnn_1_1profiling_1_1_periodic_counter_capture_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_periodic_counter_capture.xhtml">armnn::profiling::PeriodicCounterCapture</a></div><div class="ttdef"><b>Definition:</b> <a href="_periodic_counter_capture_8hpp_source.xhtml#l00026">PeriodicCounterCapture.hpp:26</a></div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806a962074a9de1cf3d6d7b6f955a0a94820">armnn::profiling::ProfilingState::Uninitialised</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_category_xhtml_a12c62f88426b5fe466446040d9dc80af"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_category.xhtml#a12c62f88426b5fe466446040d9dc80af">armnn::profiling::Category::m_Counters</a></div><div class="ttdeci">std::vector&lt; uint16_t &gt; m_Counters</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00058">ICounterDirectory.hpp:58</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_service_xhtml_a5468b88e2e2e65892f9589d00ed06775"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a5468b88e2e2e65892f9589d00ed06775">armnn::profiling::ProfilingService::SetCounterValue</a></div><div class="ttdeci">void SetCounterValue(uint16_t counterUid, uint32_t value) override</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_service_8cpp_source.xhtml#l00285">ProfilingService.cpp:285</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_socket_profiling_connection_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_socket_profiling_connection.xhtml">armnn::profiling::SocketProfilingConnection</a></div><div class="ttdef"><b>Definition:</b> <a href="_socket_profiling_connection_8hpp_source.xhtml#l00018">SocketProfilingConnection.hpp:18</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_directory_xhtml_aefdd6df4feb698935d16311be966fda5"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#aefdd6df4feb698935d16311be966fda5">armnn::profiling::CounterDirectory::GetCounter</a></div><div class="ttdeci">const Counter * GetCounter(uint16_t uid) const override</div><div class="ttdef"><b>Definition:</b> <a href="_counter_directory_8cpp_source.xhtml#l00373">CounterDirectory.cpp:373</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_register_backend_counters_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_register_backend_counters.xhtml">armnn::profiling::RegisterBackendCounters</a></div><div class="ttdef"><b>Definition:</b> <a href="_register_backend_counters_8hpp_source.xhtml#l00019">RegisterBackendCounters.hpp:19</a></div></div>
<div class="ttc" id="_profiler_tests_8cpp_xhtml_af7f71af5c6c124222dd1c42c5df892f4"><div class="ttname"><a href="_profiler_tests_8cpp.xhtml#af7f71af5c6c124222dd1c42c5df892f4">BOOST_AUTO_TEST_SUITE_END</a></div><div class="ttdeci">BOOST_AUTO_TEST_SUITE_END()</div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_service_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service.xhtml">armnn::profiling::ProfilingService</a></div><div class="ttdef"><b>Definition:</b> <a href="_profiling_service_8hpp_source.xhtml#l00049">ProfilingService.hpp:49</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_register_backend_counters_xhtml_a547f56db3e9e8c6f5b6ac7b7d3194bfe"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_register_backend_counters.xhtml#a547f56db3e9e8c6f5b6ac7b7d3194bfe">armnn::profiling::RegisterBackendCounters::RegisterCategory</a></div><div class="ttdeci">void RegisterCategory(const std::string &amp;categoryName) override</div><div class="ttdef"><b>Definition:</b> <a href="_register_backend_counters_8cpp_source.xhtml#l00014">RegisterBackendCounters.cpp:14</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_directory_xhtml_aab31f60f412b119002a465e13d5165f0"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#aab31f60f412b119002a465e13d5165f0">armnn::profiling::CounterDirectory::GetCategory</a></div><div class="ttdeci">const Category * GetCategory(const std::string &amp;name) const override</div><div class="ttdef"><b>Definition:</b> <a href="_counter_directory_8cpp_source.xhtml#l00329">CounterDirectory.cpp:329</a></div></div>
<div class="ttc" id="structarmnn_1_1profiling_1_1_log_level_swapper_xhtml"><div class="ttname"><a href="structarmnn_1_1profiling_1_1_log_level_swapper.xhtml">armnn::profiling::LogLevelSwapper</a></div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8hpp_source.xhtml#l00030">ProfilingTests.hpp:30</a></div></div>
<div class="ttc" id="structarmnn_1_1_empty_optional_xhtml"><div class="ttname"><a href="structarmnn_1_1_empty_optional.xhtml">armnn::EmptyOptional</a></div><div class="ttdoc">EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...</div><div class="ttdef"><b>Definition:</b> <a href="_optional_8hpp_source.xhtml#l00032">Optional.hpp:32</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_xhtml_a5edaa2326b1410fae32c5253ed0188d8"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter.xhtml#a5edaa2326b1410fae32c5253ed0188d8">armnn::profiling::Counter::m_Description</a></div><div class="ttdeci">std::string m_Description</div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00129">ICounterDirectory.hpp:129</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_service_runtime_helper_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service_runtime_helper.xhtml">armnn::profiling::ProfilingServiceRuntimeHelper</a></div><div class="ttdef"><b>Definition:</b> <a href="_profiling_test_utils_8hpp_source.xhtml#l00071">ProfilingTestUtils.hpp:71</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_periodic_counter_capture_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_periodic_counter_capture.xhtml">armnn::profiling::IPeriodicCounterCapture</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_periodic_counter_capture_8hpp_source.xhtml#l00013">IPeriodicCounterCapture.hpp:13</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_send_counter_packet_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_send_counter_packet.xhtml">armnn::profiling::SendCounterPacket</a></div><div class="ttdef"><b>Definition:</b> <a href="_send_counter_packet_8hpp_source.xhtml#l00021">SendCounterPacket.hpp:21</a></div></div>
<div class="ttc" id="_profiling_tests_8cpp_xhtml_ab7f1426bff6283557173d80c0d193b8b"><div class="ttname"><a href="_profiling_tests_8cpp.xhtml#ab7f1426bff6283557173d80c0d193b8b">CaptureDataWriteThreadImpl</a></div><div class="ttdeci">void CaptureDataWriteThreadImpl(Holder &amp;holder, uint32_t capturePeriod, const std::vector&lt; uint16_t &gt; &amp;counterIds)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8cpp_source.xhtml#l00550">ProfilingTests.cpp:550</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_buffer_manager_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_buffer_manager.xhtml">armnn::profiling::BufferManager</a></div><div class="ttdef"><b>Definition:</b> <a href="_buffer_manager_8hpp_source.xhtml#l00022">BufferManager.hpp:22</a></div></div>
<div class="ttc" id="structarmnn_1_1profiling_1_1_counter_status_xhtml"><div class="ttname"><a href="structarmnn_1_1profiling_1_1_counter_status.xhtml">armnn::profiling::CounterStatus</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_backend_profiling_8hpp_source.xhtml#l00033">IBackendProfiling.hpp:33</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_1_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_exception.xhtml">armnn::Exception</a></div><div class="ttdoc">Base class for all ArmNN exceptions so that users can filter to just those. </div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00046">Exceptions.hpp:46</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1"><div class="ttname"><a href="namespacearmnn.xhtml#ae2f04a162585c0a5222a537efd5456aea39f8662ca778258e9c6a14f26fec5ec1">armnn::Compute::CpuAcc</a></div><div class="ttdoc">CPU Execution: NEON: ArmCompute. </div></div>
<div class="ttc" id="namespacearmnn_1_1profiling_xhtml_acb0c054138599582d5a5f537e9798806"><div class="ttname"><a href="namespacearmnn_1_1profiling.xhtml#acb0c054138599582d5a5f537e9798806">armnn::profiling::ProfilingState</a></div><div class="ttdeci">ProfilingState</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_state_machine_8hpp_source.xhtml#l00018">ProfilingStateMachine.hpp:18</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_test_profiling_connection_armnn_error_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_test_profiling_connection_armnn_error.xhtml">armnn::profiling::TestProfilingConnectionArmnnError</a></div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8hpp_source.xhtml#l00135">ProfilingTests.hpp:135</a></div></div>
<div class="ttc" id="_socket_profiling_connection_8hpp_xhtml"><div class="ttname"><a href="_socket_profiling_connection_8hpp.xhtml">SocketProfilingConnection.hpp</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_profiling_service_runtime_helper_xhtml_a33b6add40a385911fe653ac446124deb"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service_runtime_helper.xhtml#a33b6add40a385911fe653ac446124deb">armnn::profiling::ProfilingServiceRuntimeHelper::GetProfilingBufferManager</a></div><div class="ttdeci">BufferManager &amp; GetProfilingBufferManager()</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_test_utils_8hpp_source.xhtml#l00078">ProfilingTestUtils.hpp:78</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_capture_data_xhtml_af3d98d2ad9e92c4aa5fe7ef4732ac143"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_capture_data.xhtml#af3d98d2ad9e92c4aa5fe7ef4732ac143">armnn::profiling::CaptureData::SetCounterIds</a></div><div class="ttdeci">void SetCounterIds(const std::vector&lt; uint16_t &gt; &amp;counterIds)</div><div class="ttdef"><b>Definition:</b> <a href="_holder_8cpp_source.xhtml#l00034">Holder.cpp:34</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_mock_profiling_connection_xhtml_a42eb542b5a1d73d00c4ce474140bb78c"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#a42eb542b5a1d73d00c4ce474140bb78c">armnn::profiling::MockProfilingConnection::WritePacket</a></div><div class="ttdeci">bool WritePacket(const unsigned char *buffer, uint32_t length) override</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_mocks_8hpp_source.xhtml#l00073">ProfilingMocks.hpp:73</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_directory_xhtml_ad9062caad1836f8e6b810e4e97bb19d1"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad9062caad1836f8e6b810e4e97bb19d1">armnn::profiling::CounterDirectory::GetCounterCount</a></div><div class="ttdeci">uint16_t GetCounterCount() const override</div><div class="ttdef"><b>Definition:</b> <a href="src_2profiling_2_counter_directory_8hpp_source.xhtml#l00054">CounterDirectory.hpp:54</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_state_machine_xhtml_a175365c95c51fb3dad223ce3f48a3ffc"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_state_machine.xhtml#a175365c95c51fb3dad223ce3f48a3ffc">armnn::profiling::ProfilingStateMachine::TransitionToState</a></div><div class="ttdeci">void TransitionToState(ProfilingState newState)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_state_machine_8cpp_source.xhtml#l00036">ProfilingStateMachine.cpp:36</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_counter_directory_xhtml_ad9fa9b8364fcaa2c940ef8e78eff8df2"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_counter_directory.xhtml#ad9fa9b8364fcaa2c940ef8e78eff8df2">armnn::profiling::ICounterDirectory::GetCounters</a></div><div class="ttdeci">virtual const Counters &amp; GetCounters() const =0</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_test_functor_c_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_test_functor_c.xhtml">armnn::profiling::TestFunctorC</a></div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8hpp_source.xhtml#l00199">ProfilingTests.hpp:199</a></div></div>
<div class="ttc" id="_profiling_test_utils_8hpp_xhtml"><div class="ttname"><a href="_profiling_test_utils_8hpp.xhtml">ProfilingTestUtils.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_mock_profiling_connection_xhtml_a91bdc9d5497d47f5d707418beb83b140"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_mock_profiling_connection.xhtml#a91bdc9d5497d47f5d707418beb83b140">armnn::profiling::MockProfilingConnection::IsOpen</a></div><div class="ttdeci">bool IsOpen() const override</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_mocks_8hpp_source.xhtml#l00059">ProfilingMocks.hpp:59</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_counter_mappings_xhtml_a8c03a58ac20b34e541bad78df16859e8"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_counter_mappings.xhtml#a8c03a58ac20b34e541bad78df16859e8">armnn::profiling::ICounterMappings::GetBackendId</a></div><div class="ttdeci">virtual const std::pair&lt; uint16_t, armnn::BackendId &gt; &amp; GetBackendId(uint16_t globalCounterId) const =0</div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_holder_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_holder.xhtml">armnn::profiling::Holder</a></div><div class="ttdef"><b>Definition:</b> <a href="_holder_8hpp_source.xhtml#l00051">Holder.hpp:51</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_command_handler_xhtml_ad6feb3bc1f64bb41467da55d30e9403f"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_command_handler.xhtml#ad6feb3bc1f64bb41467da55d30e9403f">armnn::profiling::CommandHandler::SetStopAfterTimeout</a></div><div class="ttdeci">void SetStopAfterTimeout(bool stopAfterTimeout)</div><div class="ttdef"><b>Definition:</b> <a href="_command_handler_8hpp_source.xhtml#l00040">CommandHandler.hpp:40</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_id_map_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_id_map.xhtml">armnn::profiling::CounterIdMap</a></div><div class="ttdef"><b>Definition:</b> <a href="_counter_id_map_8hpp_source.xhtml#l00033">CounterIdMap.hpp:33</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_directory_xhtml_ad368fc6d788ff64cc25cafe2b40265c6"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_directory.xhtml#ad368fc6d788ff64cc25cafe2b40265c6">armnn::profiling::CounterDirectory::GetCounterSet</a></div><div class="ttdeci">const CounterSet * GetCounterSet(uint16_t uid) const override</div><div class="ttdef"><b>Definition:</b> <a href="_counter_directory_8cpp_source.xhtml#l00358">CounterDirectory.cpp:358</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_counter_set_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_counter_set.xhtml">armnn::profiling::CounterSet</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_counter_directory_8hpp_source.xhtml#l00077">ICounterDirectory.hpp:77</a></div></div>
<div class="ttc" id="structarmnn_1_1_i_runtime_1_1_creation_options_xhtml_a30412a91cadff138686eaeb12f5357cc"><div class="ttname"><a href="structarmnn_1_1_i_runtime_1_1_creation_options.xhtml#a30412a91cadff138686eaeb12f5357cc">armnn::IRuntime::CreationOptions::m_ProfilingOptions</a></div><div class="ttdeci">ExternalProfilingOptions m_ProfilingOptions</div><div class="ttdef"><b>Definition:</b> <a href="_i_runtime_8hpp_source.xhtml#l00084">IRuntime.hpp:84</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_service_xhtml_adfaa32654e05eab63b2adc34b2138475"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#adfaa32654e05eab63b2adc34b2138475">armnn::profiling::ProfilingService::GetCounterDirectory</a></div><div class="ttdeci">const ICounterDirectory &amp; GetCounterDirectory() const</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_service_8cpp_source.xhtml#l00220">ProfilingService.cpp:220</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_send_timeline_packet_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_send_timeline_packet.xhtml">armnn::profiling::SendTimelinePacket</a></div><div class="ttdef"><b>Definition:</b> <a href="_send_timeline_packet_8hpp_source.xhtml#l00022">SendTimelinePacket.hpp:22</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="_conversion_8hpp_xhtml"><div class="ttname"><a href="_conversion_8hpp.xhtml">Conversion.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_test_profiling_connection_base_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_test_profiling_connection_base.xhtml">armnn::profiling::TestProfilingConnectionBase</a></div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8hpp_source.xhtml#l00070">ProfilingTests.hpp:70</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_service_xhtml_a004992fdba75e298495d6b628234a4bd"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_service.xhtml#a004992fdba75e298495d6b628234a4bd">armnn::profiling::ProfilingService::ConfigureProfilingService</a></div><div class="ttdeci">ProfilingState ConfigureProfilingService(const ExternalProfilingOptions &amp;options, bool resetProfilingService=false)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_service_8cpp_source.xhtml#l00060">ProfilingService.cpp:60</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="classarmnn_1_1profiling_1_1_test_functor_a_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_test_functor_a.xhtml">armnn::profiling::TestFunctorA</a></div><div class="ttdef"><b>Definition:</b> <a href="_profiling_tests_8hpp_source.xhtml#l00177">ProfilingTests.hpp:177</a></div></div>
<div class="ttc" id="structarmnn_1_1profiling_1_1_counter_status_xhtml_a29f0ccf670004d1b4127bbfba5ded78b"><div class="ttname"><a href="structarmnn_1_1profiling_1_1_counter_status.xhtml#a29f0ccf670004d1b4127bbfba5ded78b">armnn::profiling::CounterStatus::m_BackendCounterId</a></div><div class="ttdeci">uint16_t m_BackendCounterId</div><div class="ttdef"><b>Definition:</b> <a href="_i_backend_profiling_8hpp_source.xhtml#l00043">IBackendProfiling.hpp:43</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_send_thread_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_send_thread.xhtml">armnn::profiling::SendThread</a></div><div class="ttdef"><b>Definition:</b> <a href="_send_thread_8hpp_source.xhtml#l00029">SendThread.hpp:29</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 class="ttc" id="classarmnn_1_1profiling_1_1_mock_buffer_manager_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_mock_buffer_manager.xhtml">armnn::profiling::MockBufferManager</a></div><div class="ttdef"><b>Definition:</b> <a href="_profiling_mocks_8hpp_source.xhtml#l00203">ProfilingMocks.hpp:203</a></div></div>
<div class="ttc" id="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options_xhtml_aeec9a6408083ab1b6bf7fa3e566ebe46"><div class="ttname"><a href="structarmnn_1_1_i_runtime_1_1_creation_options_1_1_external_profiling_options.xhtml#aeec9a6408083ab1b6bf7fa3e566ebe46">armnn::IRuntime::CreationOptions::ExternalProfilingOptions::m_FileFormat</a></div><div class="ttdeci">std::string m_FileFormat</div><div class="ttdef"><b>Definition:</b> <a href="_i_runtime_8hpp_source.xhtml#l00081">IRuntime.hpp:81</a></div></div>
<div class="ttc" id="_send_counter_packet_8hpp_xhtml"><div class="ttname"><a href="_send_counter_packet_8hpp.xhtml">SendCounterPacket.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_deactivate_timeline_reporting_command_handler_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_deactivate_timeline_reporting_command_handler.xhtml">armnn::profiling::DeactivateTimelineReportingCommandHandler</a></div><div class="ttdef"><b>Definition:</b> <a href="_deactivate_timeline_reporting_command_handler_8hpp_source.xhtml#l00020">DeactivateTimelineReportingCommandHandler.hpp:20</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_mock_profiling_service_xhtml_a87421bf314b7d9f4e881671120d66e9d"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_mock_profiling_service.xhtml#a87421bf314b7d9f4e881671120d66e9d">armnn::profiling::MockProfilingService::RegisterMapping</a></div><div class="ttdeci">void RegisterMapping(uint16_t globalCounterId, uint16_t backendCounterId, const armnn::BackendId &amp;backendId)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_mocks_8hpp_source.xhtml#l00676">ProfilingMocks.hpp:676</a></div></div>
<div class="ttc" id="_periodic_counter_capture_8hpp_xhtml"><div class="ttname"><a href="_periodic_counter_capture_8hpp.xhtml">PeriodicCounterCapture.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1_backend_id_xhtml"><div class="ttname"><a href="classarmnn_1_1_backend_id.xhtml">armnn::BackendId</a></div><div class="ttdef"><b>Definition:</b> <a href="_backend_id_8hpp_source.xhtml#l00075">BackendId.hpp:75</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_i_counter_mappings_xhtml_a83e6db8d13e21158334ca6722b20fa67"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_i_counter_mappings.xhtml#a83e6db8d13e21158334ca6722b20fa67">armnn::profiling::ICounterMappings::GetGlobalId</a></div><div class="ttdeci">virtual uint16_t GetGlobalId(uint16_t backendCounterId, const armnn::BackendId &amp;backendId) const =0</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="dir_6b1198f6e738611120ec65b09506d2f8.xhtml">test</a></li><li class="navelem"><a class="el" href="_profiling_tests_8cpp.xhtml">ProfilingTests.cpp</a></li>
    <li class="footer">Generated on Thu Feb 25 2021 17:27:54 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>