blob: f0b82eae79aa05e1488b570ff2b259a2b8ae024b [file] [log] [blame]
<!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.6"/>
<title>Impala: be/src/util/runtime-profile-test.cc 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="navtree.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
$(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
$(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.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;">
<td style="padding-left: 0.5em;">
<div id="projectname">Impala
</div>
<div id="projectbrief">Impalaistheopensource,nativeanalyticdatabaseforApacheHadoop.</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.6 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="namespaces.html"><span>Namespaces</span></a></li>
<li><a href="annotated.html"><span>Classes</span></a></li>
<li class="current"><a href="files.html"><span>Files</span></a></li>
<li>
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</li>
</ul>
</div>
<div id="navrow2" class="tabs2">
<ul class="tablist">
<li><a href="files.html"><span>File&#160;List</span></a></li>
<li><a href="globals.html"><span>File&#160;Members</span></a></li>
</ul>
</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('runtime-profile-test_8cc_source.html','');});
</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)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Macros</a></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">runtime-profile-test.cc</div> </div>
</div><!--header-->
<div class="contents">
<a href="runtime-profile-test_8cc.html">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">// Copyright 2012 Cloudera Inc.</span></div>
<div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></div>
<div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">// you may not use this file except in compliance with the License.</span></div>
<div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// You may obtain a copy of the License at</span></div>
<div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;<span class="comment">// http://www.apache.org/licenses/LICENSE-2.0</span></div>
<div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">//</span></div>
<div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// Unless required by applicable law or agreed to in writing, software</span></div>
<div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// distributed under the License is distributed on an &quot;AS IS&quot; BASIS,</span></div>
<div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></div>
<div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment">// See the License for the specific language governing permissions and</span></div>
<div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// limitations under the License.</span></div>
<div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;</div>
<div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="preprocessor">#include &lt;stdlib.h&gt;</span></div>
<div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
<div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div>
<div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="preprocessor">#include &lt;gtest/gtest.h&gt;</span></div>
<div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="preprocessor">#include &lt;boost/bind.hpp&gt;</span></div>
<div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="preprocessor">#include &lt;boost/foreach.hpp&gt;</span></div>
<div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="object-pool_8h.html">common/object-pool.h</a>&quot;</span></div>
<div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="cpu-info_8h.html">util/cpu-info.h</a>&quot;</span></div>
<div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="periodic-counter-updater_8h.html">util/periodic-counter-updater.h</a>&quot;</span></div>
<div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="runtime-profile_8h.html">util/runtime-profile.h</a>&quot;</span></div>
<div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="streaming-sampler_8h.html">util/streaming-sampler.h</a>&quot;</span></div>
<div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="thread_8h.html">util/thread.h</a>&quot;</span></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="preprocessor">#include &quot;<a class="code" href="names_8h.html">common/names.h</a>&quot;</span></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="keyword">namespace </span>impala {</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"><a class="line" href="namespaceimpala.html#a71c045df3c067df74512193fb54e613c"> 32</a></span>&#160;<a class="code" href="namespaceimpala.html#a81e39acff5a125a058cc0c2dc4a125c6">TEST</a>(CountersTest, Basic) {</div>
<div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160; <a class="code" href="classimpala_1_1ObjectPool.html">ObjectPool</a> <a class="code" href="expr-benchmark_8cc.html#a3a5de7bd423fbc0afc4cf935c166ca6b">pool</a>;</div>
<div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> profile_a(&amp;pool, <span class="stringliteral">&quot;ProfileA&quot;</span>);</div>
<div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> profile_a1(&amp;pool, <span class="stringliteral">&quot;ProfileA1&quot;</span>);</div>
<div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> profile_a2(&amp;pool, <span class="stringliteral">&quot;ProfileAb&quot;</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; TRuntimeProfileTree thrift_profile;</div>
<div class="line"><a name="l00039"></a><span class="lineno"> 39</span>&#160;</div>
<div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160; profile_a.<a class="code" href="classimpala_1_1RuntimeProfile.html#aaef4a8066afcba576fc69dda6fc95e25">AddChild</a>(&amp;profile_a1);</div>
<div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; profile_a.<a class="code" href="classimpala_1_1RuntimeProfile.html#aaef4a8066afcba576fc69dda6fc95e25">AddChild</a>(&amp;profile_a2);</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="comment">// Test Empty</span></div>
<div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; profile_a.<a class="code" href="classimpala_1_1RuntimeProfile.html#a0636f082b808be5603808d2e665e2d80">ToThrift</a>(&amp;thrift_profile.nodes);</div>
<div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; EXPECT_EQ(thrift_profile.nodes.size(), 3);</div>
<div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; thrift_profile.nodes.clear();</div>
<div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;</div>
<div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* counter_a;</div>
<div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* counter_b;</div>
<div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* counter_merged;</div>
<div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;</div>
<div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; <span class="comment">// Updating/setting counter</span></div>
<div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; counter_a = profile_a.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;A&quot;</span>, TUnit::UNIT);</div>
<div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; EXPECT_TRUE(counter_a != NULL);</div>
<div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; counter_a-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#accee494361b71d610dea9b639e19a285">Add</a>(10);</div>
<div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; counter_a-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#accee494361b71d610dea9b639e19a285">Add</a>(-5);</div>
<div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; EXPECT_EQ(counter_a-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a6db04a7861baf700e025bea45de5a2e1">value</a>(), 5);</div>
<div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; counter_a-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a1cfaae6ff8ad29bcaf5c876ef83dca9d">Set</a>(1L);</div>
<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; EXPECT_EQ(counter_a-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a6db04a7861baf700e025bea45de5a2e1">value</a>(), 1);</div>
<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;</div>
<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; counter_b = profile_a2.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;B&quot;</span>, TUnit::BYTES);</div>
<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; EXPECT_TRUE(counter_b != NULL);</div>
<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;</div>
<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <span class="comment">// Serialize/deserialize</span></div>
<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; profile_a.<a class="code" href="classimpala_1_1RuntimeProfile.html#a0636f082b808be5603808d2e665e2d80">ToThrift</a>(&amp;thrift_profile.nodes);</div>
<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a>* from_thrift = <a class="code" href="classimpala_1_1RuntimeProfile.html#a4eb6c64e8f6e50124ea88a893a4fc0ed">RuntimeProfile::CreateFromThrift</a>(&amp;pool, thrift_profile);</div>
<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; counter_merged = from_thrift-&gt;<a class="code" href="classimpala_1_1RuntimeProfile.html#a4e09f9bdbbf138bdb9c873b0290cd1b5">GetCounter</a>(<span class="stringliteral">&quot;A&quot;</span>);</div>
<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; EXPECT_EQ(counter_merged-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a6db04a7861baf700e025bea45de5a2e1">value</a>(), 1);</div>
<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; EXPECT_TRUE(from_thrift-&gt;<a class="code" href="classimpala_1_1RuntimeProfile.html#a4e09f9bdbbf138bdb9c873b0290cd1b5">GetCounter</a>(<span class="stringliteral">&quot;Not there&quot;</span>) == NULL);</div>
<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;</div>
<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="comment">// Averaged</span></div>
<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> averaged_profile(&amp;pool, <span class="stringliteral">&quot;Merged&quot;</span>, <span class="keyword">true</span>);</div>
<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; averaged_profile.UpdateAverage(from_thrift);</div>
<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; counter_merged = averaged_profile.GetCounter(<span class="stringliteral">&quot;A&quot;</span>);</div>
<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; EXPECT_EQ(counter_merged-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a6db04a7861baf700e025bea45de5a2e1">value</a>(), 1);</div>
<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div>
<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="comment">// UpdateAverage again, there should be no change.</span></div>
<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; averaged_profile.UpdateAverage(from_thrift);</div>
<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; EXPECT_EQ(counter_merged-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a6db04a7861baf700e025bea45de5a2e1">value</a>(), 1);</div>
<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div>
<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; counter_a = profile_a2.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;A&quot;</span>, TUnit::UNIT);</div>
<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; counter_a-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a1cfaae6ff8ad29bcaf5c876ef83dca9d">Set</a>(3L);</div>
<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; averaged_profile.UpdateAverage(&amp;profile_a2);</div>
<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; EXPECT_EQ(counter_merged-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a6db04a7861baf700e025bea45de5a2e1">value</a>(), 2);</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">// Update</span></div>
<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> updated_profile(&amp;pool, <span class="stringliteral">&quot;Updated&quot;</span>);</div>
<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; updated_profile.Update(thrift_profile);</div>
<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* counter_updated = updated_profile.GetCounter(<span class="stringliteral">&quot;A&quot;</span>);</div>
<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; EXPECT_EQ(counter_updated-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a6db04a7861baf700e025bea45de5a2e1">value</a>(), 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; <span class="comment">// Update 2 more times, counters should stay the same</span></div>
<div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; updated_profile.Update(thrift_profile);</div>
<div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; updated_profile.Update(thrift_profile);</div>
<div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; EXPECT_EQ(counter_updated-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a6db04a7861baf700e025bea45de5a2e1">value</a>(), 1);</div>
<div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;}</div>
<div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;</div>
<div class="line"><a name="l00098"></a><span class="lineno"><a class="line" href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63"> 98</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63">ValidateCounter</a>(<a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a>* profile, <span class="keyword">const</span> <span class="keywordtype">string</span>&amp; <a class="code" href="namespaceimpala.html#aaebb9aadfa9e5aec064bc26565df06d3">name</a>, int64_t value) {</div>
<div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* counter = profile-&gt;<a class="code" href="classimpala_1_1RuntimeProfile.html#a4e09f9bdbbf138bdb9c873b0290cd1b5">GetCounter</a>(name);</div>
<div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; EXPECT_TRUE(counter != NULL);</div>
<div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; EXPECT_EQ(counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a6db04a7861baf700e025bea45de5a2e1">value</a>(), value);</div>
<div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;}</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"><a class="line" href="namespaceimpala.html#a5cb1c69c686fe71dc66fcf5d6026dd19"> 104</a></span>&#160;<a class="code" href="namespaceimpala.html#a81e39acff5a125a058cc0c2dc4a125c6">TEST</a>(CountersTest, MergeAndUpdate) {</div>
<div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="comment">// Create two trees. Each tree has two children, one of which has the</span></div>
<div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">// same name in both trees. Merging the two trees should result in 3</span></div>
<div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="comment">// children, with the counters from the shared child aggregated.</span></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"> 109</span>&#160; <a class="code" href="classimpala_1_1ObjectPool.html">ObjectPool</a> <a class="code" href="expr-benchmark_8cc.html#a3a5de7bd423fbc0afc4cf935c166ca6b">pool</a>;</div>
<div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> profile1(&amp;pool, <span class="stringliteral">&quot;Parent1&quot;</span>);</div>
<div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> p1_child1(&amp;pool, <span class="stringliteral">&quot;Child1&quot;</span>);</div>
<div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> p1_child2(&amp;pool, <span class="stringliteral">&quot;Child2&quot;</span>);</div>
<div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; profile1.<a class="code" href="classimpala_1_1RuntimeProfile.html#aaef4a8066afcba576fc69dda6fc95e25">AddChild</a>(&amp;p1_child1);</div>
<div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; profile1.<a class="code" href="classimpala_1_1RuntimeProfile.html#aaef4a8066afcba576fc69dda6fc95e25">AddChild</a>(&amp;p1_child2);</div>
<div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div>
<div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> profile2(&amp;pool, <span class="stringliteral">&quot;Parent2&quot;</span>);</div>
<div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> p2_child1(&amp;pool, <span class="stringliteral">&quot;Child1&quot;</span>);</div>
<div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> p2_child3(&amp;pool, <span class="stringliteral">&quot;Child3&quot;</span>);</div>
<div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; profile2.<a class="code" href="classimpala_1_1RuntimeProfile.html#aaef4a8066afcba576fc69dda6fc95e25">AddChild</a>(&amp;p2_child1);</div>
<div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; profile2.<a class="code" href="classimpala_1_1RuntimeProfile.html#aaef4a8066afcba576fc69dda6fc95e25">AddChild</a>(&amp;p2_child3);</div>
<div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160;</div>
<div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="comment">// Create parent level counters</span></div>
<div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* parent1_shared =</div>
<div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; profile1.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;Parent Shared&quot;</span>, TUnit::UNIT);</div>
<div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* parent2_shared =</div>
<div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; profile2.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;Parent Shared&quot;</span>, TUnit::UNIT);</div>
<div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* parent1_only =</div>
<div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; profile1.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;Parent 1 Only&quot;</span>, TUnit::UNIT);</div>
<div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* parent2_only =</div>
<div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; profile2.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;Parent 2 Only&quot;</span>, TUnit::UNIT);</div>
<div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; parent1_shared-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#accee494361b71d610dea9b639e19a285">Add</a>(1);</div>
<div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; parent2_shared-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#accee494361b71d610dea9b639e19a285">Add</a>(3);</div>
<div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; parent1_only-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#accee494361b71d610dea9b639e19a285">Add</a>(2);</div>
<div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; parent2_only-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#accee494361b71d610dea9b639e19a285">Add</a>(5);</div>
<div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160;</div>
<div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; <span class="comment">// Create child level counters</span></div>
<div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* p1_c1_shared =</div>
<div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; p1_child1.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;Child1 Shared&quot;</span>, TUnit::UNIT);</div>
<div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* p1_c1_only =</div>
<div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; p1_child1.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;Child1 Parent 1 Only&quot;</span>, TUnit::UNIT);</div>
<div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* p1_c2 =</div>
<div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; p1_child2.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;Child2&quot;</span>, TUnit::UNIT);</div>
<div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* p2_c1_shared =</div>
<div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; p2_child1.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;Child1 Shared&quot;</span>, TUnit::UNIT);</div>
<div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* p2_c1_only =</div>
<div class="line"><a name="l00146"></a><span class="lineno"> 146</span>&#160; p1_child1.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;Child1 Parent 2 Only&quot;</span>, TUnit::UNIT);</div>
<div class="line"><a name="l00147"></a><span class="lineno"> 147</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* p2_c3 =</div>
<div class="line"><a name="l00148"></a><span class="lineno"> 148</span>&#160; p2_child3.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;Child3&quot;</span>, TUnit::UNIT);</div>
<div class="line"><a name="l00149"></a><span class="lineno"> 149</span>&#160; p1_c1_shared-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#accee494361b71d610dea9b639e19a285">Add</a>(10);</div>
<div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; p1_c1_only-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#accee494361b71d610dea9b639e19a285">Add</a>(50);</div>
<div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160; p2_c1_shared-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#accee494361b71d610dea9b639e19a285">Add</a>(20);</div>
<div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160; p2_c1_only-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#accee494361b71d610dea9b639e19a285">Add</a>(100);</div>
<div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160; p2_c3-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#accee494361b71d610dea9b639e19a285">Add</a>(30);</div>
<div class="line"><a name="l00154"></a><span class="lineno"> 154</span>&#160; p1_c2-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#accee494361b71d610dea9b639e19a285">Add</a>(40);</div>
<div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160;</div>
<div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; <span class="comment">// Merge the two and validate</span></div>
<div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; TRuntimeProfileTree tprofile1;</div>
<div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; profile1.<a class="code" href="classimpala_1_1RuntimeProfile.html#a0636f082b808be5603808d2e665e2d80">ToThrift</a>(&amp;tprofile1);</div>
<div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> averaged_profile(&amp;pool, <span class="stringliteral">&quot;merged&quot;</span>, <span class="keyword">true</span>);</div>
<div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; averaged_profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a3921275ceedc1503249763ea664e94fc">UpdateAverage</a>(&amp;profile1);</div>
<div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; averaged_profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a3921275ceedc1503249763ea664e94fc">UpdateAverage</a>(&amp;profile2);</div>
<div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; EXPECT_EQ(6, averaged_profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a111e2e9bc601af5838c77b042e8e840f">num_counters</a>());</div>
<div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; <a class="code" href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63">ValidateCounter</a>(&amp;averaged_profile, <span class="stringliteral">&quot;Parent Shared&quot;</span>, 2);</div>
<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; <a class="code" href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63">ValidateCounter</a>(&amp;averaged_profile, <span class="stringliteral">&quot;Parent 1 Only&quot;</span>, 2);</div>
<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; <a class="code" href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63">ValidateCounter</a>(&amp;averaged_profile, <span class="stringliteral">&quot;Parent 2 Only&quot;</span>, 5);</div>
<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160;</div>
<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; vector&lt;RuntimeProfile*&gt; children;</div>
<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; averaged_profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#ad12ee35bc733eb6aa4f3cb26cef28a88">GetChildren</a>(&amp;children);</div>
<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; EXPECT_EQ(children.size(), 3);</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">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 3; ++i) {</div>
<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a>* profile = children[i];</div>
<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; <span class="keywordflow">if</span> (profile-&gt;<a class="code" href="classimpala_1_1RuntimeProfile.html#a1e8bb1f8bf0f97678a9c6b6507316ee2">name</a>().compare(<span class="stringliteral">&quot;Child1&quot;</span>) == 0) {</div>
<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; EXPECT_EQ(6, profile-&gt;<a class="code" href="classimpala_1_1RuntimeProfile.html#a111e2e9bc601af5838c77b042e8e840f">num_counters</a>());</div>
<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; <a class="code" href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63">ValidateCounter</a>(profile, <span class="stringliteral">&quot;Child1 Shared&quot;</span>, 15);</div>
<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; <a class="code" href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63">ValidateCounter</a>(profile, <span class="stringliteral">&quot;Child1 Parent 1 Only&quot;</span>, 50);</div>
<div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; <a class="code" href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63">ValidateCounter</a>(profile, <span class="stringliteral">&quot;Child1 Parent 2 Only&quot;</span>, 100);</div>
<div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (profile-&gt;<a class="code" href="classimpala_1_1RuntimeProfile.html#a1e8bb1f8bf0f97678a9c6b6507316ee2">name</a>().compare(<span class="stringliteral">&quot;Child2&quot;</span>) == 0) {</div>
<div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; EXPECT_EQ(4, profile-&gt;<a class="code" href="classimpala_1_1RuntimeProfile.html#a111e2e9bc601af5838c77b042e8e840f">num_counters</a>());</div>
<div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; <a class="code" href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63">ValidateCounter</a>(profile, <span class="stringliteral">&quot;Child2&quot;</span>, 40);</div>
<div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (profile-&gt;<a class="code" href="classimpala_1_1RuntimeProfile.html#a1e8bb1f8bf0f97678a9c6b6507316ee2">name</a>().compare(<span class="stringliteral">&quot;Child3&quot;</span>) == 0) {</div>
<div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; EXPECT_EQ(4, profile-&gt;<a class="code" href="classimpala_1_1RuntimeProfile.html#a111e2e9bc601af5838c77b042e8e840f">num_counters</a>());</div>
<div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; <a class="code" href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63">ValidateCounter</a>(profile, <span class="stringliteral">&quot;Child3&quot;</span>, 30);</div>
<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; EXPECT_TRUE(<span class="keyword">false</span>);</div>
<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; }</div>
<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; }</div>
<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160;</div>
<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; <span class="comment">// make sure we can print</span></div>
<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; stringstream dummy;</div>
<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; averaged_profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a3199b85de1a8278a4a94dc7259aea68d">PrettyPrint</a>(&amp;dummy);</div>
<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div>
<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>&#160; <span class="comment">// Update profile2 w/ profile1 and validate</span></div>
<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160; profile2.<a class="code" href="classimpala_1_1RuntimeProfile.html#a3181fd666040fa8dbe972fb291c01c6e">Update</a>(tprofile1);</div>
<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; EXPECT_EQ(6, profile2.<a class="code" href="classimpala_1_1RuntimeProfile.html#a111e2e9bc601af5838c77b042e8e840f">num_counters</a>());</div>
<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>&#160; <a class="code" href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63">ValidateCounter</a>(&amp;profile2, <span class="stringliteral">&quot;Parent Shared&quot;</span>, 1);</div>
<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160; <a class="code" href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63">ValidateCounter</a>(&amp;profile2, <span class="stringliteral">&quot;Parent 1 Only&quot;</span>, 2);</div>
<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63">ValidateCounter</a>(&amp;profile2, <span class="stringliteral">&quot;Parent 2 Only&quot;</span>, 5);</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; profile2.<a class="code" href="classimpala_1_1RuntimeProfile.html#ad12ee35bc733eb6aa4f3cb26cef28a88">GetChildren</a>(&amp;children);</div>
<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160; EXPECT_EQ(children.size(), 3);</div>
<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>&#160;</div>
<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 3; ++i) {</div>
<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a>* profile = children[i];</div>
<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>&#160; <span class="keywordflow">if</span> (profile-&gt;<a class="code" href="classimpala_1_1RuntimeProfile.html#a1e8bb1f8bf0f97678a9c6b6507316ee2">name</a>().compare(<span class="stringliteral">&quot;Child1&quot;</span>) == 0) {</div>
<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160; EXPECT_EQ(6, profile-&gt;<a class="code" href="classimpala_1_1RuntimeProfile.html#a111e2e9bc601af5838c77b042e8e840f">num_counters</a>());</div>
<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>&#160; <a class="code" href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63">ValidateCounter</a>(profile, <span class="stringliteral">&quot;Child1 Shared&quot;</span>, 10);</div>
<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160; <a class="code" href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63">ValidateCounter</a>(profile, <span class="stringliteral">&quot;Child1 Parent 1 Only&quot;</span>, 50);</div>
<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>&#160; <a class="code" href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63">ValidateCounter</a>(profile, <span class="stringliteral">&quot;Child1 Parent 2 Only&quot;</span>, 100);</div>
<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (profile-&gt;<a class="code" href="classimpala_1_1RuntimeProfile.html#a1e8bb1f8bf0f97678a9c6b6507316ee2">name</a>().compare(<span class="stringliteral">&quot;Child2&quot;</span>) == 0) {</div>
<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; EXPECT_EQ(4, profile-&gt;<a class="code" href="classimpala_1_1RuntimeProfile.html#a111e2e9bc601af5838c77b042e8e840f">num_counters</a>());</div>
<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; <a class="code" href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63">ValidateCounter</a>(profile, <span class="stringliteral">&quot;Child2&quot;</span>, 40);</div>
<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160; } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (profile-&gt;<a class="code" href="classimpala_1_1RuntimeProfile.html#a1e8bb1f8bf0f97678a9c6b6507316ee2">name</a>().compare(<span class="stringliteral">&quot;Child3&quot;</span>) == 0) {</div>
<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>&#160; EXPECT_EQ(4, profile-&gt;<a class="code" href="classimpala_1_1RuntimeProfile.html#a111e2e9bc601af5838c77b042e8e840f">num_counters</a>());</div>
<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; <a class="code" href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63">ValidateCounter</a>(profile, <span class="stringliteral">&quot;Child3&quot;</span>, 30);</div>
<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; } <span class="keywordflow">else</span> {</div>
<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; EXPECT_TRUE(<span class="keyword">false</span>);</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; }</div>
<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160;</div>
<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="comment">// make sure we can print</span></div>
<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; profile2.<a class="code" href="classimpala_1_1RuntimeProfile.html#a3199b85de1a8278a4a94dc7259aea68d">PrettyPrint</a>(&amp;dummy);</div>
<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;}</div>
<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160;</div>
<div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="namespaceimpala.html#ada60fc387dc35c8dbd249a4abe803c28"> 225</a></span>&#160;<a class="code" href="namespaceimpala.html#a81e39acff5a125a058cc0c2dc4a125c6">TEST</a>(CountersTest, DerivedCounters) {</div>
<div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="classimpala_1_1ObjectPool.html">ObjectPool</a> <a class="code" href="expr-benchmark_8cc.html#a3a5de7bd423fbc0afc4cf935c166ca6b">pool</a>;</div>
<div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> profile(&amp;pool, <span class="stringliteral">&quot;Profile&quot;</span>);</div>
<div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* bytes_counter =</div>
<div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;bytes&quot;</span>, TUnit::BYTES);</div>
<div class="line"><a name="l00230"></a><span class="lineno"> 230</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* ticks_counter =</div>
<div class="line"><a name="l00231"></a><span class="lineno"> 231</span>&#160; profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;ticks&quot;</span>, TUnit::TIME_NS);</div>
<div class="line"><a name="l00232"></a><span class="lineno"> 232</span>&#160; <span class="comment">// set to 1 sec</span></div>
<div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; ticks_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a1cfaae6ff8ad29bcaf5c876ef83dca9d">Set</a>(1000L * 1000L * 1000L);</div>
<div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div>
<div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1DerivedCounter.html">RuntimeProfile::DerivedCounter</a>* throughput_counter =</div>
<div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a4ba4028a644bd8f71cdd624081f86ba7">AddDerivedCounter</a>(<span class="stringliteral">&quot;throughput&quot;</span>, TUnit::BYTES,</div>
<div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160; bind&lt;int64_t&gt;(&amp;<a class="code" href="classimpala_1_1RuntimeProfile.html#ab1e095fac59cde33085156670c1e5130">RuntimeProfile::UnitsPerSecond</a>, bytes_counter, ticks_counter));</div>
<div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160;</div>
<div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; bytes_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a1cfaae6ff8ad29bcaf5c876ef83dca9d">Set</a>(10L);</div>
<div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160; EXPECT_EQ(throughput_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1DerivedCounter.html#a18c5af7c053c1d3275a1c9836e50a2a2">value</a>(), 10);</div>
<div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; bytes_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a1cfaae6ff8ad29bcaf5c876ef83dca9d">Set</a>(20L);</div>
<div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; EXPECT_EQ(throughput_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1DerivedCounter.html#a18c5af7c053c1d3275a1c9836e50a2a2">value</a>(), 20);</div>
<div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; ticks_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a1cfaae6ff8ad29bcaf5c876ef83dca9d">Set</a>(ticks_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a6db04a7861baf700e025bea45de5a2e1">value</a>() / 2);</div>
<div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; EXPECT_EQ(throughput_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1DerivedCounter.html#a18c5af7c053c1d3275a1c9836e50a2a2">value</a>(), 40);</div>
<div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160;}</div>
<div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160;</div>
<div class="line"><a name="l00247"></a><span class="lineno"><a class="line" href="namespaceimpala.html#af4fff2f318c514e0f7b91707ece83c20"> 247</a></span>&#160;<a class="code" href="namespaceimpala.html#a81e39acff5a125a058cc0c2dc4a125c6">TEST</a>(CountersTest, AverageSetCounters) {</div>
<div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <a class="code" href="classimpala_1_1ObjectPool.html">ObjectPool</a> <a class="code" href="expr-benchmark_8cc.html#a3a5de7bd423fbc0afc4cf935c166ca6b">pool</a>;</div>
<div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> profile(&amp;pool, <span class="stringliteral">&quot;Profile&quot;</span>);</div>
<div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* bytes_1_counter =</div>
<div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160; profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;bytes 1&quot;</span>, TUnit::BYTES);</div>
<div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* bytes_2_counter =</div>
<div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;bytes 2&quot;</span>, TUnit::BYTES);</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; bytes_1_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a1cfaae6ff8ad29bcaf5c876ef83dca9d">Set</a>(10L);</div>
<div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1AveragedCounter.html">RuntimeProfile::AveragedCounter</a> bytes_avg(TUnit::BYTES);</div>
<div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; bytes_avg.<a class="code" href="classimpala_1_1RuntimeProfile_1_1AveragedCounter.html#af3a16559888b42ddbef35bd47c79ab1d">UpdateCounter</a>(bytes_1_counter);</div>
<div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <span class="comment">// Avg of 10L</span></div>
<div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; EXPECT_EQ(bytes_avg.<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a6db04a7861baf700e025bea45de5a2e1">value</a>(), 10L);</div>
<div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; bytes_1_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a1cfaae6ff8ad29bcaf5c876ef83dca9d">Set</a>(20L);</div>
<div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; bytes_avg.<a class="code" href="classimpala_1_1RuntimeProfile_1_1AveragedCounter.html#af3a16559888b42ddbef35bd47c79ab1d">UpdateCounter</a>(bytes_1_counter);</div>
<div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160; <span class="comment">// Avg of 20L</span></div>
<div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; EXPECT_EQ(bytes_avg.<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a6db04a7861baf700e025bea45de5a2e1">value</a>(), 20L);</div>
<div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; bytes_2_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a1cfaae6ff8ad29bcaf5c876ef83dca9d">Set</a>(40L);</div>
<div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; bytes_avg.<a class="code" href="classimpala_1_1RuntimeProfile_1_1AveragedCounter.html#af3a16559888b42ddbef35bd47c79ab1d">UpdateCounter</a>(bytes_2_counter);</div>
<div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="comment">// Avg of 20L and 40L</span></div>
<div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; EXPECT_EQ(bytes_avg.<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a6db04a7861baf700e025bea45de5a2e1">value</a>(), 30L);</div>
<div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; bytes_2_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a1cfaae6ff8ad29bcaf5c876ef83dca9d">Set</a>(30L);</div>
<div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; bytes_avg.<a class="code" href="classimpala_1_1RuntimeProfile_1_1AveragedCounter.html#af3a16559888b42ddbef35bd47c79ab1d">UpdateCounter</a>(bytes_2_counter);</div>
<div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <span class="comment">// Avg of 20L and 30L</span></div>
<div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; EXPECT_EQ(bytes_avg.<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a6db04a7861baf700e025bea45de5a2e1">value</a>(), 25L);</div>
<div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div>
<div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* double_1_counter =</div>
<div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;double 1&quot;</span>, TUnit::DOUBLE_VALUE);</div>
<div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* double_2_counter =</div>
<div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;double 2&quot;</span>, TUnit::DOUBLE_VALUE);</div>
<div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; double_1_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a1cfaae6ff8ad29bcaf5c876ef83dca9d">Set</a>(1.0f);</div>
<div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1AveragedCounter.html">RuntimeProfile::AveragedCounter</a> double_avg(TUnit::DOUBLE_VALUE);</div>
<div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; double_avg.<a class="code" href="classimpala_1_1RuntimeProfile_1_1AveragedCounter.html#af3a16559888b42ddbef35bd47c79ab1d">UpdateCounter</a>(double_1_counter);</div>
<div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160; <span class="comment">// Avg of 1.0f</span></div>
<div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; EXPECT_EQ(double_avg.<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#aa50a54e68f3a84028aa1300877b9a318">double_value</a>(), 1.0f);</div>
<div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; double_1_counter-&gt;Set(2.0f);</div>
<div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160; double_avg.<a class="code" href="classimpala_1_1RuntimeProfile_1_1AveragedCounter.html#af3a16559888b42ddbef35bd47c79ab1d">UpdateCounter</a>(double_1_counter);</div>
<div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="comment">// Avg of 2.0f</span></div>
<div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; EXPECT_EQ(double_avg.<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#aa50a54e68f3a84028aa1300877b9a318">double_value</a>(), 2.0f);</div>
<div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160; double_2_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a1cfaae6ff8ad29bcaf5c876ef83dca9d">Set</a>(4.0f);</div>
<div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; double_avg.<a class="code" href="classimpala_1_1RuntimeProfile_1_1AveragedCounter.html#af3a16559888b42ddbef35bd47c79ab1d">UpdateCounter</a>(double_2_counter);</div>
<div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="comment">// Avg of 2.0f and 4.0f</span></div>
<div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160; EXPECT_EQ(double_avg.<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#aa50a54e68f3a84028aa1300877b9a318">double_value</a>(), 3.0f);</div>
<div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; double_2_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a1cfaae6ff8ad29bcaf5c876ef83dca9d">Set</a>(3.0f);</div>
<div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; double_avg.<a class="code" href="classimpala_1_1RuntimeProfile_1_1AveragedCounter.html#af3a16559888b42ddbef35bd47c79ab1d">UpdateCounter</a>(double_2_counter);</div>
<div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160; <span class="comment">// Avg of 2.0f and 3.0f</span></div>
<div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; EXPECT_EQ(double_avg.<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#aa50a54e68f3a84028aa1300877b9a318">double_value</a>(), 2.5f);</div>
<div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160;}</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"><a class="line" href="namespaceimpala.html#a16a6586da632b319155075a7d049e724"> 296</a></span>&#160;<a class="code" href="namespaceimpala.html#a81e39acff5a125a058cc0c2dc4a125c6">TEST</a>(CountersTest, InfoStringTest) {</div>
<div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <a class="code" href="classimpala_1_1ObjectPool.html">ObjectPool</a> <a class="code" href="expr-benchmark_8cc.html#a3a5de7bd423fbc0afc4cf935c166ca6b">pool</a>;</div>
<div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> profile(&amp;pool, <span class="stringliteral">&quot;Profile&quot;</span>);</div>
<div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; EXPECT_TRUE(profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a2a9ef49b3b393d9db693ff50f455fc4f">GetInfoString</a>(<span class="stringliteral">&quot;Key&quot;</span>) == NULL);</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; profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#aff0f9fcb17559d45c0d09c413372dbb4">AddInfoString</a>(<span class="stringliteral">&quot;Key&quot;</span>, <span class="stringliteral">&quot;Value&quot;</span>);</div>
<div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="keyword">const</span> <span class="keywordtype">string</span>* value = profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a2a9ef49b3b393d9db693ff50f455fc4f">GetInfoString</a>(<span class="stringliteral">&quot;Key&quot;</span>);</div>
<div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; EXPECT_TRUE(value != NULL);</div>
<div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160; EXPECT_EQ(*value, <span class="stringliteral">&quot;Value&quot;</span>);</div>
<div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160;</div>
<div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="comment">// Convert it to thrift</span></div>
<div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160; TRuntimeProfileTree tprofile;</div>
<div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a0636f082b808be5603808d2e665e2d80">ToThrift</a>(&amp;tprofile);</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; <span class="comment">// Convert it back</span></div>
<div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a>* from_thrift = <a class="code" href="classimpala_1_1RuntimeProfile.html#a4eb6c64e8f6e50124ea88a893a4fc0ed">RuntimeProfile::CreateFromThrift</a>(</div>
<div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160; &amp;pool, tprofile);</div>
<div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160; value = from_thrift-&gt;<a class="code" href="classimpala_1_1RuntimeProfile.html#a2a9ef49b3b393d9db693ff50f455fc4f">GetInfoString</a>(<span class="stringliteral">&quot;Key&quot;</span>);</div>
<div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160; EXPECT_TRUE(value != NULL);</div>
<div class="line"><a name="l00315"></a><span class="lineno"> 315</span>&#160; EXPECT_EQ(*value, <span class="stringliteral">&quot;Value&quot;</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="comment">// Test update.</span></div>
<div class="line"><a name="l00318"></a><span class="lineno"> 318</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> update_dst_profile(&amp;pool, <span class="stringliteral">&quot;Profile2&quot;</span>);</div>
<div class="line"><a name="l00319"></a><span class="lineno"> 319</span>&#160; update_dst_profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a3181fd666040fa8dbe972fb291c01c6e">Update</a>(tprofile);</div>
<div class="line"><a name="l00320"></a><span class="lineno"> 320</span>&#160; value = update_dst_profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a2a9ef49b3b393d9db693ff50f455fc4f">GetInfoString</a>(<span class="stringliteral">&quot;Key&quot;</span>);</div>
<div class="line"><a name="l00321"></a><span class="lineno"> 321</span>&#160; EXPECT_TRUE(value != NULL);</div>
<div class="line"><a name="l00322"></a><span class="lineno"> 322</span>&#160; EXPECT_EQ(*value, <span class="stringliteral">&quot;Value&quot;</span>);</div>
<div class="line"><a name="l00323"></a><span class="lineno"> 323</span>&#160;</div>
<div class="line"><a name="l00324"></a><span class="lineno"> 324</span>&#160; <span class="comment">// Update the original profile, convert it to thrift and update from the dst</span></div>
<div class="line"><a name="l00325"></a><span class="lineno"> 325</span>&#160; <span class="comment">// profile</span></div>
<div class="line"><a name="l00326"></a><span class="lineno"> 326</span>&#160; profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#aff0f9fcb17559d45c0d09c413372dbb4">AddInfoString</a>(<span class="stringliteral">&quot;Key&quot;</span>, <span class="stringliteral">&quot;NewValue&quot;</span>);</div>
<div class="line"><a name="l00327"></a><span class="lineno"> 327</span>&#160; profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#aff0f9fcb17559d45c0d09c413372dbb4">AddInfoString</a>(<span class="stringliteral">&quot;Foo&quot;</span>, <span class="stringliteral">&quot;Bar&quot;</span>);</div>
<div class="line"><a name="l00328"></a><span class="lineno"> 328</span>&#160; EXPECT_EQ(*profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a2a9ef49b3b393d9db693ff50f455fc4f">GetInfoString</a>(<span class="stringliteral">&quot;Key&quot;</span>), <span class="stringliteral">&quot;NewValue&quot;</span>);</div>
<div class="line"><a name="l00329"></a><span class="lineno"> 329</span>&#160; EXPECT_EQ(*profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a2a9ef49b3b393d9db693ff50f455fc4f">GetInfoString</a>(<span class="stringliteral">&quot;Foo&quot;</span>), <span class="stringliteral">&quot;Bar&quot;</span>);</div>
<div class="line"><a name="l00330"></a><span class="lineno"> 330</span>&#160; profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a0636f082b808be5603808d2e665e2d80">ToThrift</a>(&amp;tprofile);</div>
<div class="line"><a name="l00331"></a><span class="lineno"> 331</span>&#160;</div>
<div class="line"><a name="l00332"></a><span class="lineno"> 332</span>&#160; update_dst_profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a3181fd666040fa8dbe972fb291c01c6e">Update</a>(tprofile);</div>
<div class="line"><a name="l00333"></a><span class="lineno"> 333</span>&#160; EXPECT_EQ(*update_dst_profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a2a9ef49b3b393d9db693ff50f455fc4f">GetInfoString</a>(<span class="stringliteral">&quot;Key&quot;</span>), <span class="stringliteral">&quot;NewValue&quot;</span>);</div>
<div class="line"><a name="l00334"></a><span class="lineno"> 334</span>&#160; EXPECT_EQ(*update_dst_profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a2a9ef49b3b393d9db693ff50f455fc4f">GetInfoString</a>(<span class="stringliteral">&quot;Foo&quot;</span>), <span class="stringliteral">&quot;Bar&quot;</span>);</div>
<div class="line"><a name="l00335"></a><span class="lineno"> 335</span>&#160;}</div>
<div class="line"><a name="l00336"></a><span class="lineno"> 336</span>&#160;</div>
<div class="line"><a name="l00337"></a><span class="lineno"><a class="line" href="namespaceimpala.html#a3f7b6f701df87bcb9416fc9fa5ad48d7"> 337</a></span>&#160;<a class="code" href="namespaceimpala.html#a81e39acff5a125a058cc0c2dc4a125c6">TEST</a>(CountersTest, RateCounters) {</div>
<div class="line"><a name="l00338"></a><span class="lineno"> 338</span>&#160; <a class="code" href="classimpala_1_1ObjectPool.html">ObjectPool</a> <a class="code" href="expr-benchmark_8cc.html#a3a5de7bd423fbc0afc4cf935c166ca6b">pool</a>;</div>
<div class="line"><a name="l00339"></a><span class="lineno"> 339</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> profile(&amp;pool, <span class="stringliteral">&quot;Profile&quot;</span>);</div>
<div class="line"><a name="l00340"></a><span class="lineno"> 340</span>&#160;</div>
<div class="line"><a name="l00341"></a><span class="lineno"> 341</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* bytes_counter =</div>
<div class="line"><a name="l00342"></a><span class="lineno"> 342</span>&#160; profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;bytes&quot;</span>, TUnit::BYTES);</div>
<div class="line"><a name="l00343"></a><span class="lineno"> 343</span>&#160;</div>
<div class="line"><a name="l00344"></a><span class="lineno"> 344</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* rate_counter =</div>
<div class="line"><a name="l00345"></a><span class="lineno"> 345</span>&#160; profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a22927ce16532fa98f7c39633713c0276">AddRateCounter</a>(<span class="stringliteral">&quot;RateCounter&quot;</span>, bytes_counter);</div>
<div class="line"><a name="l00346"></a><span class="lineno"> 346</span>&#160; EXPECT_TRUE(rate_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#aed1992d34ec28e3da442b09a5c511de5">unit</a>() == TUnit::BYTES_PER_SECOND);</div>
<div class="line"><a name="l00347"></a><span class="lineno"> 347</span>&#160;</div>
<div class="line"><a name="l00348"></a><span class="lineno"> 348</span>&#160; EXPECT_EQ(rate_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a6db04a7861baf700e025bea45de5a2e1">value</a>(), 0);</div>
<div class="line"><a name="l00349"></a><span class="lineno"> 349</span>&#160; <span class="comment">// set to 100MB. Use bigger units to avoid truncating to 0 after divides.</span></div>
<div class="line"><a name="l00350"></a><span class="lineno"> 350</span>&#160; bytes_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a1cfaae6ff8ad29bcaf5c876ef83dca9d">Set</a>(100L * 1024L * 1024L);</div>
<div class="line"><a name="l00351"></a><span class="lineno"> 351</span>&#160;</div>
<div class="line"><a name="l00352"></a><span class="lineno"> 352</span>&#160; <span class="comment">// Wait one second.</span></div>
<div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160; sleep(1);</div>
<div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160;</div>
<div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; int64_t rate = rate_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a6db04a7861baf700e025bea45de5a2e1">value</a>();</div>
<div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160;</div>
<div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <span class="comment">// Remove the counter so it no longer gets updates</span></div>
<div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160; <a class="code" href="classimpala_1_1PeriodicCounterUpdater.html#a05da0be47b84b2bc519f91869b03fcef">PeriodicCounterUpdater::StopRateCounter</a>(rate_counter);</div>
<div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160;</div>
<div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; <span class="comment">// The rate counter is not perfectly accurate. Currently updated at 500ms intervals,</span></div>
<div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="comment">// we should have seen somewhere between 1 and 3 updates (33 - 200 MB/s)</span></div>
<div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; EXPECT_GT(rate, 66 * 1024 * 1024);</div>
<div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; EXPECT_LE(rate, 200 * 1024 * 1024);</div>
<div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160;</div>
<div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; <span class="comment">// Wait another second. The counter has been removed. So the value should not be</span></div>
<div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="comment">// changed (much).</span></div>
<div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160; sleep(2);</div>
<div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160;</div>
<div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; rate = rate_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a6db04a7861baf700e025bea45de5a2e1">value</a>();</div>
<div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; EXPECT_GT(rate, 66 * 1024 * 1024);</div>
<div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; EXPECT_LE(rate, 200 * 1024 * 1024);</div>
<div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160;}</div>
<div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160;</div>
<div class="line"><a name="l00374"></a><span class="lineno"><a class="line" href="namespaceimpala.html#a1bc53902e086308bbf00186728c900af"> 374</a></span>&#160;<a class="code" href="namespaceimpala.html#a81e39acff5a125a058cc0c2dc4a125c6">TEST</a>(CountersTest, BucketCounters) {</div>
<div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; <a class="code" href="classimpala_1_1ObjectPool.html">ObjectPool</a> <a class="code" href="expr-benchmark_8cc.html#a3a5de7bd423fbc0afc4cf935c166ca6b">pool</a>;</div>
<div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> profile(&amp;pool, <span class="stringliteral">&quot;Profile&quot;</span>);</div>
<div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160;</div>
<div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>* unit_counter =</div>
<div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160; profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">AddCounter</a>(<span class="stringliteral">&quot;unit&quot;</span>, TUnit::UNIT);</div>
<div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160;</div>
<div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="comment">// Set the unit to 1 before sampling</span></div>
<div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; unit_counter-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html#a1cfaae6ff8ad29bcaf5c876ef83dca9d">Set</a>(1L);</div>
<div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160;</div>
<div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; <span class="comment">// Create the bucket counters and start sampling</span></div>
<div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; vector&lt;RuntimeProfile::Counter*&gt; buckets;</div>
<div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; buckets.push_back(pool.<a class="code" href="classimpala_1_1ObjectPool.html#ab191078c99825682a0a9915ca1e0c05c">Add</a>(<span class="keyword">new</span> <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>(TUnit::DOUBLE_VALUE, 0)));</div>
<div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; buckets.push_back(pool.<a class="code" href="classimpala_1_1ObjectPool.html#ab191078c99825682a0a9915ca1e0c05c">Add</a>(<span class="keyword">new</span> <a class="code" href="classimpala_1_1RuntimeProfile_1_1Counter.html">RuntimeProfile::Counter</a>(TUnit::DOUBLE_VALUE, 0)));</div>
<div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a9540f9287515f7cb666e5dac64be57a9">RegisterBucketingCounters</a>(unit_counter, &amp;buckets);</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"> 390</span>&#160; <span class="comment">// Wait two seconds.</span></div>
<div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; sleep(2);</div>
<div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;</div>
<div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">// Stop sampling</span></div>
<div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <a class="code" href="classimpala_1_1PeriodicCounterUpdater.html#a59298c90aa019fd18a8d48f441d6a4a7">PeriodicCounterUpdater::StopBucketingCounters</a>(&amp;buckets, <span class="keyword">true</span>);</div>
<div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160;</div>
<div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; <span class="comment">// TODO: change the value to double</span></div>
<div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; <span class="comment">// The value of buckets[0] should be zero and buckets[1] should be 1.</span></div>
<div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; <span class="keywordtype">double</span> val0 = buckets[0]-&gt;double_value();</div>
<div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <span class="keywordtype">double</span> val1 = buckets[1]-&gt;double_value();</div>
<div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; EXPECT_EQ(0, val0);</div>
<div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; EXPECT_EQ(100, val1);</div>
<div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160;</div>
<div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="comment">// Wait another second. The counter has been removed. So the value should not be</span></div>
<div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160; <span class="comment">// changed (much).</span></div>
<div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; sleep(2);</div>
<div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; EXPECT_EQ(val0, buckets[0]-&gt;double_value());</div>
<div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; EXPECT_EQ(val1, buckets[1]-&gt;double_value());</div>
<div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160;}</div>
<div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160;</div>
<div class="line"><a name="l00410"></a><span class="lineno"><a class="line" href="namespaceimpala.html#a7fb2c17052c9304d2a0bd2665c2f4939"> 410</a></span>&#160;<a class="code" href="namespaceimpala.html#a81e39acff5a125a058cc0c2dc4a125c6">TEST</a>(CountersTest, EventSequences) {</div>
<div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160; <a class="code" href="classimpala_1_1ObjectPool.html">ObjectPool</a> <a class="code" href="expr-benchmark_8cc.html#a3a5de7bd423fbc0afc4cf935c166ca6b">pool</a>;</div>
<div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a> profile(&amp;pool, <span class="stringliteral">&quot;Profile&quot;</span>);</div>
<div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile_1_1EventSequence.html">RuntimeProfile::EventSequence</a>* seq = profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#ae208636992a7268178bf843a26da942c">AddEventSequence</a>(<span class="stringliteral">&quot;event sequence&quot;</span>);</div>
<div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; seq-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1EventSequence.html#a7bd1a59efa58c0fbf69f41180f6dbfa1">MarkEvent</a>(<span class="stringliteral">&quot;aaaa&quot;</span>);</div>
<div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; seq-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1EventSequence.html#a7bd1a59efa58c0fbf69f41180f6dbfa1">MarkEvent</a>(<span class="stringliteral">&quot;bbbb&quot;</span>);</div>
<div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; seq-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1EventSequence.html#a7bd1a59efa58c0fbf69f41180f6dbfa1">MarkEvent</a>(<span class="stringliteral">&quot;cccc&quot;</span>);</div>
<div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;</div>
<div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; vector&lt;RuntimeProfile::EventSequence::Event&gt; <a class="code" href="namespaceimpala.html#a5368f0a1443b0bd404d98b27107678a4">events</a>;</div>
<div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; seq-&gt;<a class="code" href="classimpala_1_1RuntimeProfile_1_1EventSequence.html#a6e1d864813eca4794dc7064f5579c42c">GetEvents</a>(&amp;events);</div>
<div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; EXPECT_EQ(3, events.size());</div>
<div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160;</div>
<div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <a class="code" href="classuint64__t.html">uint64_t</a> last_timestamp = 0;</div>
<div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordtype">string</span> last_string = <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; BOOST_FOREACH(<span class="keyword">const</span> <a class="code" href="classimpala_1_1RuntimeProfile_1_1EventSequence.html#af57483bf3e55cc8677884278bea18da5">RuntimeProfile::EventSequence::Event</a>&amp; ev, events) {</div>
<div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; EXPECT_TRUE(ev.second &gt;= last_timestamp);</div>
<div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; last_timestamp = ev.second;</div>
<div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; EXPECT_TRUE(ev.first &gt; last_string);</div>
<div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; last_string = ev.first;</div>
<div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; }</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; TRuntimeProfileTree thrift_profile;</div>
<div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; profile.<a class="code" href="classimpala_1_1RuntimeProfile.html#a0636f082b808be5603808d2e665e2d80">ToThrift</a>(&amp;thrift_profile);</div>
<div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; EXPECT_TRUE(thrift_profile.nodes[0].__isset.event_sequences);</div>
<div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; EXPECT_EQ(1, thrift_profile.nodes[0].event_sequences.size());</div>
<div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160;</div>
<div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html">RuntimeProfile</a>* reconstructed_profile =</div>
<div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; <a class="code" href="classimpala_1_1RuntimeProfile.html#a4eb6c64e8f6e50124ea88a893a4fc0ed">RuntimeProfile::CreateFromThrift</a>(&amp;pool, thrift_profile);</div>
<div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160;</div>
<div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; last_timestamp = 0;</div>
<div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; last_string = <span class="stringliteral">&quot;&quot;</span>;</div>
<div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; EXPECT_EQ(NULL, reconstructed_profile-&gt;GetEventSequence(<span class="stringliteral">&quot;doesn&#39;t exist&quot;</span>));</div>
<div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; seq = reconstructed_profile-&gt;GetEventSequence(<span class="stringliteral">&quot;event sequence&quot;</span>);</div>
<div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; EXPECT_TRUE(seq != NULL);</div>
<div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; seq-&gt;GetEvents(&amp;events);</div>
<div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; EXPECT_EQ(3, events.size());</div>
<div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; BOOST_FOREACH(<span class="keyword">const</span> <a class="code" href="classimpala_1_1RuntimeProfile_1_1EventSequence.html#af57483bf3e55cc8677884278bea18da5">RuntimeProfile::EventSequence::Event</a>&amp; ev, events) {</div>
<div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; EXPECT_TRUE(ev.second &gt;= last_timestamp);</div>
<div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; last_timestamp = ev.second;</div>
<div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; EXPECT_TRUE(ev.first &gt; last_string);</div>
<div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; last_string = ev.first;</div>
<div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160; }</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;</div>
<div class="line"><a name="l00454"></a><span class="lineno"><a class="line" href="namespaceimpala.html#a41577a17a403af031521c87d561e3594"> 454</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="namespaceimpala.html#a41577a17a403af031521c87d561e3594">ValidateSampler</a>(<span class="keyword">const</span> <a class="code" href="classimpala_1_1StreamingSampler.html">StreamingSampler&lt;int, 10&gt;</a>&amp; sampler, <span class="keywordtype">int</span> expected_num,</div>
<div class="line"><a name="l00455"></a><span class="lineno"> 455</span>&#160; <span class="keywordtype">int</span> expected_period, <span class="keywordtype">int</span> expected_delta) {</div>
<div class="line"><a name="l00456"></a><span class="lineno"> 456</span>&#160; <span class="keyword">const</span> <span class="keywordtype">int</span>* samples = NULL;</div>
<div class="line"><a name="l00457"></a><span class="lineno"> 457</span>&#160; <span class="keywordtype">int</span> num_samples;</div>
<div class="line"><a name="l00458"></a><span class="lineno"> 458</span>&#160; <span class="keywordtype">int</span> period;</div>
<div class="line"><a name="l00459"></a><span class="lineno"> 459</span>&#160;</div>
<div class="line"><a name="l00460"></a><span class="lineno"> 460</span>&#160; samples = sampler.<a class="code" href="classimpala_1_1StreamingSampler.html#a13ef3347e6f4772e50e52aa7bcbfd98a">GetSamples</a>(&amp;num_samples, &amp;period);</div>
<div class="line"><a name="l00461"></a><span class="lineno"> 461</span>&#160; EXPECT_TRUE(samples != NULL);</div>
<div class="line"><a name="l00462"></a><span class="lineno"> 462</span>&#160; EXPECT_EQ(num_samples, expected_num);</div>
<div class="line"><a name="l00463"></a><span class="lineno"> 463</span>&#160; EXPECT_EQ(period, expected_period);</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; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; expected_num - 1; ++i) {</div>
<div class="line"><a name="l00466"></a><span class="lineno"> 466</span>&#160; EXPECT_EQ(samples[i] + expected_delta, samples[i + 1]) &lt;&lt; i;</div>
<div class="line"><a name="l00467"></a><span class="lineno"> 467</span>&#160; }</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;</div>
<div class="line"><a name="l00470"></a><span class="lineno"><a class="line" href="namespaceimpala.html#a82b2f6a363f581abc0a998d2461a6d97"> 470</a></span>&#160;<a class="code" href="namespaceimpala.html#a81e39acff5a125a058cc0c2dc4a125c6">TEST</a>(CountersTest, <a class="code" href="classimpala_1_1StreamingSampler.html">StreamingSampler</a>) {</div>
<div class="line"><a name="l00471"></a><span class="lineno"> 471</span>&#160; <a class="code" href="classimpala_1_1StreamingSampler.html">StreamingSampler&lt;int, 10&gt;</a> sampler;</div>
<div class="line"><a name="l00472"></a><span class="lineno"> 472</span>&#160;</div>
<div class="line"><a name="l00473"></a><span class="lineno"> 473</span>&#160; <span class="keywordtype">int</span> <a class="code" href="namespacegen__ir__descriptions.html#a0d6572990c8dd576a55a21ff11d6deb7">idx</a> = 0;</div>
<div class="line"><a name="l00474"></a><span class="lineno"> 474</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 3; ++i) {</div>
<div class="line"><a name="l00475"></a><span class="lineno"> 475</span>&#160; sampler.<a class="code" href="classimpala_1_1StreamingSampler.html#a853a60d2c09941f91994f3f055a07975">AddSample</a>(idx++, 500);</div>
<div class="line"><a name="l00476"></a><span class="lineno"> 476</span>&#160; }</div>
<div class="line"><a name="l00477"></a><span class="lineno"> 477</span>&#160; <a class="code" href="namespaceimpala.html#a41577a17a403af031521c87d561e3594">ValidateSampler</a>(sampler, 3, 500, 1);</div>
<div class="line"><a name="l00478"></a><span class="lineno"> 478</span>&#160;</div>
<div class="line"><a name="l00479"></a><span class="lineno"> 479</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 3; ++i) {</div>
<div class="line"><a name="l00480"></a><span class="lineno"> 480</span>&#160; sampler.<a class="code" href="classimpala_1_1StreamingSampler.html#a853a60d2c09941f91994f3f055a07975">AddSample</a>(idx++, 500);</div>
<div class="line"><a name="l00481"></a><span class="lineno"> 481</span>&#160; }</div>
<div class="line"><a name="l00482"></a><span class="lineno"> 482</span>&#160; <a class="code" href="namespaceimpala.html#a41577a17a403af031521c87d561e3594">ValidateSampler</a>(sampler, 6, 500, 1);</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; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 3; ++i) {</div>
<div class="line"><a name="l00485"></a><span class="lineno"> 485</span>&#160; sampler.<a class="code" href="classimpala_1_1StreamingSampler.html#a853a60d2c09941f91994f3f055a07975">AddSample</a>(idx++, 500);</div>
<div class="line"><a name="l00486"></a><span class="lineno"> 486</span>&#160; }</div>
<div class="line"><a name="l00487"></a><span class="lineno"> 487</span>&#160; <a class="code" href="namespaceimpala.html#a41577a17a403af031521c87d561e3594">ValidateSampler</a>(sampler, 9, 500, 1);</div>
<div class="line"><a name="l00488"></a><span class="lineno"> 488</span>&#160;</div>
<div class="line"><a name="l00489"></a><span class="lineno"> 489</span>&#160; <span class="comment">// Added enough to cause a collapse</span></div>
<div class="line"><a name="l00490"></a><span class="lineno"> 490</span>&#160; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 3; ++i) {</div>
<div class="line"><a name="l00491"></a><span class="lineno"> 491</span>&#160; sampler.<a class="code" href="classimpala_1_1StreamingSampler.html#a853a60d2c09941f91994f3f055a07975">AddSample</a>(idx++, 500);</div>
<div class="line"><a name="l00492"></a><span class="lineno"> 492</span>&#160; }</div>
<div class="line"><a name="l00493"></a><span class="lineno"> 493</span>&#160; <span class="comment">// Added enough to cause a collapse</span></div>
<div class="line"><a name="l00494"></a><span class="lineno"> 494</span>&#160; <a class="code" href="namespaceimpala.html#a41577a17a403af031521c87d561e3594">ValidateSampler</a>(sampler, 6, 1000, 2);</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; <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 3; ++i) {</div>
<div class="line"><a name="l00497"></a><span class="lineno"> 497</span>&#160; sampler.<a class="code" href="classimpala_1_1StreamingSampler.html#a853a60d2c09941f91994f3f055a07975">AddSample</a>(idx++, 500);</div>
<div class="line"><a name="l00498"></a><span class="lineno"> 498</span>&#160; }</div>
<div class="line"><a name="l00499"></a><span class="lineno"> 499</span>&#160; <a class="code" href="namespaceimpala.html#a41577a17a403af031521c87d561e3594">ValidateSampler</a>(sampler, 7, 1000, 2);</div>
<div class="line"><a name="l00500"></a><span class="lineno"> 500</span>&#160;}</div>
<div class="line"><a name="l00501"></a><span class="lineno"> 501</span>&#160;</div>
<div class="line"><a name="l00502"></a><span class="lineno"> 502</span>&#160;}</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"><a class="line" href="runtime-profile-test_8cc.html#a3c04138a5bfe5d72780bb7e82a18e627"> 504</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="runtime-profile-test_8cc.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> **argv) {</div>
<div class="line"><a name="l00505"></a><span class="lineno"> 505</span>&#160; ::testing::InitGoogleTest(&amp;argc, argv);</div>
<div class="line"><a name="l00506"></a><span class="lineno"> 506</span>&#160; <a class="code" href="namespaceimpala.html#aa144bedc9c26ef7b27d86e0c1d8c8048">impala::InitThreading</a>();</div>
<div class="line"><a name="l00507"></a><span class="lineno"> 507</span>&#160; <a class="code" href="classimpala_1_1CpuInfo.html#ab63b1a50201fc23934e209f407945674">impala::CpuInfo::Init</a>();</div>
<div class="line"><a name="l00508"></a><span class="lineno"> 508</span>&#160; <span class="keywordflow">return</span> RUN_ALL_TESTS();</div>
<div class="line"><a name="l00509"></a><span class="lineno"> 509</span>&#160;}</div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html_ae468cfda7051cf8802a7f6b115908f60"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html#ae468cfda7051cf8802a7f6b115908f60">impala::RuntimeProfile::AddCounter</a></div><div class="ttdeci">Counter * AddCounter(const std::string &amp;name, TUnit::type unit, const std::string &amp;parent_counter_name=&quot;&quot;)</div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_1_1Counter_html_a6db04a7861baf700e025bea45de5a2e1"><div class="ttname"><a href="classimpala_1_1RuntimeProfile_1_1Counter.html#a6db04a7861baf700e025bea45de5a2e1">impala::RuntimeProfile::Counter::value</a></div><div class="ttdeci">virtual int64_t value() const </div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00108">runtime-profile.h:108</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_1_1EventSequence_html_a6e1d864813eca4794dc7064f5579c42c"><div class="ttname"><a href="classimpala_1_1RuntimeProfile_1_1EventSequence.html#a6e1d864813eca4794dc7064f5579c42c">impala::RuntimeProfile::EventSequence::GetEvents</a></div><div class="ttdeci">void GetEvents(std::vector&lt; Event &gt; *events)</div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00301">runtime-profile.h:301</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html_a4ba4028a644bd8f71cdd624081f86ba7"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html#a4ba4028a644bd8f71cdd624081f86ba7">impala::RuntimeProfile::AddDerivedCounter</a></div><div class="ttdeci">DerivedCounter * AddDerivedCounter(const std::string &amp;name, TUnit::type unit, const DerivedCounterFunction &amp;counter_fn, const std::string &amp;parent_counter_name=&quot;&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8cc_source.html#l00447">runtime-profile.cc:447</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html_ae208636992a7268178bf843a26da942c"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html#ae208636992a7268178bf843a26da942c">impala::RuntimeProfile::AddEventSequence</a></div><div class="ttdeci">EventSequence * AddEventSequence(const std::string &amp;key)</div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_1_1Counter_html_aa50a54e68f3a84028aa1300877b9a318"><div class="ttname"><a href="classimpala_1_1RuntimeProfile_1_1Counter.html#aa50a54e68f3a84028aa1300877b9a318">impala::RuntimeProfile::Counter::double_value</a></div><div class="ttdeci">virtual double double_value() const </div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00110">runtime-profile.h:110</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html_aff0f9fcb17559d45c0d09c413372dbb4"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html#aff0f9fcb17559d45c0d09c413372dbb4">impala::RuntimeProfile::AddInfoString</a></div><div class="ttdeci">void AddInfoString(const std::string &amp;key, const std::string &amp;value)</div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8cc_source.html#l00406">runtime-profile.cc:406</a></div></div>
<div class="ttc" id="runtime-profile_8h_html"><div class="ttname"><a href="runtime-profile_8h.html">runtime-profile.h</a></div></div>
<div class="ttc" id="namespaceimpala_html_a5368f0a1443b0bd404d98b27107678a4"><div class="ttname"><a href="namespaceimpala.html#a5368f0a1443b0bd404d98b27107678a4">impala::events</a></div><div class="ttdeci">client RuntimeProfile::EventSequence * events</div><div class="ttdef"><b>Definition:</b> <a href="coordinator_8h_source.html#l00064">coordinator.h:64</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_1_1Counter_html_aed1992d34ec28e3da442b09a5c511de5"><div class="ttname"><a href="classimpala_1_1RuntimeProfile_1_1Counter.html#aed1992d34ec28e3da442b09a5c511de5">impala::RuntimeProfile::Counter::unit</a></div><div class="ttdeci">TUnit::type unit() const </div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00114">runtime-profile.h:114</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html_a4eb6c64e8f6e50124ea88a893a4fc0ed"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html#a4eb6c64e8f6e50124ea88a893a4fc0ed">impala::RuntimeProfile::CreateFromThrift</a></div><div class="ttdeci">static RuntimeProfile * CreateFromThrift(ObjectPool *pool, const TRuntimeProfileTree &amp;profiles)</div><div class="ttdoc">Deserialize from thrift. Runtime profiles are allocated from the pool. </div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8cc_source.html#l00106">runtime-profile.cc:106</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_1_1EventSequence_html_af57483bf3e55cc8677884278bea18da5"><div class="ttname"><a href="classimpala_1_1RuntimeProfile_1_1EventSequence.html#af57483bf3e55cc8677884278bea18da5">impala::RuntimeProfile::EventSequence::Event</a></div><div class="ttdeci">std::pair&lt; std::string, int64_t &gt; Event</div><div class="ttdoc">An Event is a &lt;label, timestamp&gt; pair. </div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00294">runtime-profile.h:294</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html_a9540f9287515f7cb666e5dac64be57a9"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html#a9540f9287515f7cb666e5dac64be57a9">impala::RuntimeProfile::RegisterBucketingCounters</a></div><div class="ttdeci">void RegisterBucketingCounters(Counter *src_counter, std::vector&lt; Counter * &gt; *buckets)</div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8cc_source.html#l00798">runtime-profile.cc:798</a></div></div>
<div class="ttc" id="periodic-counter-updater_8h_html"><div class="ttname"><a href="periodic-counter-updater_8h.html">periodic-counter-updater.h</a></div></div>
<div class="ttc" id="namespaceimpala_html_a81e39acff5a125a058cc0c2dc4a125c6"><div class="ttname"><a href="namespaceimpala.html#a81e39acff5a125a058cc0c2dc4a125c6">impala::TEST</a></div><div class="ttdeci">TEST(AtomicTest, Basic)</div><div class="ttdef"><b>Definition:</b> <a href="atomic-test_8cc_source.html#l00028">atomic-test.cc:28</a></div></div>
<div class="ttc" id="classimpala_1_1StreamingSampler_html"><div class="ttname"><a href="classimpala_1_1StreamingSampler.html">impala::StreamingSampler</a></div><div class="ttdef"><b>Definition:</b> <a href="streaming-sampler_8h_source.html#l00032">streaming-sampler.h:32</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_1_1AveragedCounter_html"><div class="ttname"><a href="classimpala_1_1RuntimeProfile_1_1AveragedCounter.html">impala::RuntimeProfile::AveragedCounter</a></div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00183">runtime-profile.h:183</a></div></div>
<div class="ttc" id="classimpala_1_1ObjectPool_html"><div class="ttname"><a href="classimpala_1_1ObjectPool.html">impala::ObjectPool</a></div><div class="ttdef"><b>Definition:</b> <a href="object-pool_8h_source.html#l00030">object-pool.h:30</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html_a22927ce16532fa98f7c39633713c0276"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html#a22927ce16532fa98f7c39633713c0276">impala::RuntimeProfile::AddRateCounter</a></div><div class="ttdeci">Counter * AddRateCounter(const std::string &amp;name, Counter *src_counter)</div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html_ab1e095fac59cde33085156670c1e5130"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html#ab1e095fac59cde33085156670c1e5130">impala::RuntimeProfile::UnitsPerSecond</a></div><div class="ttdeci">static int64_t UnitsPerSecond(const Counter *total_counter, const Counter *timer)</div><div class="ttdoc">Derived counter function: return measured throughput as input_value/second. </div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8cc_source.html#l00733">runtime-profile.cc:733</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_1_1DerivedCounter_html"><div class="ttname"><a href="classimpala_1_1RuntimeProfile_1_1DerivedCounter.html">impala::RuntimeProfile::DerivedCounter</a></div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00165">runtime-profile.h:165</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html_a111e2e9bc601af5838c77b042e8e840f"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html#a111e2e9bc601af5838c77b042e8e840f">impala::RuntimeProfile::num_counters</a></div><div class="ttdeci">int num_counters() const </div><div class="ttdoc">Returns the number of counters in this profile. </div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00484">runtime-profile.h:484</a></div></div>
<div class="ttc" id="namespaceimpala_html_acd9a1503a6af04cfb85751f375c06d63"><div class="ttname"><a href="namespaceimpala.html#acd9a1503a6af04cfb85751f375c06d63">impala::ValidateCounter</a></div><div class="ttdeci">void ValidateCounter(RuntimeProfile *profile, const string &amp;name, int64_t value)</div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile-test_8cc_source.html#l00098">runtime-profile-test.cc:98</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_1_1AveragedCounter_html_af3a16559888b42ddbef35bd47c79ab1d"><div class="ttname"><a href="classimpala_1_1RuntimeProfile_1_1AveragedCounter.html#af3a16559888b42ddbef35bd47c79ab1d">impala::RuntimeProfile::AveragedCounter::UpdateCounter</a></div><div class="ttdeci">void UpdateCounter(Counter *new_counter)</div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00195">runtime-profile.h:195</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_1_1Counter_html_a1cfaae6ff8ad29bcaf5c876ef83dca9d"><div class="ttname"><a href="classimpala_1_1RuntimeProfile_1_1Counter.html#a1cfaae6ff8ad29bcaf5c876ef83dca9d">impala::RuntimeProfile::Counter::Set</a></div><div class="ttdeci">virtual void Set(int64_t value)</div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00102">runtime-profile.h:102</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_1_1Counter_html"><div class="ttname"><a href="classimpala_1_1RuntimeProfile_1_1Counter.html">impala::RuntimeProfile::Counter</a></div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00085">runtime-profile.h:85</a></div></div>
<div class="ttc" id="thread_8h_html"><div class="ttname"><a href="thread_8h.html">thread.h</a></div></div>
<div class="ttc" id="object-pool_8h_html"><div class="ttname"><a href="object-pool_8h.html">object-pool.h</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html_a3921275ceedc1503249763ea664e94fc"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html#a3921275ceedc1503249763ea664e94fc">impala::RuntimeProfile::UpdateAverage</a></div><div class="ttdeci">void UpdateAverage(RuntimeProfile *src)</div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8cc_source.html#l00151">runtime-profile.cc:151</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_1_1EventSequence_html_a7bd1a59efa58c0fbf69f41180f6dbfa1"><div class="ttname"><a href="classimpala_1_1RuntimeProfile_1_1EventSequence.html#a7bd1a59efa58c0fbf69f41180f6dbfa1">impala::RuntimeProfile::EventSequence::MarkEvent</a></div><div class="ttdeci">void MarkEvent(const std::string &amp;label)</div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00286">runtime-profile.h:286</a></div></div>
<div class="ttc" id="classimpala_1_1PeriodicCounterUpdater_html_a59298c90aa019fd18a8d48f441d6a4a7"><div class="ttname"><a href="classimpala_1_1PeriodicCounterUpdater.html#a59298c90aa019fd18a8d48f441d6a4a7">impala::PeriodicCounterUpdater::StopBucketingCounters</a></div><div class="ttdeci">static void StopBucketingCounters(std::vector&lt; RuntimeProfile::Counter * &gt; *buckets, bool convert)</div><div class="ttdef"><b>Definition:</b> <a href="periodic-counter-updater_8cc_source.html#l00094">periodic-counter-updater.cc:94</a></div></div>
<div class="ttc" id="runtime-profile-test_8cc_html_a3c04138a5bfe5d72780bb7e82a18e627"><div class="ttname"><a href="runtime-profile-test_8cc.html#a3c04138a5bfe5d72780bb7e82a18e627">main</a></div><div class="ttdeci">int main(int argc, char **argv)</div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile-test_8cc_source.html#l00504">runtime-profile-test.cc:504</a></div></div>
<div class="ttc" id="namespaceimpala_html_aa144bedc9c26ef7b27d86e0c1d8c8048"><div class="ttname"><a href="namespaceimpala.html#aa144bedc9c26ef7b27d86e0c1d8c8048">impala::InitThreading</a></div><div class="ttdeci">void InitThreading()</div><div class="ttdoc">Initialises the threading subsystem. Must be called before a Thread is created. </div><div class="ttdef"><b>Definition:</b> <a href="thread_8cc_source.html#l00261">thread.cc:261</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_1_1DerivedCounter_html_a18c5af7c053c1d3275a1c9836e50a2a2"><div class="ttname"><a href="classimpala_1_1RuntimeProfile_1_1DerivedCounter.html#a18c5af7c053c1d3275a1c9836e50a2a2">impala::RuntimeProfile::DerivedCounter::value</a></div><div class="ttdeci">virtual int64_t value() const </div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00171">runtime-profile.h:171</a></div></div>
<div class="ttc" id="expr-benchmark_8cc_html_a3a5de7bd423fbc0afc4cf935c166ca6b"><div class="ttname"><a href="expr-benchmark_8cc.html#a3a5de7bd423fbc0afc4cf935c166ca6b">pool</a></div><div class="ttdeci">ObjectPool pool</div><div class="ttdef"><b>Definition:</b> <a href="expr-benchmark_8cc_source.html#l00089">expr-benchmark.cc:89</a></div></div>
<div class="ttc" id="classimpala_1_1PeriodicCounterUpdater_html_a05da0be47b84b2bc519f91869b03fcef"><div class="ttname"><a href="classimpala_1_1PeriodicCounterUpdater.html#a05da0be47b84b2bc519f91869b03fcef">impala::PeriodicCounterUpdater::StopRateCounter</a></div><div class="ttdeci">static void StopRateCounter(RuntimeProfile::Counter *counter)</div><div class="ttdoc">Stops updating the value of &#39;counter&#39;. </div><div class="ttdef"><b>Definition:</b> <a href="periodic-counter-updater_8cc_source.html#l00075">periodic-counter-updater.cc:75</a></div></div>
<div class="ttc" id="classuint64__t_html"><div class="ttname"><a href="classuint64__t.html">uint64_t</a></div></div>
<div class="ttc" id="classimpala_1_1StreamingSampler_html_a13ef3347e6f4772e50e52aa7bcbfd98a"><div class="ttname"><a href="classimpala_1_1StreamingSampler.html#a13ef3347e6f4772e50e52aa7bcbfd98a">impala::StreamingSampler::GetSamples</a></div><div class="ttdeci">const T * GetSamples(int *num_samples, int *period, SpinLock **lock=NULL) const </div><div class="ttdef"><b>Definition:</b> <a href="streaming-sampler_8h_source.html#l00088">streaming-sampler.h:88</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_1_1EventSequence_html"><div class="ttname"><a href="classimpala_1_1RuntimeProfile_1_1EventSequence.html">impala::RuntimeProfile::EventSequence</a></div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00267">runtime-profile.h:267</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html_a3181fd666040fa8dbe972fb291c01c6e"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html#a3181fd666040fa8dbe972fb291c01c6e">impala::RuntimeProfile::Update</a></div><div class="ttdeci">void Update(const TRuntimeProfileTree &amp;thrift_profile)</div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8cc_source.html#l00219">runtime-profile.cc:219</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html">impala::RuntimeProfile</a></div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00083">runtime-profile.h:83</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html_a4e09f9bdbbf138bdb9c873b0290cd1b5"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html#a4e09f9bdbbf138bdb9c873b0290cd1b5">impala::RuntimeProfile::GetCounter</a></div><div class="ttdeci">Counter * GetCounter(const std::string &amp;name)</div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8cc_source.html#l00476">runtime-profile.cc:476</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html_a3199b85de1a8278a4a94dc7259aea68d"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html#a3199b85de1a8278a4a94dc7259aea68d">impala::RuntimeProfile::PrettyPrint</a></div><div class="ttdeci">void PrettyPrint(std::ostream *s, const std::string &amp;prefix=&quot;&quot;) const </div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8cc_source.html#l00507">runtime-profile.cc:507</a></div></div>
<div class="ttc" id="names_8h_html"><div class="ttname"><a href="names_8h.html">names.h</a></div></div>
<div class="ttc" id="classimpala_1_1CpuInfo_html_ab63b1a50201fc23934e209f407945674"><div class="ttname"><a href="classimpala_1_1CpuInfo.html#ab63b1a50201fc23934e209f407945674">impala::CpuInfo::Init</a></div><div class="ttdeci">static void Init()</div><div class="ttdoc">Initialize CpuInfo. </div><div class="ttdef"><b>Definition:</b> <a href="cpu-info_8cc_source.html#l00075">cpu-info.cc:75</a></div></div>
<div class="ttc" id="classimpala_1_1ObjectPool_html_ab191078c99825682a0a9915ca1e0c05c"><div class="ttname"><a href="classimpala_1_1ObjectPool.html#ab191078c99825682a0a9915ca1e0c05c">impala::ObjectPool::Add</a></div><div class="ttdeci">T * Add(T *t)</div><div class="ttdef"><b>Definition:</b> <a href="object-pool_8h_source.html#l00042">object-pool.h:42</a></div></div>
<div class="ttc" id="classimpala_1_1StreamingSampler_html_a853a60d2c09941f91994f3f055a07975"><div class="ttname"><a href="classimpala_1_1StreamingSampler.html#a853a60d2c09941f91994f3f055a07975">impala::StreamingSampler::AddSample</a></div><div class="ttdeci">void AddSample(T sample, int ms)</div><div class="ttdef"><b>Definition:</b> <a href="streaming-sampler_8h_source.html#l00061">streaming-sampler.h:61</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_1_1Counter_html_accee494361b71d610dea9b639e19a285"><div class="ttname"><a href="classimpala_1_1RuntimeProfile_1_1Counter.html#accee494361b71d610dea9b639e19a285">impala::RuntimeProfile::Counter::Add</a></div><div class="ttdeci">virtual void Add(int64_t delta)</div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00093">runtime-profile.h:93</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html_aaef4a8066afcba576fc69dda6fc95e25"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html#aaef4a8066afcba576fc69dda6fc95e25">impala::RuntimeProfile::AddChild</a></div><div class="ttdeci">void AddChild(RuntimeProfile *child, bool indent=true, RuntimeProfile *location=NULL)</div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8cc_source.html#l00368">runtime-profile.cc:368</a></div></div>
<div class="ttc" id="namespacegen__ir__descriptions_html_a0d6572990c8dd576a55a21ff11d6deb7"><div class="ttname"><a href="namespacegen__ir__descriptions.html#a0d6572990c8dd576a55a21ff11d6deb7">gen_ir_descriptions.idx</a></div><div class="ttdeci">int idx</div><div class="ttdef"><b>Definition:</b> <a href="gen__ir__descriptions_8py_source.html#l00215">gen_ir_descriptions.py:215</a></div></div>
<div class="ttc" id="streaming-sampler_8h_html"><div class="ttname"><a href="streaming-sampler_8h.html">streaming-sampler.h</a></div></div>
<div class="ttc" id="namespaceimpala_html_aaebb9aadfa9e5aec064bc26565df06d3"><div class="ttname"><a href="namespaceimpala.html#aaebb9aadfa9e5aec064bc26565df06d3">impala::name</a></div><div class="ttdeci">string name</div><div class="ttdef"><b>Definition:</b> <a href="cpu-info_8cc_source.html#l00050">cpu-info.cc:50</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html_a1e8bb1f8bf0f97678a9c6b6507316ee2"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html#a1e8bb1f8bf0f97678a9c6b6507316ee2">impala::RuntimeProfile::name</a></div><div class="ttdeci">const std::string &amp; name() const </div><div class="ttdoc">Returns name of this profile. </div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8h_source.html#l00487">runtime-profile.h:487</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html_a2a9ef49b3b393d9db693ff50f455fc4f"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html#a2a9ef49b3b393d9db693ff50f455fc4f">impala::RuntimeProfile::GetInfoString</a></div><div class="ttdeci">const std::string * GetInfoString(const std::string &amp;key) const </div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8cc_source.html#l00419">runtime-profile.cc:419</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html_ad12ee35bc733eb6aa4f3cb26cef28a88"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html#ad12ee35bc733eb6aa4f3cb26cef28a88">impala::RuntimeProfile::GetChildren</a></div><div class="ttdeci">void GetChildren(std::vector&lt; RuntimeProfile * &gt; *children)</div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8cc_source.html#l00390">runtime-profile.cc:390</a></div></div>
<div class="ttc" id="cpu-info_8h_html"><div class="ttname"><a href="cpu-info_8h.html">cpu-info.h</a></div></div>
<div class="ttc" id="classimpala_1_1RuntimeProfile_html_a0636f082b808be5603808d2e665e2d80"><div class="ttname"><a href="classimpala_1_1RuntimeProfile.html#a0636f082b808be5603808d2e665e2d80">impala::RuntimeProfile::ToThrift</a></div><div class="ttdeci">void ToThrift(TRuntimeProfileTree *tree) const </div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile_8cc_source.html#l00651">runtime-profile.cc:651</a></div></div>
<div class="ttc" id="namespaceimpala_html_a41577a17a403af031521c87d561e3594"><div class="ttname"><a href="namespaceimpala.html#a41577a17a403af031521c87d561e3594">impala::ValidateSampler</a></div><div class="ttdeci">void ValidateSampler(const StreamingSampler&lt; int, 10 &gt; &amp;sampler, int expected_num, int expected_period, int expected_delta)</div><div class="ttdef"><b>Definition:</b> <a href="runtime-profile-test_8cc_source.html#l00454">runtime-profile-test.cc:454</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_e5d120be6b5e8a44336cbfd013b25604.html">be</a></li><li class="navelem"><a class="el" href="dir_68cf7cafb51a962d5bc4848b83cab0de.html">src</a></li><li class="navelem"><a class="el" href="dir_6939c8639261a9303da2cde491b82898.html">util</a></li><li class="navelem"><a class="el" href="runtime-profile-test_8cc.html">runtime-profile-test.cc</a></li>
<li class="footer">Generated on Thu May 7 2015 16:10:38 for Impala by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6 </li>
</ul>
</div>
</body>
</html>