aboutsummaryrefslogtreecommitdiff
path: root/Documentation/_profiling_connection_dump_to_file_decorator_8cpp_source.xhtml
blob: a2b6245e8e254aeebdb838dcd9f06b6a064adc93 (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
<!-- 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/ProfilingConnectionDumpToFileDecorator.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">20.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_connection_dump_to_file_decorator_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">ProfilingConnectionDumpToFileDecorator.cpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_profiling_connection_dump_to_file_decorator_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. 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_connection_dump_to_file_decorator_8hpp.xhtml">ProfilingConnectionDumpToFileDecorator.hpp</a>&quot;</span></div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_exceptions_8hpp.xhtml">armnn/Exceptions.hpp</a>&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;</div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;<span class="preprocessor">#include &lt;fstream&gt;</span></div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;</div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#include &lt;boost/numeric/conversion/cast.hpp&gt;</span></div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;{</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="keyword">namespace </span>profiling</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;{</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno"><a class="line" href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#ae834e67551e458fc584a6a38d0b80729">   20</a></span>&#160;<a class="code" href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#ae834e67551e458fc584a6a38d0b80729">ProfilingConnectionDumpToFileDecorator::ProfilingConnectionDumpToFileDecorator</a>(</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;    std::unique_ptr&lt;IProfilingConnection&gt; connection,</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;    <span class="keyword">const</span> Runtime::CreationOptions::ExternalProfilingOptions&amp; <a class="code" href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a>,</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;    <span class="keywordtype">bool</span> ignoreFailures)</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;      : m_Connection(<a class="code" href="namespacestd.xhtml">std</a>::move(connection))</div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;      , m_Options(options)</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;      , m_IgnoreFileErrors(ignoreFailures)</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;{</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;    <span class="keywordflow">if</span> (!m_Connection)</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;    {</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;        <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_invalid_argument_exception.xhtml">InvalidArgumentException</a>(<span class="stringliteral">&quot;Connection cannot be nullptr&quot;</span>);</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;    }</div><div class="line"><a name="l00032"></a><span class="lineno">   32</span>&#160;}</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"><a class="line" href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#a4b9c0b3d56aa758da95086fe7cc3babf">   34</a></span>&#160;<a class="code" href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#a4b9c0b3d56aa758da95086fe7cc3babf">ProfilingConnectionDumpToFileDecorator::~ProfilingConnectionDumpToFileDecorator</a>()</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;{</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#a0f9aecd570c4e5e6d41337f0e2f1adf5">Close</a>();</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;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#a91bdc9d5497d47f5d707418beb83b140">   39</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#a91bdc9d5497d47f5d707418beb83b140">ProfilingConnectionDumpToFileDecorator::IsOpen</a>()<span class="keyword"> const</span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="keyword"></span>{</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    <span class="keywordflow">return</span> m_Connection-&gt;IsOpen();</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;</div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#a0f9aecd570c4e5e6d41337f0e2f1adf5">   44</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#a0f9aecd570c4e5e6d41337f0e2f1adf5">ProfilingConnectionDumpToFileDecorator::Close</a>()</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;{</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    m_IncomingDumpFileStream.flush();</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    m_IncomingDumpFileStream.close();</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    m_OutgoingDumpFileStream.flush();</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;    m_OutgoingDumpFileStream.close();</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;    m_Connection-&gt;Close();</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;}</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;</div><div class="line"><a name="l00053"></a><span class="lineno"><a class="line" href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#a42eb542b5a1d73d00c4ce474140bb78c">   53</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#a42eb542b5a1d73d00c4ce474140bb78c">ProfilingConnectionDumpToFileDecorator::WritePacket</a>(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* buffer, uint32_t length)</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;{</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    <span class="keywordtype">bool</span> success = <span class="keyword">true</span>;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <span class="keywordflow">if</span> (!m_Options.m_OutgoingCaptureFile.empty())</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;        success &amp;= DumpOutgoingToFile(buffer, length);</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    }</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;    success &amp;= m_Connection-&gt;WritePacket(buffer, length);</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    <span class="keywordflow">return</span> success;</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;}</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;</div><div class="line"><a name="l00064"></a><span class="lineno"><a class="line" href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#a1adbda8257d3a74a0566e0d8407ff458">   64</a></span>&#160;<a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml">Packet</a> <a class="code" href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#a1adbda8257d3a74a0566e0d8407ff458">ProfilingConnectionDumpToFileDecorator::ReadPacket</a>(uint32_t timeout)</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;{</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;    <a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml">Packet</a> packet = m_Connection-&gt;ReadPacket(timeout);</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;    <span class="keywordflow">if</span> (!m_Options.m_IncomingCaptureFile.empty())</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;        DumpIncomingToFile(packet);</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    }</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;    <span class="keywordflow">return</span> packet;</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;</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;<span class="keywordtype">bool</span> ProfilingConnectionDumpToFileDecorator::OpenIncomingDumpFile()</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;{</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;    m_IncomingDumpFileStream.open(m_Options.m_IncomingCaptureFile, std::ios::out | std::ios::binary);</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    <span class="keywordflow">return</span> m_IncomingDumpFileStream.is_open();</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;}</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;<span class="keywordtype">bool</span> ProfilingConnectionDumpToFileDecorator::OpenOutgoingDumpFile()</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;    m_OutgoingDumpFileStream.open(m_Options.m_OutgoingCaptureFile, std::ios::out | std::ios::binary);</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    <span class="keywordflow">return</span> m_OutgoingDumpFileStream.is_open();</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;}</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;<span class="comment"></span></div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="comment">/// Dumps incoming data into the file specified by m_Settings.m_IncomingDumpFileName.</span></div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;<span class="comment">/// If m_IgnoreFileErrors is set to true in m_Settings, write errors will be ignored,</span></div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;<span class="comment">/// i.e. the method will not throw an exception if it encounters an error while trying</span></div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;<span class="comment">/// to write the data into the specified file.</span></div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;<span class="comment">/// @param packet data packet to write</span></div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;<span class="comment">/// @return nothing</span></div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;<span class="comment"></span><span class="keywordtype">void</span> ProfilingConnectionDumpToFileDecorator::DumpIncomingToFile(<span class="keyword">const</span> <a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml">Packet</a>&amp; packet)</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;{</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;    <span class="keywordtype">bool</span> success = <span class="keyword">true</span>;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    <span class="keywordflow">if</span> (!m_IncomingDumpFileStream.is_open())</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    {</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;        <span class="comment">// attempt to open dump file</span></div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;        success &amp;= OpenIncomingDumpFile();</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;        <span class="keywordflow">if</span> (!(success || m_IgnoreFileErrors))</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;        {</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;            Fail(<span class="stringliteral">&quot;Failed to open \&quot;&quot;</span> + m_Options.m_IncomingCaptureFile + <span class="stringliteral">&quot;\&quot; for writing&quot;</span>);</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;        }</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;    }</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;    <span class="comment">// attempt to write binary data from packet</span></div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> header       = packet.<a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml#a8d2f29efa0f5f3f920a11b17a7926251">GetHeader</a>();</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> packetLength = packet.<a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml#a5a218fe9ea18741167670f1bc016b5cf">GetLength</a>();</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    m_IncomingDumpFileStream.write(reinterpret_cast&lt;const char*&gt;(&amp;header), <span class="keyword">sizeof</span> header);</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    m_IncomingDumpFileStream.write(reinterpret_cast&lt;const char*&gt;(&amp;packetLength), <span class="keyword">sizeof</span> packetLength);</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    m_IncomingDumpFileStream.write(reinterpret_cast&lt;const char*&gt;(packet.<a class="code" href="classarmnn_1_1profiling_1_1_packet.xhtml#ad6bf5cefcc3b6f7223c2cfafd8151d8f">GetData</a>()),</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;                                   boost::numeric_cast&lt;std::streamsize&gt;(packetLength));</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    success &amp;= m_IncomingDumpFileStream.good();</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    <span class="keywordflow">if</span> (!(success || m_IgnoreFileErrors))</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    {</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;        Fail(<span class="stringliteral">&quot;Error writing incoming packet of &quot;</span> + std::to_string(packetLength) + <span class="stringliteral">&quot; bytes&quot;</span>);</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    }</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;}</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;<span class="comment">/// Dumps outgoing data into the file specified by m_Settings.m_OutgoingDumpFileName.</span></div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;<span class="comment">/// If m_IgnoreFileErrors is set to true in m_Settings, write errors will be ignored,</span></div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;<span class="comment">/// i.e. the method will not throw an exception if it encounters an error while trying</span></div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;<span class="comment">/// to write the data into the specified file. However, the return value will still</span></div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;<span class="comment">/// signal if the write has not been completed succesfully.</span></div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;<span class="comment">/// @param buffer pointer to data to write</span></div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;<span class="comment">/// @param length number of bytes to write</span></div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;<span class="comment">/// @return true if write successful, false otherwise</span></div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;<span class="comment"></span><span class="keywordtype">bool</span> ProfilingConnectionDumpToFileDecorator::DumpOutgoingToFile(<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>* buffer, uint32_t length)</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;{</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <span class="keywordtype">bool</span> success = <span class="keyword">true</span>;</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    <span class="keywordflow">if</span> (!m_OutgoingDumpFileStream.is_open())</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    {</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;        <span class="comment">// attempt to open dump file</span></div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;        success &amp;= OpenOutgoingDumpFile();</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;        <span class="keywordflow">if</span> (!(success || m_IgnoreFileErrors))</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;            Fail(<span class="stringliteral">&quot;Failed to open \&quot;&quot;</span> + m_Options.m_OutgoingCaptureFile + <span class="stringliteral">&quot;\&quot; for writing&quot;</span>);</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;        }</div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    }</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;    <span class="comment">// attempt to write binary data</span></div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;    m_OutgoingDumpFileStream.write(reinterpret_cast&lt;const char*&gt;(buffer),</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;                                   boost::numeric_cast&lt;std::streamsize&gt;(length));</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    success &amp;= m_OutgoingDumpFileStream.good();</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;    <span class="keywordflow">if</span> (!(success || m_IgnoreFileErrors))</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;        Fail(<span class="stringliteral">&quot;Error writing outgoing packet of &quot;</span> + std::to_string(length) + <span class="stringliteral">&quot; bytes&quot;</span>);</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;    }</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;    <span class="keywordflow">return</span> success;</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;}</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;<span class="keywordtype">void</span> ProfilingConnectionDumpToFileDecorator::Fail(<span class="keyword">const</span> std::string&amp; errorMessage)</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;    <a class="code" href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#a0f9aecd570c4e5e6d41337f0e2f1adf5">Close</a>();</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_runtime_exception.xhtml">RuntimeException</a>(errorMessage);</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;</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;} <span class="comment">// namespace profiling</span></div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;</div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;} <span class="comment">// namespace armnn</span></div><div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator_xhtml_a42eb542b5a1d73d00c4ce474140bb78c"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#a42eb542b5a1d73d00c4ce474140bb78c">armnn::profiling::ProfilingConnectionDumpToFileDecorator::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_connection_dump_to_file_decorator_8cpp_source.xhtml#l00053">ProfilingConnectionDumpToFileDecorator.cpp:53</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator_xhtml_a0f9aecd570c4e5e6d41337f0e2f1adf5"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#a0f9aecd570c4e5e6d41337f0e2f1adf5">armnn::profiling::ProfilingConnectionDumpToFileDecorator::Close</a></div><div class="ttdeci">void Close() override</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_connection_dump_to_file_decorator_8cpp_source.xhtml#l00044">ProfilingConnectionDumpToFileDecorator.cpp:44</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator_xhtml_a1adbda8257d3a74a0566e0d8407ff458"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#a1adbda8257d3a74a0566e0d8407ff458">armnn::profiling::ProfilingConnectionDumpToFileDecorator::ReadPacket</a></div><div class="ttdeci">Packet ReadPacket(uint32_t timeout) override</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_connection_dump_to_file_decorator_8cpp_source.xhtml#l00064">ProfilingConnectionDumpToFileDecorator.cpp:64</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml"><div class="ttname"><a href="namespacearmnn.xhtml">armnn</a></div><div class="ttdoc">Copyright (c) 2020 ARM Limited. </div><div class="ttdef"><b>Definition:</b> <a href="00__introduction_8dox_source.xhtml#l00025">00_introduction.dox:25</a></div></div>
<div class="ttc" id="namespacestd_xhtml"><div class="ttname"><a href="namespacestd.xhtml">std</a></div><div class="ttdef"><b>Definition:</b> <a href="_backend_id_8hpp_source.xhtml#l00147">BackendId.hpp:147</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator_xhtml_ae834e67551e458fc584a6a38d0b80729"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#ae834e67551e458fc584a6a38d0b80729">armnn::profiling::ProfilingConnectionDumpToFileDecorator::ProfilingConnectionDumpToFileDecorator</a></div><div class="ttdeci">ProfilingConnectionDumpToFileDecorator(std::unique_ptr&lt; IProfilingConnection &gt; connection, const Runtime::CreationOptions::ExternalProfilingOptions &amp;options, bool ignoreFailures=false)</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_connection_dump_to_file_decorator_8cpp_source.xhtml#l00020">ProfilingConnectionDumpToFileDecorator.cpp:20</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_packet_xhtml"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_packet.xhtml">armnn::profiling::Packet</a></div><div class="ttdef"><b>Definition:</b> <a href="_packet_8hpp_source.xhtml#l00018">Packet.hpp:18</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="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator_xhtml_a4b9c0b3d56aa758da95086fe7cc3babf"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#a4b9c0b3d56aa758da95086fe7cc3babf">armnn::profiling::ProfilingConnectionDumpToFileDecorator::~ProfilingConnectionDumpToFileDecorator</a></div><div class="ttdeci">~ProfilingConnectionDumpToFileDecorator()</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_connection_dump_to_file_decorator_8cpp_source.xhtml#l00034">ProfilingConnectionDumpToFileDecorator.cpp:34</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="_profiling_connection_dump_to_file_decorator_8hpp_xhtml"><div class="ttname"><a href="_profiling_connection_dump_to_file_decorator_8hpp.xhtml">ProfilingConnectionDumpToFileDecorator.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_packet_xhtml_a5a218fe9ea18741167670f1bc016b5cf"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_packet.xhtml#a5a218fe9ea18741167670f1bc016b5cf">armnn::profiling::Packet::GetLength</a></div><div class="ttdeci">uint32_t GetLength() const</div><div class="ttdef"><b>Definition:</b> <a href="_packet_8hpp_source.xhtml#l00074">Packet.hpp:74</a></div></div>
<div class="ttc" id="_exceptions_8hpp_xhtml"><div class="ttname"><a href="_exceptions_8hpp.xhtml">Exceptions.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator_xhtml_a91bdc9d5497d47f5d707418beb83b140"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_profiling_connection_dump_to_file_decorator.xhtml#a91bdc9d5497d47f5d707418beb83b140">armnn::profiling::ProfilingConnectionDumpToFileDecorator::IsOpen</a></div><div class="ttdeci">bool IsOpen() const override</div><div class="ttdef"><b>Definition:</b> <a href="_profiling_connection_dump_to_file_decorator_8cpp_source.xhtml#l00039">ProfilingConnectionDumpToFileDecorator.cpp:39</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_packet_xhtml_a8d2f29efa0f5f3f920a11b17a7926251"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_packet.xhtml#a8d2f29efa0f5f3f920a11b17a7926251">armnn::profiling::Packet::GetHeader</a></div><div class="ttdeci">uint32_t GetHeader() const</div><div class="ttdef"><b>Definition:</b> <a href="_packet_8hpp_source.xhtml#l00069">Packet.hpp:69</a></div></div>
<div class="ttc" id="classarmnn_1_1profiling_1_1_packet_xhtml_ad6bf5cefcc3b6f7223c2cfafd8151d8f"><div class="ttname"><a href="classarmnn_1_1profiling_1_1_packet.xhtml#ad6bf5cefcc3b6f7223c2cfafd8151d8f">armnn::profiling::Packet::GetData</a></div><div class="ttdeci">const unsigned char * GetData() const</div><div class="ttdef"><b>Definition:</b> <a href="_packet_8hpp_source.xhtml#l00075">Packet.hpp:75</a></div></div>
<div class="ttc" id="_file_only_profiling_decorator_tests_8cpp_xhtml_a6560146509197f3e197d8d36f76c1347"><div class="ttname"><a href="_file_only_profiling_decorator_tests_8cpp.xhtml#a6560146509197f3e197d8d36f76c1347">options</a></div><div class="ttdeci">armnn::Runtime::CreationOptions::ExternalProfilingOptions options</div><div class="ttdef"><b>Definition:</b> <a href="_file_only_profiling_decorator_tests_8cpp_source.xhtml#l00045">FileOnlyProfilingDecoratorTests.cpp:45</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.xhtml">src</a></li><li class="navelem"><a class="el" href="dir_637c692f14729569dd2eac0c18e2a54a.xhtml">profiling</a></li><li class="navelem"><a class="el" href="_profiling_connection_dump_to_file_decorator_8cpp.xhtml">ProfilingConnectionDumpToFileDecorator.cpp</a></li>
    <li class="footer">Generated on Fri Mar 13 2020 16:09:13 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>