aboutsummaryrefslogtreecommitdiff
path: root/docs/doxygen/nel/a02640.html
diff options
context:
space:
mode:
authorneodarz <neodarz@neodarz.net>2018-08-11 20:21:34 +0200
committerneodarz <neodarz@neodarz.net>2018-08-11 20:21:34 +0200
commit0ea5fc66924303d1bf73ba283a383e2aadee02f2 (patch)
tree2568e71a7ccc44ec23b8bb3f0ff97fb6bf2ed709 /docs/doxygen/nel/a02640.html
downloadnevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.tar.xz
nevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.zip
Initial commit
Diffstat (limited to '')
-rw-r--r--docs/doxygen/nel/a02640.html2371
1 files changed, 2371 insertions, 0 deletions
diff --git a/docs/doxygen/nel/a02640.html b/docs/doxygen/nel/a02640.html
new file mode 100644
index 00000000..14bdc02f
--- /dev/null
+++ b/docs/doxygen/nel/a02640.html
@@ -0,0 +1,2371 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
+<title>NeL: NLMISC::CHTimer class Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css">
+</head><body>
+<!-- Generated by Doxygen 1.3.6 -->
+<div class="qindex"> <form class="search" action="search.php" method="get">
+<a class="qindex" href="main.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical&nbsp;List</a> | <a class="qindex" href="annotated.html">Data&nbsp;Structures</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="namespacemembers.html">Namespace&nbsp;Members</a> | <a class="qindex" href="functions.html">Data&nbsp;Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related&nbsp;Pages</a> | <span class="search"><u>S</u>earch&nbsp;for&nbsp;<input class="search" type="text" name="query" value="" size="20" accesskey="s"/></span></form></div>
+<h1>NLMISC::CHTimer Class Reference</h1><code>#include &lt;<a class="el" href="a05788.html">hierarchical_timer.h</a>&gt;</code>
+<p>
+<hr><a name="_details"></a><h2>Detailed Description</h2>
+Hierarchical timing system. Allows to accurately measure performance of routines, and displays results hierarchically. To time a piece of code, just declare a static <a class="el" href="a02640.html">CHTimer</a> object and encapsulate code between calls to <a class="el" href="a02640.html#NLMISC_1_1CHTimera2">before()</a> and <a class="el" href="a02640.html#NLMISC_1_1CHTimera1">after()</a> methods. ex: <pre class="fragment"><div> <span class="keywordtype">void</span> myFunction()
+ {
+ <span class="keyword">static</span> <a class="code" href="a02640.html#NLMISC_1_1CHTimera4">CHTimer</a> myTimer(<span class="stringliteral">"myFunction"</span>);
+ myTimer.before();
+ <span class="comment">// some code here</span>
+ myTimer.after();
+ }
+ *
+</div></pre>Don't forget to call <a class="el" href="a02640.html#NLMISC_1_1CHTimera1">after()</a> to avoid timing wrongness or assertion crashes !<p>
+<dl compact><dt><b>Warning:</b></dt><dd>Supports only single-threaded applications. <p>
+Supports only Intel processors.</dd></dl>
+<dl compact><dt><b>Author:</b></dt><dd>Benjamin Legros <p>
+Nicolas Vizerie <p>
+Nevrax France </dd></dl>
+<dl compact><dt><b>Date:</b></dt><dd>2001, 2002 </dd></dl>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05788.html#l00187">187</a> of file <a class="el" href="a05788.html">hierarchical_timer.h</a>.<table border=0 cellpadding=0 cellspacing=0>
+<tr><td></td></tr>
+<tr><td colspan=2><br><h2>Public Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>enum &nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerw8">TSortCriterion</a> { <br>
+&nbsp;&nbsp;<a class="el" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw3">NoSort</a>,
+<a class="el" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw6">TotalTime</a>,
+<a class="el" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw7">TotalTimeWithoutSons</a>,
+<a class="el" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw1">MeanTime</a>,
+<br>
+&nbsp;&nbsp;<a class="el" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw4">NumVisits</a>,
+<a class="el" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw0">MaxTime</a>,
+<a class="el" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw2">MinTime</a>,
+<a class="el" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw5">SortCriterionsLast</a>
+<br>
+ }</td></tr>
+
+<tr><td colspan=2><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimera0">after</a> (bool displayAfter)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimera1">after</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimera2">before</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Starts a measuring session. <a href="#NLMISC_1_1CHTimera2"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimera3">CHTimer</a> (const char *name, bool isRoot=false)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimera4">CHTimer</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">ctor <a href="#NLMISC_1_1CHTimera4"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>const char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimera5">getName</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimera6">setName</a> (const char *name)</td></tr>
+
+<tr><td colspan=2><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimere0">adjust</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimere1">bench</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimere2">benching</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimere3">clear</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clears stats, and reinits all timer structure. <a href="#NLMISC_1_1CHTimere3"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimere4">display</a> (<a class="el" href="a02813.html">CLog</a> *log=<a class="el" href="a05378.html#a12">InfoLog</a>, <a class="el" href="a02640.html#NLMISC_1_1CHTimerw8">TSortCriterion</a> criterion=TotalTime, bool displayInline=true, bool displayEx=true)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimere5">displayByExecutionPath</a> (<a class="el" href="a02813.html">CLog</a> *log=<a class="el" href="a05378.html#a12">InfoLog</a>, <a class="el" href="a02640.html#NLMISC_1_1CHTimerw8">TSortCriterion</a> criterion=TotalTime, bool displayInline=true, bool alignPaths=true, bool displayEx=true)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimere6">displayHierarchical</a> (<a class="el" href="a02813.html">CLog</a> *log=<a class="el" href="a05378.html#a12">InfoLog</a>, bool displayEx=true, <a class="el" href="a04558.html#a15">uint</a> labelNumChar=32, <a class="el" href="a04558.html#a15">uint</a> indentationStep=2)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimere7">displayHierarchicalByExecutionPath</a> (<a class="el" href="a02813.html">CLog</a> *log=<a class="el" href="a05378.html#a12">InfoLog</a>, bool displayEx=true, <a class="el" href="a04558.html#a15">uint</a> labelNumChar=32, <a class="el" href="a04558.html#a15">uint</a> indentationStep=2)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimere8">displayHierarchicalByExecutionPathSorted</a> (<a class="el" href="a02813.html">CLog</a> *log=<a class="el" href="a05378.html#a12">InfoLog</a>, <a class="el" href="a02640.html#NLMISC_1_1CHTimerw8">TSortCriterion</a> criterion=TotalTime, bool displayEx=true, <a class="el" href="a04558.html#a15">uint</a> labelNumChar=32, <a class="el" href="a04558.html#a15">uint</a> indentationStep=2)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimere9">displaySummary</a> (<a class="el" href="a02813.html">CLog</a> *log=<a class="el" href="a05378.html#a12">InfoLog</a>, <a class="el" href="a02640.html#NLMISC_1_1CHTimerw8">TSortCriterion</a> criterion=TotalTime, bool displayEx=true, <a class="el" href="a04558.html#a15">uint</a> labelNumChar=32, <a class="el" href="a04558.html#a15">uint</a> indentationStep=2, <a class="el" href="a04558.html#a15">uint</a> maxDepth=3)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimere10">endBench</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Ends a bench session. <a href="#NLMISC_1_1CHTimere10"></a><br><br></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimere11">startBench</a> (bool wantStandardDeviation=false, bool quick=false, bool reset=true)</td></tr>
+
+<tr><td colspan=2><br><h2>Private Types</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>typedef std::vector&lt; <a class="el" href="a02642.html">CNode</a> * &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimery0">TNodeVect</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>typedef std::vector&lt; <a class="el" href="a02640.html">CHTimer</a> * &gt;&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimery1">TTimerVect</a></td></tr>
+
+<tr><td colspan=2><br><h2>Private Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerd0">doAfter</a> (bool displayAfter=false)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerd1">doBefore</a> ()</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerd2">walkTreeToCurrent</a> ()</td></tr>
+
+<tr><td colspan=2><br><h2>Static Private Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>void&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerh0">estimateAfterStopTime</a> ()</td></tr>
+
+<tr><td colspan=2><br><h2>Private Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerr0">_IsRoot</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>const char *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerr1">_Name</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02640.html">CHTimer</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerr2">_Parent</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02640.html#NLMISC_1_1CHTimery1">TTimerVect</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerr3">_Sons</a></td></tr>
+
+<tr><td colspan=2><br><h2>Static Private Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a04558.html#a12">sint64</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerv0">_AfterStopEstimateTime</a> = 0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerv1">_AfterStopEstimateTimeDone</a> = false</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerv2">_Benching</a> = false</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerv3">_BenchStartedOnce</a> = false</td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02642.html">CNode</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a> = &amp;<a class="el" href="a02640.html#NLMISC_1_1CHTimerv8">_RootNode</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02640.html">CHTimer</a> *&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerv5">_CurrTimer</a> = &amp;<a class="el" href="a02640.html#NLMISC_1_1CHTimerv9">_RootTimer</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>double&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerv6">_MsPerTick</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a03391.html">CSimpleClock</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerv7">_PreambuleClock</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02642.html">CNode</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerv8">_RootNode</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top><a class="el" href="a02640.html">CHTimer</a>&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerv9">_RootTimer</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align=right valign=top>bool&nbsp;</td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerv10">_WantStandardDeviation</a> = false</td></tr>
+
+</table>
+<hr><h2>Member Typedef Documentation</h2>
+<a class="anchor" name="NLMISC_1_1CHTimery0" doxytag="NLMISC::CHTimer::TNodeVect" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> typedef std::vector&lt;<a class="el" href="a02642.html">CNode</a> *&gt; <a class="el" href="a02640.html#NLMISC_1_1CHTimery0">NLMISC::CHTimer::TNodeVect</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05788.html#l00282">282</a> of file <a class="el" href="a05788.html">hierarchical_timer.h</a>.
+<p>
+Referenced by <a class="el" href="a05787.html#l00288">display()</a>, <a class="el" href="a05787.html#l00375">displayByExecutionPath()</a>, and <a class="el" href="a05787.html#l00472">displayHierarchical()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimery1" doxytag="NLMISC::CHTimer::TTimerVect" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> typedef std::vector&lt;<a class="el" href="a02640.html">CHTimer</a> *&gt; <a class="el" href="a02640.html#NLMISC_1_1CHTimery1">NLMISC::CHTimer::TTimerVect</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05788.html#l00283">283</a> of file <a class="el" href="a05788.html">hierarchical_timer.h</a>. </td>
+ </tr>
+</table>
+<hr><h2>Member Enumeration Documentation</h2>
+<a class="anchor" name="NLMISC_1_1CHTimerw8" doxytag="NLMISC::CHTimer::TSortCriterion" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> enum <a class="el" href="a02640.html#NLMISC_1_1CHTimerw8">NLMISC::CHTimer::TSortCriterion</a>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+<dl compact><dt><b>Enumeration values: </b></dt><dd>
+<table border=0 cellspacing=2 cellpadding=0>
+<tr><td valign=top><em><a class="anchor" name="NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw3" doxytag="NoSort" ></a>NoSort</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw6" doxytag="TotalTime" ></a>TotalTime</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw7" doxytag="TotalTimeWithoutSons" ></a>TotalTimeWithoutSons</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw1" doxytag="MeanTime" ></a>MeanTime</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw4" doxytag="NumVisits" ></a>NumVisits</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw0" doxytag="MaxTime" ></a>MaxTime</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw2" doxytag="MinTime" ></a>MinTime</em>&nbsp;</td><td>
+</td></tr>
+<tr><td valign=top><em><a class="anchor" name="NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw5" doxytag="SortCriterionsLast" ></a>SortCriterionsLast</em>&nbsp;</td><td>
+</td></tr>
+</table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05788.html#l00191">191</a> of file <a class="el" href="a05788.html">hierarchical_timer.h</a>.
+<p>
+<div class="fragment"><pre>00191 { <a class="code" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw3">NoSort</a>,
+00192 <a class="code" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw6">TotalTime</a>,
+00193 <a class="code" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw7">TotalTimeWithoutSons</a>,
+00194 <a class="code" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw1">MeanTime</a>,
+00195 <a class="code" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw4">NumVisits</a>,
+00196 <a class="code" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw0">MaxTime</a>,
+00197 <a class="code" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw2">MinTime</a>,
+00198 <a class="code" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw5">SortCriterionsLast</a>
+00199 };
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="NLMISC_1_1CHTimera4" doxytag="NLMISC::CHTimer::CHTimer" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> NLMISC::CHTimer::CHTimer </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+ctor
+<p>
+
+<p>
+Definition at line <a class="el" href="a05788.html#l00202">202</a> of file <a class="el" href="a05788.html">hierarchical_timer.h</a>.
+<p>
+References <a class="el" href="a05788.html#l00430">_IsRoot</a>.
+<p>
+<div class="fragment"><pre>00202 : <a class="code" href="a02640.html#NLMISC_1_1CHTimerr1">_Name</a>(NULL), <a class="code" href="a02640.html#NLMISC_1_1CHTimerr2">_Parent</a>(NULL), <a class="code" href="a02640.html#NLMISC_1_1CHTimerr0">_IsRoot</a>(<span class="keyword">false</span>) {}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimera3" doxytag="NLMISC::CHTimer::CHTimer" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> NLMISC::CHTimer::CHTimer </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname" nowrap> <em>name</em>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>isRoot</em> = false</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05788.html#l00203">203</a> of file <a class="el" href="a05788.html">hierarchical_timer.h</a>.
+<p>
+References <a class="el" href="a05788.html#l00430">_IsRoot</a>.
+<p>
+<div class="fragment"><pre>00203 : <a class="code" href="a02640.html#NLMISC_1_1CHTimerr1">_Name</a>(name), <a class="code" href="a02640.html#NLMISC_1_1CHTimerr2">_Parent</a>(NULL), <a class="code" href="a02640.html#NLMISC_1_1CHTimerr0">_IsRoot</a>(isRoot) {}
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="NLMISC_1_1CHTimere0" doxytag="NLMISC::CHTimer::adjust" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::adjust </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, static]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+For backward compatibility
+<p>
+Definition at line <a class="el" href="a05788.html#l00234">234</a> of file <a class="el" href="a05788.html">hierarchical_timer.h</a>.
+<p>
+<div class="fragment"><pre>00234 {}
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimera0" doxytag="NLMISC::CHTimer::after" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::after </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>displayAfter</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05788.html#l00216">216</a> of file <a class="el" href="a05788.html">hierarchical_timer.h</a>.
+<p>
+References <a class="el" href="a05787.html#l00052">_Benching</a>, and <a class="el" href="a05787.html#l00957">doAfter()</a>.
+<p>
+<div class="fragment"><pre>00217 {
+00218 <span class="keywordflow">if</span> (<a class="code" href="a02640.html#NLMISC_1_1CHTimerv2">_Benching</a>)
+00219 <a class="code" href="a02640.html#NLMISC_1_1CHTimerd0">doAfter</a>(displayAfter);
+00220 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimera1" doxytag="NLMISC::CHTimer::after" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::after </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05788.html#l00211">211</a> of file <a class="el" href="a05788.html">hierarchical_timer.h</a>.
+<p>
+References <a class="el" href="a05787.html#l00052">_Benching</a>, and <a class="el" href="a05787.html#l00957">doAfter()</a>.
+<p>
+Referenced by <a class="el" href="a05787.html#l00271">endBench()</a>, <a class="el" href="a05787.html#l00194">estimateAfterStopTime()</a>, <a class="el" href="a05788.html#l00481">NLMISC::CAutoTimer::~CAutoTimer()</a>, and <a class="el" href="a05788.html#l00494">NLMISC::CAutoTimerInst::~CAutoTimerInst()</a>.
+<p>
+<div class="fragment"><pre>00212 {
+00213 <span class="keywordflow">if</span> (<a class="code" href="a02640.html#NLMISC_1_1CHTimerv2">_Benching</a>)
+00214 <a class="code" href="a02640.html#NLMISC_1_1CHTimerd0">doAfter</a>(<span class="keyword">false</span>);
+00215 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimera2" doxytag="NLMISC::CHTimer::before" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::before </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Starts a measuring session.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05788.html#l00205">205</a> of file <a class="el" href="a05788.html">hierarchical_timer.h</a>.
+<p>
+References <a class="el" href="a05787.html#l00052">_Benching</a>, and <a class="el" href="a05787.html#l00935">doBefore()</a>.
+<p>
+Referenced by <a class="el" href="a05788.html#l00480">NLMISC::CAutoTimer::CAutoTimer()</a>, <a class="el" href="a05788.html#l00493">NLMISC::CAutoTimerInst::CAutoTimerInst()</a>, <a class="el" href="a05787.html#l00194">estimateAfterStopTime()</a>, and <a class="el" href="a05787.html#l00241">startBench()</a>.
+<p>
+<div class="fragment"><pre>00206 {
+00207 <span class="keywordflow">if</span> (<a class="code" href="a02640.html#NLMISC_1_1CHTimerv2">_Benching</a>)
+00208 <a class="code" href="a02640.html#NLMISC_1_1CHTimerd1">doBefore</a>();
+00209 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimere1" doxytag="NLMISC::CHTimer::bench" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::bench </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, static]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+For backward compatibility
+<p>
+Definition at line <a class="el" href="a05788.html#l00231">231</a> of file <a class="el" href="a05788.html">hierarchical_timer.h</a>.
+<p>
+References <a class="el" href="a05787.html#l00241">startBench()</a>.
+<p>
+<div class="fragment"><pre>00231 { <a class="code" href="a02640.html#NLMISC_1_1CHTimere11">startBench</a>(); }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimere2" doxytag="NLMISC::CHTimer::benching" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool NLMISC::CHTimer::benching </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline, static]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05788.html#l00238">238</a> of file <a class="el" href="a05788.html">hierarchical_timer.h</a>.
+<p>
+References <a class="el" href="a05787.html#l00052">_Benching</a>.
+<p>
+<div class="fragment"><pre>00238 { <span class="keywordflow">return</span> <a class="code" href="a02640.html#NLMISC_1_1CHTimerv2">_Benching</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimere3" doxytag="NLMISC::CHTimer::clear" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::clear </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [static]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Clears stats, and reinits all timer structure.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00796">796</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+References <a class="el" href="a05787.html#l00049">_CurrNode</a>, <a class="el" href="a05787.html#l00048">_RootNode</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, and <a class="el" href="a05788.html#l00315">NLMISC::CHTimer::CNode::reset()</a>.
+<p>
+Referenced by <a class="el" href="a05787.html#l00194">estimateAfterStopTime()</a>, and <a class="el" href="a05787.html#l00241">startBench()</a>.
+<p>
+<div class="fragment"><pre>00797 {
+00798 <span class="comment">// should not be benching !</span>
+00799 <a class="code" href="a04199.html#a6">nlassert</a>(_CurrNode == &amp;_RootNode);
+00800 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv8">_RootNode</a>.<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodea4">releaseSons</a>();
+00801 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a> = &amp;<a class="code" href="a02640.html#NLMISC_1_1CHTimerv8">_RootNode</a>;
+00802 _RootNode.<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodea5">reset</a>();
+00803 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimere4" doxytag="NLMISC::CHTimer::display" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::display </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02813.html">CLog</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>log</em> = <a class="el" href="a05378.html#a12">InfoLog</a>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02640.html#NLMISC_1_1CHTimerw8">TSortCriterion</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>criterion</em> = TotalTime, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>displayInline</em> = true, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>displayEx</em> = true</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [static]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Display results <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>displayEx</em>&nbsp;</td><td>true to display more detailed infos</td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00288">288</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+References <a class="el" href="a05787.html#l00053">_BenchStartedOnce</a>, <a class="el" href="a05787.html#l00049">_CurrNode</a>, <a class="el" href="a05787.html#l00054">_MsPerTick</a>, <a class="el" href="a05787.html#l00048">_RootNode</a>, <a class="el" href="a05787.html#l00055">_WantStandardDeviation</a>, <a class="el" href="a05787.html#l00806">NLMISC::CHTimer::CStats::buildFromNode()</a>, <a class="el" href="a05943.html#l00323">NLMISC::CLog::displayNL()</a>, <a class="el" href="a05943.html#l00442">NLMISC::CLog::displayRawNL()</a>, <a class="el" href="a05646.html#l01016">format</a>, <a class="el" href="a05788.html#l00133">NLMISC::CSimpleClock::getNumTicks()</a>, <a class="el" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw3">NoSort</a>, <a class="el" href="a05788.html#l00292">NLMISC::CHTimer::CNode::Owner</a>, <a class="el" href="a05586.html#l00161">NLMISC::smprintf()</a>, <a class="el" href="a05788.html#l00291">NLMISC::CHTimer::CNode::Sons</a>, <a class="el" href="a05788.html#l00301">NLMISC::CHTimer::CNode::SonsPreambule</a>, <a class="el" href="a05788.html#l00106">NLMISC::CSimpleClock::start()</a>, <a class="el" href="a05788.html#l00119">NLMISC::CSimpleClock::stop()</a>, <a class="el" href="a05788.html#l00282">TNodeVect</a>, <a class="el" href="a06229.html#l02652">NLMISC::toString()</a>, <a class="el" href="a05788.html#l00338">NLMISC::CHTimer::CStats::TotalTime</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06420.html#l01064">NLSOUND::CSoundDriverDSound::displayBench()</a>.
+<p>
+<div class="fragment"><pre>00289 {
+00290 CSimpleClock benchClock;
+00291 benchClock.start();
+00292 <span class="keywordflow">if</span>(!<a class="code" href="a02640.html#NLMISC_1_1CHTimerv3">_BenchStartedOnce</a>) <span class="comment">// should have done at least one bench </span>
+00293 {
+00294 benchClock.stop();
+00295 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo9">SonsPreambule</a> += benchClock.getNumTicks();
+00296 <span class="keywordflow">return</span>;
+00297 }
+00298 log-&gt;displayNL(<span class="stringliteral">"HTIMER: ========================================================================="</span>);
+00299 log-&gt;displayRawNL(<span class="stringliteral">"HTIMER: Bench cumuled results"</span>);
+00300 <span class="keyword">typedef</span> std::map&lt;CHTimer *, TNodeVect&gt; TNodeMap;
+00301 TNodeMap nodeMap;
+00302 <a class="code" href="a02640.html#NLMISC_1_1CHTimery0">TNodeVect</a> nodeLeft;
+00303 nodeLeft.push_back(&amp;_RootNode);
+00305 <span class="keywordflow">while</span> (!nodeLeft.empty())
+00306 {
+00307 CNode *currNode = nodeLeft.back();
+00308 nodeMap[currNode-&gt;Owner].push_back(currNode);
+00309 nodeLeft.pop_back();
+00310 nodeLeft.insert(nodeLeft.end(), currNode-&gt;Sons.begin(), currNode-&gt;Sons.end());
+00311
+00312 }
+00313 <span class="comment">// </span>
+00314 <span class="comment">// 2 ) build statistics </span>
+00315 <span class="keyword">typedef</span> std::vector&lt;CTimerStat&gt; TTimerStatVect;
+00316 <span class="keyword">typedef</span> std::vector&lt;CTimerStat *&gt; TTimerStatPtrVect;
+00317 TTimerStatVect stats(nodeMap.size());
+00318 TTimerStatPtrVect statsPtr(stats.size());
+00319 <span class="comment">//</span>
+00320 <a class="code" href="a04558.html#a15">uint</a> k = 0;
+00321 <span class="keywordflow">for</span>(TNodeMap::iterator it = nodeMap.begin(); it != nodeMap.end(); ++it)
+00322 {
+00323 statsPtr[k] = &amp;stats[k];
+00324 stats[k].Timer = it-&gt;first;
+00325 stats[k].buildFromNodes(&amp;(it-&gt;second[0]), it-&gt;second.size(), <a class="code" href="a02640.html#NLMISC_1_1CHTimerv6">_MsPerTick</a>);
+00326 ++k;
+00327 }
+00328 <span class="comment">// 3 ) sort statistics</span>
+00329 <span class="keywordflow">if</span> (criterion != <a class="code" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw3">NoSort</a>)
+00330 {
+00331 CStatSorter sorter(criterion);
+00332 std::sort(statsPtr.begin(), statsPtr.end(), sorter);
+00333 }
+00334
+00335 <span class="comment">// 4 ) get root total time.</span>
+00336 CStats rootStats;
+00337 rootStats.buildFromNode( &amp;_RootNode, _MsPerTick);
+00338
+00339 <span class="comment">// 5 ) display statistics</span>
+00340 <a class="code" href="a04558.html#a15">uint</a> maxNodeLenght = 0;
+00341 std::string <a class="code" href="a04223.html#a641">format</a>;
+00342 <span class="keywordflow">if</span> (displayInline)
+00343 {
+00344 <span class="keywordflow">for</span>(TTimerStatPtrVect::iterator statIt = statsPtr.begin(); statIt != statsPtr.end(); ++statIt)
+00345 {
+00346 maxNodeLenght = std::max(maxNodeLenght, (<a class="code" href="a04558.html#a15">uint</a>)strlen((*statIt)-&gt;Timer-&gt;_Name));
+00347 }
+00348 <a class="code" href="a04223.html#a641">format</a> = <span class="stringliteral">"HTIMER: %-"</span> + <a class="code" href="a05378.html#a244">NLMISC::toString</a>(maxNodeLenght + 1) + <span class="stringliteral">"s %s"</span>;
+00349 }
+00350 std::string statsInline;
+00351
+00352 log-&gt;displayRawNL(<a class="code" href="a04223.html#a641">format</a>.c_str(), <span class="stringliteral">""</span>, <span class="stringliteral">" | total | local | visits | loc%/ glb% | min | max | mean"</span>);
+00353
+00354 <span class="keywordflow">for</span>(TTimerStatPtrVect::iterator statIt = statsPtr.begin(); statIt != statsPtr.end(); ++statIt)
+00355 {
+00356 <span class="keywordflow">if</span> (!displayInline)
+00357 {
+00358 log-&gt;displayRawNL(<span class="stringliteral">"HTIMER: ================================="</span>);
+00359 log-&gt;displayRawNL(<span class="stringliteral">"HTIMER: Node %s"</span>, (*statIt)-&gt;Timer-&gt;_Name);
+00360 (*statIt)-&gt;display(log, displayEx, _WantStandardDeviation);
+00361 }
+00362 <span class="keywordflow">else</span>
+00363 {
+00364 (*statIt)-&gt;getStats(statsInline, displayEx, rootStats.TotalTime, _WantStandardDeviation);
+00365 <span class="keywordtype">char</span> out[4096];
+00366 <a class="code" href="a05378.html#a259">NLMISC::smprintf</a>(out, 2048, <a class="code" href="a04223.html#a641">format</a>.c_str(), (*statIt)-&gt;Timer-&gt;_Name, statsInline.c_str());
+00367 log-&gt;displayRawNL(out);
+00368 }
+00369 }
+00370 benchClock.stop();
+00371 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo9">SonsPreambule</a> += benchClock.getNumTicks();
+00372 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimere5" doxytag="NLMISC::CHTimer::displayByExecutionPath" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::displayByExecutionPath </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02813.html">CLog</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>log</em> = <a class="el" href="a05378.html#a12">InfoLog</a>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02640.html#NLMISC_1_1CHTimerw8">TSortCriterion</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>criterion</em> = TotalTime, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>displayInline</em> = true, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>alignPaths</em> = true, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>displayEx</em> = true</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [static]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Display results by execution paths <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>displayInline</em>&nbsp;</td><td>true to display each result on a single line. </td></tr>
+ <tr><td valign=top><em>alignPaths</em>&nbsp;</td><td>true to display all execution paths aligned. </td></tr>
+ <tr><td valign=top><em>displayEx</em>&nbsp;</td><td>true to display more detailed infos.</td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00375">375</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+References <a class="el" href="a05787.html#l00053">_BenchStartedOnce</a>, <a class="el" href="a05787.html#l00049">_CurrNode</a>, <a class="el" href="a05787.html#l00054">_MsPerTick</a>, <a class="el" href="a05787.html#l00048">_RootNode</a>, <a class="el" href="a05787.html#l00055">_WantStandardDeviation</a>, <a class="el" href="a05787.html#l00806">NLMISC::CHTimer::CStats::buildFromNode()</a>, <a class="el" href="a05943.html#l00442">NLMISC::CLog::displayRawNL()</a>, <a class="el" href="a05646.html#l01016">format</a>, <a class="el" href="a05787.html#l00157">NLMISC::CHTimer::CNode::getNumNodes()</a>, <a class="el" href="a05788.html#l00133">NLMISC::CSimpleClock::getNumTicks()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw3">NoSort</a>, <a class="el" href="a05586.html#l00161">NLMISC::smprintf()</a>, <a class="el" href="a05788.html#l00291">NLMISC::CHTimer::CNode::Sons</a>, <a class="el" href="a05788.html#l00301">NLMISC::CHTimer::CNode::SonsPreambule</a>, <a class="el" href="a05788.html#l00106">NLMISC::CSimpleClock::start()</a>, <a class="el" href="a05788.html#l00119">NLMISC::CSimpleClock::stop()</a>, <a class="el" href="a05788.html#l00282">TNodeVect</a>, <a class="el" href="a06229.html#l02652">NLMISC::toString()</a>, <a class="el" href="a05788.html#l00338">NLMISC::CHTimer::CStats::TotalTime</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06420.html#l01064">NLSOUND::CSoundDriverDSound::displayBench()</a>.
+<p>
+<div class="fragment"><pre>00376 {
+00377 CSimpleClock benchClock;
+00378 benchClock.start();
+00379 log-&gt;displayRawNL(<span class="stringliteral">"HTIMER: ========================================================================="</span>);
+00380 log-&gt;displayRawNL(<span class="stringliteral">"HTIMER: Bench by execution path"</span>);
+00381 <a class="code" href="a04199.html#a6">nlassert</a>(_BenchStartedOnce); <span class="comment">// should have done at least one bench </span>
+00382 <span class="comment">//</span>
+00383 <span class="keyword">typedef</span> std::vector&lt;CNodeStat&gt; TNodeStatVect;
+00384 <span class="keyword">typedef</span> std::vector&lt;CNodeStat *&gt; TNodeStatPtrVect;
+00385
+00386 TNodeStatVect nodeStats;
+00387 nodeStats.reserve(<a class="code" href="a02640.html#NLMISC_1_1CHTimerv8">_RootNode</a>.<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodea2">getNumNodes</a>());
+00388 <a class="code" href="a02640.html#NLMISC_1_1CHTimery0">TNodeVect</a> nodeLeft;
+00389 nodeLeft.push_back(&amp;_RootNode);
+00391 <span class="keywordflow">while</span> (!nodeLeft.empty())
+00392 {
+00393 CNode *currNode = nodeLeft.back();
+00394
+00395 nodeStats.push_back(CNodeStat());
+00396 nodeStats.back().buildFromNode(currNode, _MsPerTick);
+00397 nodeStats.back().Node = currNode;
+00398
+00399 nodeLeft.pop_back();
+00400 nodeLeft.insert(nodeLeft.end(), currNode-&gt;Sons.begin(), currNode-&gt;Sons.end());
+00401
+00402 }
+00403
+00405 <span class="comment">// create a pointer list</span>
+00406 TNodeStatPtrVect nodeStatsPtrs(nodeStats.size());
+00407 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> k = 0; k &lt; nodeStats.size(); ++k)
+00408 {
+00409 nodeStatsPtrs[k] = &amp;nodeStats[k];
+00410 }
+00411
+00412 <span class="comment">// 3 ) sort statistics</span>
+00413 <span class="keywordflow">if</span> (criterion != <a class="code" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw3">NoSort</a>)
+00414 {
+00415 CStatSorter sorter(criterion);
+00416 std::sort(nodeStatsPtrs.begin(), nodeStatsPtrs.end(), sorter);
+00417 }
+00418
+00419 <span class="comment">// 4 ) get root total time.</span>
+00420 CStats rootStats;
+00421 rootStats.buildFromNode(&amp;_RootNode, _MsPerTick);
+00422
+00423 <span class="comment">// 5 ) display statistics</span>
+00424 std::string statsInline;
+00425 std::string nodePath;
+00426
+00427 std::string <a class="code" href="a04223.html#a641">format</a>;
+00428 <span class="keywordflow">if</span> (displayInline)
+00429 {
+00430 <span class="keywordflow">if</span> (alignPaths)
+00431 {
+00432 <a class="code" href="a04558.html#a15">uint</a> maxSize = 0;
+00433 std::string np;
+00434 <span class="keywordflow">for</span>(TNodeStatPtrVect::iterator it = nodeStatsPtrs.begin(); it != nodeStatsPtrs.end(); ++it)
+00435 {
+00436 (*it)-&gt;Node-&gt;getPath(np);
+00437 maxSize = std::max(maxSize, (<a class="code" href="a04558.html#a15">uint</a>)np.size());
+00438 }
+00439 <a class="code" href="a04223.html#a641">format</a> = <span class="stringliteral">"HTIMER: %-"</span> + <a class="code" href="a05378.html#a244">NLMISC::toString</a>(maxSize) +<span class="stringliteral">"s %s"</span>;
+00440 }
+00441 <span class="keywordflow">else</span>
+00442 {
+00443 <a class="code" href="a04223.html#a641">format</a> = <span class="stringliteral">"HTIMER: %s %s"</span>;
+00444 }
+00445 }
+00446
+00447 log-&gt;displayRawNL(<a class="code" href="a04223.html#a641">format</a>.c_str(), <span class="stringliteral">""</span>, <span class="stringliteral">" | total | local | visits | loc%/ glb% | min | max | mean"</span>);
+00448
+00449 <span class="keywordflow">for</span>(TNodeStatPtrVect::iterator it = nodeStatsPtrs.begin(); it != nodeStatsPtrs.end(); ++it)
+00450 {
+00451 <span class="keywordflow">if</span> (!displayInline)
+00452 {
+00453 log-&gt;displayRawNL(<span class="stringliteral">"HTIMER: ================================="</span>);
+00454 (*it)-&gt;Node-&gt;displayPath(log);
+00455 (*it)-&gt;display(log, displayEx, _WantStandardDeviation);
+00456 }
+00457 <span class="keywordflow">else</span>
+00458 {
+00459 (*it)-&gt;getStats(statsInline, displayEx, rootStats.TotalTime, _WantStandardDeviation);
+00460 (*it)-&gt;Node-&gt;getPath(nodePath);
+00461
+00462 <span class="keywordtype">char</span> out[2048];
+00463 <a class="code" href="a05378.html#a259">NLMISC::smprintf</a>(out, 2048, <a class="code" href="a04223.html#a641">format</a>.c_str(), nodePath.c_str(), statsInline.c_str());
+00464 log-&gt;displayRawNL(out);
+00465 }
+00466 }
+00467 benchClock.stop();
+00468 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo9">SonsPreambule</a> += benchClock.getNumTicks();
+00469 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimere6" doxytag="NLMISC::CHTimer::displayHierarchical" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::displayHierarchical </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02813.html">CLog</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>log</em> = <a class="el" href="a05378.html#a12">InfoLog</a>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>displayEx</em> = true, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>labelNumChar</em> = 32, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>indentationStep</em> = 2</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [static]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Hierarchical display, no sorting is done <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>displayEx</em>&nbsp;</td><td>true to display more detailed infos. </td></tr>
+ <tr><td valign=top><em>labelNumChar</em>&nbsp;</td><td></td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00472">472</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+References <a class="el" href="a05787.html#l00053">_BenchStartedOnce</a>, <a class="el" href="a05787.html#l00049">_CurrNode</a>, <a class="el" href="a05787.html#l00054">_MsPerTick</a>, <a class="el" href="a05788.html#l00424">_Name</a>, <a class="el" href="a05788.html#l00426">_Parent</a>, <a class="el" href="a05787.html#l00048">_RootNode</a>, <a class="el" href="a02640.html#NLMISC_1_1CHTimerv9">_RootTimer</a>, <a class="el" href="a05788.html#l00428">_Sons</a>, <a class="el" href="a05787.html#l00055">_WantStandardDeviation</a>, <a class="el" href="a05787.html#l00806">NLMISC::CHTimer::CStats::buildFromNode()</a>, <a class="el" href="a05787.html#l00812">NLMISC::CHTimer::CStats::buildFromNodes()</a>, <a class="el" href="a05646.html#l01013">depth</a>, <a class="el" href="a05943.html#l00323">NLMISC::CLog::displayNL()</a>, <a class="el" href="a05943.html#l00442">NLMISC::CLog::displayRawNL()</a>, <a class="el" href="a05788.html#l00133">NLMISC::CSimpleClock::getNumTicks()</a>, <a class="el" href="a05787.html#l00877">NLMISC::CHTimer::CStats::getStats()</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a05788.html#l00292">NLMISC::CHTimer::CNode::Owner</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05788.html#l00291">NLMISC::CHTimer::CNode::Sons</a>, <a class="el" href="a05788.html#l00301">NLMISC::CHTimer::CNode::SonsPreambule</a>, <a class="el" href="a05788.html#l00106">NLMISC::CSimpleClock::start()</a>, <a class="el" href="a05788.html#l00119">NLMISC::CSimpleClock::stop()</a>, <a class="el" href="a05788.html#l00282">TNodeVect</a>, <a class="el" href="a05788.html#l00338">NLMISC::CHTimer::CStats::TotalTime</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06420.html#l01064">NLSOUND::CSoundDriverDSound::displayBench()</a>.
+<p>
+<div class="fragment"><pre>00473 {
+00474 CSimpleClock benchClock;
+00475 benchClock.start();
+00476 log-&gt;displayNL(<span class="stringliteral">"HTIMER: ========================================================================="</span>);
+00477 log-&gt;displayRawNL(<span class="stringliteral">"HTIMER: Hierarchical display of bench"</span>);
+00478 <a class="code" href="a04199.html#a6">nlassert</a>(_BenchStartedOnce); <span class="comment">// should have done at least one bench</span>
+00479 <span class="keyword">typedef</span> std::map&lt;CHTimer *, TNodeVect&gt; TNodeMap;
+00480 TNodeMap nodeMap;
+00481 <a class="code" href="a02640.html#NLMISC_1_1CHTimery0">TNodeVect</a> nodeLeft;
+00482 nodeLeft.push_back(&amp;_RootNode);
+00484 <span class="keywordflow">while</span> (!nodeLeft.empty())
+00485 {
+00486 CNode *currNode = nodeLeft.back();
+00487 nodeMap[currNode-&gt;Owner].push_back(currNode);
+00488 nodeLeft.pop_back();
+00489 nodeLeft.insert(nodeLeft.end(), currNode-&gt;Sons.begin(), currNode-&gt;Sons.end());
+00490
+00491 }
+00492 log-&gt;displayRawNL(<span class="stringliteral">"HTIMER: %*s | total | local | visits | loc%%/ glb%% | min | max | mean"</span>, labelNumChar, <span class="stringliteral">""</span>);
+00493
+00495 CStats rootStats;
+00496 rootStats.buildFromNode(&amp;_RootNode, _MsPerTick);
+00497
+00499 CStats currNodeStats;
+00500 std::vector&lt;uint&gt; sonsIndex;
+00501 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a634">depth</a> = 0;
+00502 <a class="code" href="a02640.html#NLMISC_1_1CHTimera4">CHTimer</a> *currTimer = &amp;<a class="code" href="a02640.html#NLMISC_1_1CHTimerv9">_RootTimer</a>;
+00503 sonsIndex.push_back(0);
+00504 <span class="keywordtype">bool</span> displayStat = <span class="keyword">true</span>;
+00505 std::string resultName;
+00506 std::string resultStats;
+00507 <span class="keywordflow">while</span> (!sonsIndex.empty())
+00508 {
+00509 <span class="keywordflow">if</span> (displayStat)
+00510 {
+00511 resultName.resize(labelNumChar);
+00512 std::fill(resultName.begin(), resultName.end(), <span class="charliteral">'.'</span>);
+00513 <a class="code" href="a04558.html#a15">uint</a> startIndex = <a class="code" href="a04223.html#a634">depth</a> * indentationStep;
+00514 <a class="code" href="a04558.html#a15">uint</a> endIndex = <a class="code" href="a04061.html#a0">std::min</a>(startIndex + (<a class="code" href="a04558.html#a15">uint</a>)::strlen(currTimer-&gt;_Name), labelNumChar);
+00515 <span class="keywordflow">if</span> ((<a class="code" href="a04558.html#a14">sint</a>) (endIndex - startIndex) &gt;= 1)
+00516 {
+00517 std::copy(currTimer-&gt;_Name, currTimer-&gt;_Name + (endIndex - startIndex), resultName.begin() + startIndex);
+00518 }
+00519 <a class="code" href="a02640.html#NLMISC_1_1CHTimery0">TNodeVect</a> &amp;execNodes = nodeMap[currTimer];
+00520 <span class="keywordflow">if</span> (execNodes.size() &gt; 0)
+00521 {
+00522 currNodeStats.buildFromNodes(&amp;execNodes[0], execNodes.size(), <a class="code" href="a02640.html#NLMISC_1_1CHTimerv6">_MsPerTick</a>);
+00523 currNodeStats.getStats(resultStats, displayEx, rootStats.TotalTime, _WantStandardDeviation);
+00524 log-&gt;displayRawNL(<span class="stringliteral">"HTIMER: %s"</span>, (resultName + resultStats).c_str());
+00525 }
+00526 }
+00527 <span class="keywordflow">if</span> (sonsIndex.back() == currTimer-&gt;_Sons.size())
+00528 {
+00529 sonsIndex.pop_back();
+00530 currTimer = currTimer-&gt;_Parent;
+00531 displayStat = <span class="keyword">false</span>;
+00532 -- <a class="code" href="a04223.html#a634">depth</a>;
+00533 }
+00534 <span class="keywordflow">else</span>
+00535 {
+00536 currTimer = currTimer-&gt;_Sons[sonsIndex.back()];
+00537 ++ sonsIndex.back();
+00538 sonsIndex.push_back(0);
+00539 displayStat = <span class="keyword">true</span>;
+00540 ++ <a class="code" href="a04223.html#a634">depth</a>;
+00541 }
+00542 }
+00543 benchClock.stop();
+00544 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo9">SonsPreambule</a> += benchClock.getNumTicks();
+00545 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimere7" doxytag="NLMISC::CHTimer::displayHierarchicalByExecutionPath" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::displayHierarchicalByExecutionPath </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02813.html">CLog</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>log</em> = <a class="el" href="a05378.html#a12">InfoLog</a>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>displayEx</em> = true, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>labelNumChar</em> = 32, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>indentationStep</em> = 2</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [static]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Hierarchical display, no sorting is done <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>displayEx</em>&nbsp;</td><td>true to display more detailed infos. </td></tr>
+ <tr><td valign=top><em>labelNumChar</em>&nbsp;</td><td></td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00549">549</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+References <a class="el" href="a05787.html#l00556">displayHierarchicalByExecutionPathSorted()</a>, <a class="el" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw3">NoSort</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00550 {
+00551 <a class="code" href="a02640.html#NLMISC_1_1CHTimere8">displayHierarchicalByExecutionPathSorted</a>(log, NoSort, displayEx, labelNumChar, indentationStep);
+00552 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimere8" doxytag="NLMISC::CHTimer::displayHierarchicalByExecutionPathSorted" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::displayHierarchicalByExecutionPathSorted </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02813.html">CLog</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>log</em> = <a class="el" href="a05378.html#a12">InfoLog</a>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02640.html#NLMISC_1_1CHTimerw8">TSortCriterion</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>criterion</em> = TotalTime, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>displayEx</em> = true, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>labelNumChar</em> = 32, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>indentationStep</em> = 2</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [static]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Hierarchical display, sorting is done in branchs <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>displayEx</em>&nbsp;</td><td>true to display more detailed infos. </td></tr>
+ <tr><td valign=top><em>labelNumChar</em>&nbsp;</td><td></td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00556">556</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+References <a class="el" href="a05787.html#l00053">_BenchStartedOnce</a>, <a class="el" href="a05787.html#l00049">_CurrNode</a>, <a class="el" href="a05787.html#l00054">_MsPerTick</a>, <a class="el" href="a05788.html#l00424">_Name</a>, <a class="el" href="a05787.html#l00048">_RootNode</a>, <a class="el" href="a05787.html#l00055">_WantStandardDeviation</a>, <a class="el" href="a05787.html#l00806">NLMISC::CHTimer::CStats::buildFromNode()</a>, <a class="el" href="a05788.html#l00378">NLMISC::CHTimer::CStatSorter::Criterion</a>, <a class="el" href="a05943.html#l00442">NLMISC::CLog::displayRawNL()</a>, <a class="el" href="a05788.html#l00133">NLMISC::CSimpleClock::getNumTicks()</a>, <a class="el" href="a05787.html#l00877">NLMISC::CHTimer::CStats::getStats()</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw3">NoSort</a>, <a class="el" href="a05788.html#l00292">NLMISC::CHTimer::CNode::Owner</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05788.html#l00291">NLMISC::CHTimer::CNode::Sons</a>, <a class="el" href="a05788.html#l00301">NLMISC::CHTimer::CNode::SonsPreambule</a>, <a class="el" href="a05788.html#l00106">NLMISC::CSimpleClock::start()</a>, <a class="el" href="a05788.html#l00119">NLMISC::CSimpleClock::stop()</a>, <a class="el" href="a05788.html#l00338">NLMISC::CHTimer::CStats::TotalTime</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a06420.html#l01064">NLSOUND::CSoundDriverDSound::displayBench()</a>, and <a class="el" href="a05787.html#l00549">displayHierarchicalByExecutionPath()</a>.
+<p>
+<div class="fragment"><pre>00557 {
+00558
+00559 CSimpleClock benchClock;
+00560 benchClock.start();
+00561 <a class="code" href="a04199.html#a6">nlassert</a>(_BenchStartedOnce); <span class="comment">// should have done at least one bench</span>
+00562
+00563 <span class="comment">// get root total time.</span>
+00564 CStats rootStats;
+00565 rootStats.buildFromNode(&amp;_RootNode, _MsPerTick);
+00566
+00567
+00568 <span class="comment">// display header.</span>
+00569 CLog::TDisplayInfo dummyDspInfo;
+00570 log-&gt;displayRawNL(<span class="stringliteral">"HTIMER: ========================================================================="</span>);
+00571 log-&gt;displayRawNL(<span class="stringliteral">"HTIMER: Hierarchical display of bench by execution path"</span>);
+00572 log-&gt;displayRawNL(<span class="stringliteral">"HTIMER: %*s | total | local | visits | loc%%/ glb%% | min | max | mean"</span>, labelNumChar, <span class="stringliteral">""</span>);
+00573
+00574
+00575 <span class="comment">// use list because vector of vector is bad.</span>
+00576 std::list&lt; CExamStackEntry &gt; examStack;
+00577
+00578 <span class="comment">// Add the root to the stack.</span>
+00579 examStack.push_back( CExamStackEntry( &amp;_RootNode ) );
+00580 CStats currNodeStats;
+00581 std::string resultName;
+00582 std::string resultStats;
+00583
+00584 <span class="keywordflow">while</span> (!examStack.empty())
+00585 {
+00586 CNode *node = examStack.back().Node;
+00587 std::vector&lt;CNode*&gt; &amp;children= examStack.back().Children;
+00588 <a class="code" href="a04558.html#a15">uint</a> child = examStack.back().CurrentChild;
+00589
+00590 <span class="comment">// If child 0, then must first build children info and display me.</span>
+00591 <span class="keywordflow">if</span> (child == 0)
+00592 {
+00593 <span class="comment">// Build Sons Infos.</span>
+00594 <span class="comment">// ==============</span>
+00595
+00596 <span class="comment">// resize array</span>
+00597 children.resize(node-&gt;Sons.size());
+00598
+00599 <span class="comment">// If no sort, easy.</span>
+00600 <span class="keywordflow">if</span>(criterion == <a class="code" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw3">NoSort</a>)
+00601 {
+00602 children= node-&gt;Sons;
+00603 }
+00604 <span class="comment">// else, Sort them with criterion.</span>
+00605 <span class="keywordflow">else</span>
+00606 {
+00607 std::vector&lt;CNodeStat&gt; stats;
+00608 std::vector&lt;CNodeStat *&gt; ptrStats;
+00609 stats.resize(children.size());
+00610 ptrStats.resize(children.size());
+00611
+00612 <span class="comment">// build stats.</span>
+00613 <a class="code" href="a04558.html#a15">uint</a> i;
+00614 <span class="keywordflow">for</span>(i=0; i&lt;children.size(); i++)
+00615 {
+00616 CNode *childNode= node-&gt;Sons[i];
+00617 stats[i].buildFromNode(childNode, _MsPerTick);
+00618 stats[i].Node = childNode;
+00619 ptrStats[i]= &amp;stats[i];
+00620 }
+00621
+00622 <span class="comment">// sort.</span>
+00623 CStatSorter sorter;
+00624 sorter.Criterion= criterion;
+00625 std::sort(ptrStats.begin(), ptrStats.end(), sorter);
+00626
+00627 <span class="comment">// fill children.</span>
+00628 <span class="keywordflow">for</span>(i=0; i&lt;children.size(); i++)
+00629 {
+00630 children[i]= ptrStats[i]-&gt;Node;
+00631 }
+00632 }
+00633
+00634
+00635 <span class="comment">// Display our infos</span>
+00636 <span class="comment">// ==============</span>
+00637 <span class="comment">// build the indented node name.</span>
+00638 resultName.resize(labelNumChar);
+00639 std::fill(resultName.begin(), resultName.end(), <span class="charliteral">'.'</span>);
+00640 <a class="code" href="a04558.html#a15">uint</a> startIndex = (examStack.size()-1) * indentationStep;
+00641 <a class="code" href="a04558.html#a15">uint</a> endIndex = <a class="code" href="a04061.html#a0">std::min</a>(startIndex + (<a class="code" href="a04558.html#a15">uint</a>)::strlen(node-&gt;Owner-&gt;_Name), labelNumChar);
+00642 <span class="keywordflow">if</span> ((<a class="code" href="a04558.html#a14">sint</a>) (endIndex - startIndex) &gt;= 1)
+00643 {
+00644 std::copy(node-&gt;Owner-&gt;_Name, node-&gt;Owner-&gt;_Name + (endIndex - startIndex), resultName.begin() + startIndex);
+00645 }
+00646
+00647 <span class="comment">// build the stats string.</span>
+00648 currNodeStats.buildFromNode(node, _MsPerTick);
+00649 currNodeStats.getStats(resultStats, displayEx, rootStats.TotalTime, _WantStandardDeviation);
+00650
+00651 <span class="comment">// display</span>
+00652 log-&gt;displayRawNL(<span class="stringliteral">"HTIMER: %s"</span>, (resultName + resultStats).c_str());
+00653 }
+00654
+00655 <span class="comment">// End of sons?? stop.</span>
+00656 <span class="keywordflow">if</span> (child &gt;= children.size())
+00657 {
+00658 examStack.pop_back();
+00659 <span class="keywordflow">continue</span>;
+00660 }
+00661
+00662 <span class="comment">// next son.</span>
+00663 ++(examStack.back().CurrentChild);
+00664
+00665 <span class="comment">// process the current son.</span>
+00666 examStack.push_back( CExamStackEntry( children[child] ) );
+00667 }
+00668
+00669 <span class="comment">//</span>
+00670 benchClock.stop();
+00671 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo9">SonsPreambule</a> += benchClock.getNumTicks();
+00672 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimere9" doxytag="NLMISC::CHTimer::displaySummary" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::displaySummary </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top"><a class="el" href="a02813.html">CLog</a> *&nbsp;</td>
+ <td class="mdname" nowrap> <em>log</em> = <a class="el" href="a05378.html#a12">InfoLog</a>, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a02640.html#NLMISC_1_1CHTimerw8">TSortCriterion</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>criterion</em> = TotalTime, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>displayEx</em> = true, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>labelNumChar</em> = 32, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>indentationStep</em> = 2, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap><a class="el" href="a04558.html#a15">uint</a>&nbsp;</td>
+ <td class="mdname" nowrap> <em>maxDepth</em> = 3</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [static]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Hierarchical display, sorting is done in branchs <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>displayEx</em>&nbsp;</td><td>true to display more detailed infos. </td></tr>
+ <tr><td valign=top><em>labelNumChar</em>&nbsp;</td><td></td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00675">675</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+References <a class="el" href="a05787.html#l00053">_BenchStartedOnce</a>, <a class="el" href="a05787.html#l00049">_CurrNode</a>, <a class="el" href="a05787.html#l00054">_MsPerTick</a>, <a class="el" href="a05788.html#l00424">_Name</a>, <a class="el" href="a05787.html#l00048">_RootNode</a>, <a class="el" href="a05787.html#l00055">_WantStandardDeviation</a>, <a class="el" href="a05787.html#l00806">NLMISC::CHTimer::CStats::buildFromNode()</a>, <a class="el" href="a05788.html#l00378">NLMISC::CHTimer::CStatSorter::Criterion</a>, <a class="el" href="a05646.html#l01013">depth</a>, <a class="el" href="a05943.html#l00442">NLMISC::CLog::displayRawNL()</a>, <a class="el" href="a05788.html#l00133">NLMISC::CSimpleClock::getNumTicks()</a>, <a class="el" href="a05787.html#l00877">NLMISC::CHTimer::CStats::getStats()</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, <a class="el" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw3">NoSort</a>, <a class="el" href="a05788.html#l00292">NLMISC::CHTimer::CNode::Owner</a>, <a class="el" href="a05981.html#l00104">sint</a>, <a class="el" href="a05788.html#l00291">NLMISC::CHTimer::CNode::Sons</a>, <a class="el" href="a05788.html#l00301">NLMISC::CHTimer::CNode::SonsPreambule</a>, <a class="el" href="a05788.html#l00106">NLMISC::CSimpleClock::start()</a>, <a class="el" href="a05788.html#l00119">NLMISC::CSimpleClock::stop()</a>, <a class="el" href="a05788.html#l00338">NLMISC::CHTimer::CStats::TotalTime</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+<div class="fragment"><pre>00676 {
+00677
+00678 CSimpleClock benchClock;
+00679 benchClock.start();
+00680 <a class="code" href="a04199.html#a6">nlassert</a>(_BenchStartedOnce); <span class="comment">// should have done at least one bench</span>
+00681
+00682 <span class="comment">// get root total time.</span>
+00683 CStats rootStats;
+00684 rootStats.buildFromNode(&amp;_RootNode, _MsPerTick);
+00685
+00686
+00687 <span class="comment">// display header.</span>
+00688 CLog::TDisplayInfo dummyDspInfo;
+00689 log-&gt;displayRawNL(<span class="stringliteral">"HTIMER: ========================================================================="</span>);
+00690 log-&gt;displayRawNL(<span class="stringliteral">"HTIMER: Hierarchical display of bench by execution path"</span>);
+00691 log-&gt;displayRawNL(<span class="stringliteral">"HTIMER: %*s | total | local | visits | loc%%/ glb%% | min | max | mean"</span>, labelNumChar, <span class="stringliteral">""</span>);
+00692
+00693
+00694 <span class="comment">// use list because vector of vector is bad.</span>
+00695 std::list&lt; CExamStackEntry &gt; examStack;
+00696
+00697 <span class="comment">// Add the root to the stack.</span>
+00698 examStack.push_back( CExamStackEntry( &amp;_RootNode ) );
+00699 CStats currNodeStats;
+00700 std::string resultName;
+00701 std::string resultStats;
+00702
+00703 <span class="keywordflow">while</span> (!examStack.empty())
+00704 {
+00705 CNode *node = examStack.back().Node;
+00706 std::vector&lt;CNode*&gt; &amp;children= examStack.back().Children;
+00707 <a class="code" href="a04558.html#a15">uint</a> child = examStack.back().CurrentChild;
+00708 <a class="code" href="a04558.html#a15">uint</a> <a class="code" href="a04223.html#a634">depth</a> = examStack.back().Depth;
+00709
+00710 <span class="comment">// If child 0, then must first build children info and display me.</span>
+00711 <span class="keywordflow">if</span> (child == 0)
+00712 {
+00713 <span class="comment">// Build Sons Infos.</span>
+00714 <span class="comment">// ==============</span>
+00715
+00716 <span class="comment">// resize array</span>
+00717 children.resize(node-&gt;Sons.size());
+00718
+00719 <span class="comment">// If no sort, easy.</span>
+00720 <span class="keywordflow">if</span>(criterion == <a class="code" href="a02640.html#NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw3">NoSort</a>)
+00721 {
+00722 children= node-&gt;Sons;
+00723 }
+00724 <span class="comment">// else, Sort them with criterion.</span>
+00725 <span class="keywordflow">else</span>
+00726 {
+00727 std::vector&lt;CNodeStat&gt; stats;
+00728 std::vector&lt;CNodeStat *&gt; ptrStats;
+00729 stats.resize(children.size());
+00730 ptrStats.resize(children.size());
+00731
+00732 <span class="comment">// build stats.</span>
+00733 <a class="code" href="a04558.html#a15">uint</a> i;
+00734 <span class="keywordflow">for</span>(i=0; i&lt;children.size(); i++)
+00735 {
+00736 CNode *childNode= node-&gt;Sons[i];
+00737 stats[i].buildFromNode(childNode, _MsPerTick);
+00738 stats[i].Node = childNode;
+00739 ptrStats[i]= &amp;stats[i];
+00740 }
+00741
+00742 <span class="comment">// sort.</span>
+00743 CStatSorter sorter;
+00744 sorter.Criterion= criterion;
+00745 std::sort(ptrStats.begin(), ptrStats.end(), sorter);
+00746
+00747 <span class="comment">// fill children.</span>
+00748 <span class="keywordflow">for</span>(i=0; i&lt;children.size(); i++)
+00749 {
+00750 children[i]= ptrStats[i]-&gt;Node;
+00751 }
+00752 }
+00753
+00754
+00755 <span class="comment">// Display our infos</span>
+00756 <span class="comment">// ==============</span>
+00757 <span class="comment">// build the indented node name.</span>
+00758 resultName.resize(labelNumChar);
+00759 std::fill(resultName.begin(), resultName.end(), <span class="charliteral">'.'</span>);
+00760 <a class="code" href="a04558.html#a15">uint</a> startIndex = (examStack.size()-1) * indentationStep;
+00761 <a class="code" href="a04558.html#a15">uint</a> endIndex = <a class="code" href="a04061.html#a0">std::min</a>(startIndex + (<a class="code" href="a04558.html#a15">uint</a>)::strlen(node-&gt;Owner-&gt;_Name), labelNumChar);
+00762 <span class="keywordflow">if</span> ((<a class="code" href="a04558.html#a14">sint</a>) (endIndex - startIndex) &gt;= 1)
+00763 {
+00764 std::copy(node-&gt;Owner-&gt;_Name, node-&gt;Owner-&gt;_Name + (endIndex - startIndex), resultName.begin() + startIndex);
+00765 }
+00766
+00767 <span class="comment">// build the stats string.</span>
+00768 currNodeStats.buildFromNode(node, _MsPerTick);
+00769 currNodeStats.getStats(resultStats, displayEx, rootStats.TotalTime, _WantStandardDeviation);
+00770
+00771 <span class="comment">// display</span>
+00772 log-&gt;displayRawNL(<span class="stringliteral">"HTIMER: %s"</span>, (resultName + resultStats).c_str());
+00773 }
+00774
+00775 <span class="comment">// End of sons?? stop.</span>
+00776 <span class="keywordflow">if</span> (child &gt;= children.size())
+00777 {
+00778 examStack.pop_back();
+00779 <span class="keywordflow">continue</span>;
+00780 }
+00781
+00782 <span class="comment">// next son.</span>
+00783 ++(examStack.back().CurrentChild);
+00784
+00785 <span class="comment">// process the current son.</span>
+00786 <span class="keywordflow">if</span> (<a class="code" href="a04223.html#a634">depth</a>+1 &lt; maxDepth)
+00787 examStack.push_back( CExamStackEntry( children[child], depth+1 ) );
+00788 }
+00789
+00790 <span class="comment">//</span>
+00791 benchClock.stop();
+00792 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo9">SonsPreambule</a> += benchClock.getNumTicks();
+00793 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimerd0" doxytag="NLMISC::CHTimer::doAfter" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::doAfter </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>displayAfter</em> = false </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00957">957</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+References <a class="el" href="a05787.html#l00057">_AfterStopEstimateTime</a>, <a class="el" href="a05787.html#l00049">_CurrNode</a>, <a class="el" href="a05787.html#l00056">_CurrTimer</a>, <a class="el" href="a05787.html#l00054">_MsPerTick</a>, <a class="el" href="a05787.html#l00050">_PreambuleClock</a>, <a class="el" href="a05787.html#l00055">_WantStandardDeviation</a>, <a class="el" href="a05788.html#l00302">NLMISC::CHTimer::CNode::Clock</a>, <a class="el" href="a05788.html#l00133">NLMISC::CSimpleClock::getNumTicks()</a>, <a class="el" href="a05788.html#l00294">NLMISC::CHTimer::CNode::LastSonsTotalTime</a>, <a class="el" href="a05788.html#l00298">NLMISC::CHTimer::CNode::MaxTime</a>, <a class="el" href="a05788.html#l00296">NLMISC::CHTimer::CNode::Measures</a>, <a class="el" href="a05484.html#l00038">min</a>, <a class="el" href="a05788.html#l00297">NLMISC::CHTimer::CNode::MinTime</a>, <a class="el" href="a05622.html#l00111">nlinfo</a>, <a class="el" href="a05788.html#l00299">NLMISC::CHTimer::CNode::NumVisits</a>, <a class="el" href="a05788.html#l00290">NLMISC::CHTimer::CNode::Parent</a>, <a class="el" href="a05981.html#l00101">sint64</a>, <a class="el" href="a05788.html#l00301">NLMISC::CHTimer::CNode::SonsPreambule</a>, <a class="el" href="a05788.html#l00295">NLMISC::CHTimer::CNode::SonsTotalTime</a>, <a class="el" href="a05788.html#l00106">NLMISC::CSimpleClock::start()</a>, <a class="el" href="a05788.html#l00119">NLMISC::CSimpleClock::stop()</a>, <a class="el" href="a05788.html#l00293">NLMISC::CHTimer::CNode::TotalTime</a>, and <a class="el" href="a05981.html#l00102">uint64</a>.
+<p>
+Referenced by <a class="el" href="a05788.html#l00211">after()</a>.
+<p>
+<div class="fragment"><pre>00958 {
+00959 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo0">Clock</a>.stop();
+00960 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv7">_PreambuleClock</a>.start();
+00961 <span class="comment">/* Remove my Son preambule, and remove only ONE StartStop</span>
+00962 <span class="comment"> It is because between the start and the end, only ONE rdtsc time is counted:</span>
+00963 <span class="comment"> */</span>
+00964 <a class="code" href="a04558.html#a12">sint64</a> numTicks = <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo0">Clock</a>.getNumTicks() - <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo9">SonsPreambule</a> - (CSimpleClock::getStartStopNumTicks());
+00965 <span class="comment">// Case where the SonPreambule is overestimated, </span>
+00966 numTicks= std::max((<a class="code" href="a04558.html#a12">sint64</a>)0, numTicks);
+00967 <span class="comment">// In case where the SonPreambule is overestimated, the TotalTime must not be &lt; of the SonTime</span>
+00968 <span class="keywordflow">if</span>(<a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo11">TotalTime</a> + numTicks &lt; <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo10">SonsTotalTime</a>)
+00969 numTicks= <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo10">SonsTotalTime</a> - <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo11">TotalTime</a>;
+00970
+00971 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo11">TotalTime</a> += numTicks;
+00972 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo4">MinTime</a> = <a class="code" href="a04061.html#a0">std::min</a>(<a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo4">MinTime</a>, (<a class="code" href="a04558.html#a13">uint64</a>)numTicks);
+00973 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo2">MaxTime</a> = std::max(<a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo2">MaxTime</a>, (<a class="code" href="a04558.html#a13">uint64</a>)numTicks);
+00974 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo1">LastSonsTotalTime</a> = <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo10">SonsTotalTime</a>;
+00975
+00976 <span class="keywordflow">if</span> (displayAfter)
+00977 {
+00978 <a class="code" href="a04199.html#a1">nlinfo</a>(<span class="stringliteral">"HTIMER: %s %.3fms loop number %d"</span>, _Name, numTicks * _MsPerTick, <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo5">NumVisits</a>);
+00979 }
+00980 <span class="comment">//</span>
+00981 <span class="keywordflow">if</span> (<a class="code" href="a02640.html#NLMISC_1_1CHTimerv10">_WantStandardDeviation</a>)
+00982 {
+00983 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo3">Measures</a>.push_back(numTicks * _MsPerTick);
+00984 }
+00985 <span class="comment">//</span>
+00986 <span class="keywordflow">if</span> (<a class="code" href="a02640.html#NLMISC_1_1CHTimerr2">_Parent</a>)
+00987 {
+00988 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv5">_CurrTimer</a> = <a class="code" href="a02640.html#NLMISC_1_1CHTimerr2">_Parent</a>;
+00989 }
+00990 <span class="comment">//</span>
+00991 <span class="keywordflow">if</span> (<a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo7">Parent</a>)
+00992 {
+00993 CNode *curNode= <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>;
+00994 CNode *parent= _CurrNode-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo7">Parent</a>;
+00995 parent-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo10">SonsTotalTime</a> += numTicks;
+00996 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv7">_PreambuleClock</a>.stop();
+00997 <span class="comment">/*</span>
+00998 <span class="comment"> The SonPreambule of my parent is </span>
+00999 <span class="comment"> + my BeforePreambule (counted in doBefore)</span>
+01000 <span class="comment"> + my Afterpreambule (see below)</span>
+01001 <span class="comment"> + my Sons Preambule </span>
+01002 <span class="comment"> + some constant time due to the Start/Stop of the _CurrNode-&gt;Clock, the 2* Start/Stop</span>
+01003 <span class="comment"> of the PreabmuleClock, the function call time of doBefore and doAfter</span>
+01004 <span class="comment"> */</span>
+01005 parent-&gt;SonsPreambule += <a class="code" href="a02640.html#NLMISC_1_1CHTimerv7">_PreambuleClock</a>.getNumTicks() + curNode-&gt;SonsPreambule + <a class="code" href="a02640.html#NLMISC_1_1CHTimerv0">_AfterStopEstimateTime</a>;
+01006 <span class="comment">// walk to parent</span>
+01007 _CurrNode= parent;
+01008 }
+01009 <span class="keywordflow">else</span>
+01010 {
+01011 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv7">_PreambuleClock</a>.stop();
+01012 }
+01013 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimerd1" doxytag="NLMISC::CHTimer::doBefore" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::doBefore </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00935">935</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+References <a class="el" href="a05787.html#l00049">_CurrNode</a>, <a class="el" href="a05787.html#l00056">_CurrTimer</a>, <a class="el" href="a05787.html#l00050">_PreambuleClock</a>, <a class="el" href="a05788.html#l00428">_Sons</a>, <a class="el" href="a05788.html#l00302">NLMISC::CHTimer::CNode::Clock</a>, <a class="el" href="a05788.html#l00133">NLMISC::CSimpleClock::getNumTicks()</a>, <a class="el" href="a05788.html#l00299">NLMISC::CHTimer::CNode::NumVisits</a>, <a class="el" href="a05788.html#l00290">NLMISC::CHTimer::CNode::Parent</a>, <a class="el" href="a05788.html#l00301">NLMISC::CHTimer::CNode::SonsPreambule</a>, <a class="el" href="a05788.html#l00106">NLMISC::CSimpleClock::start()</a>, <a class="el" href="a05788.html#l00119">NLMISC::CSimpleClock::stop()</a>, and <a class="el" href="a05787.html#l00169">walkTreeToCurrent()</a>.
+<p>
+Referenced by <a class="el" href="a05788.html#l00205">before()</a>.
+<p>
+<div class="fragment"><pre>00936 {
+00937 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv7">_PreambuleClock</a>.start();
+00938 <a class="code" href="a02640.html#NLMISC_1_1CHTimerd2">walkTreeToCurrent</a>();
+00939 ++ <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo5">NumVisits</a>;
+00940 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo9">SonsPreambule</a> = 0;
+00941 <span class="keywordflow">if</span> (!<a class="code" href="a02640.html#NLMISC_1_1CHTimerr2">_Parent</a> &amp;&amp; <a class="code" href="a02640.html#NLMISC_1_1CHTimerv5">_CurrTimer</a> != <span class="keyword">this</span>)
+00942 {
+00943 <a class="code" href="a02640.html#NLMISC_1_1CHTimerr2">_Parent</a> = <a class="code" href="a02640.html#NLMISC_1_1CHTimerv5">_CurrTimer</a>;
+00944 <span class="comment">// register as a son of the parent</span>
+00945 <a class="code" href="a02640.html#NLMISC_1_1CHTimerr2">_Parent</a>-&gt;_Sons.push_back(<span class="keyword">this</span>);
+00946 }
+00947 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv5">_CurrTimer</a> = <span class="keyword">this</span>;
+00948 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv7">_PreambuleClock</a>.stop();
+00949 <span class="keywordflow">if</span> (<a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo7">Parent</a>)
+00950 {
+00951 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo7">Parent</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo9">SonsPreambule</a> += <a class="code" href="a02640.html#NLMISC_1_1CHTimerv7">_PreambuleClock</a>.getNumTicks();
+00952 }
+00953 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo0">Clock</a>.start();
+00954 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimere10" doxytag="NLMISC::CHTimer::endBench" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::endBench </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [static]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Ends a bench session.
+<p>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00271">271</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+References <a class="el" href="a05787.html#l00052">_Benching</a>, <a class="el" href="a05787.html#l00049">_CurrNode</a>, <a class="el" href="a05787.html#l00048">_RootNode</a>, <a class="el" href="a02640.html#NLMISC_1_1CHTimerv9">_RootTimer</a>, <a class="el" href="a05788.html#l00211">after()</a>, and <a class="el" href="a05622.html#l00135">nlwarning</a>.
+<p>
+Referenced by <a class="el" href="a06420.html#l01060">NLSOUND::CSoundDriverDSound::endBench()</a>.
+<p>
+<div class="fragment"><pre>00272 {
+00273 <span class="keywordflow">if</span> (!<a class="code" href="a02640.html#NLMISC_1_1CHTimerv2">_Benching</a>)
+00274 <span class="keywordflow">return</span>;
+00275
+00276 <span class="keywordflow">if</span> (<a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a> == &amp;<a class="code" href="a02640.html#NLMISC_1_1CHTimerv8">_RootNode</a>)
+00277 {
+00278 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv9">_RootTimer</a>.after();
+00279 }
+00280 <span class="keywordflow">else</span>
+00281 {
+00282 <a class="code" href="a04199.html#a2">nlwarning</a>(<span class="stringliteral">"HTIMER: Stopping the bench inside a benched functions !"</span>);
+00283 }
+00284 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv2">_Benching</a> = <span class="keyword">false</span>;
+00285 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimerh0" doxytag="NLMISC::CHTimer::estimateAfterStopTime" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::estimateAfterStopTime </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [static, private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00194">194</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+References <a class="el" href="a05787.html#l00057">_AfterStopEstimateTime</a>, <a class="el" href="a05787.html#l00058">_AfterStopEstimateTimeDone</a>, <a class="el" href="a05787.html#l00052">_Benching</a>, <a class="el" href="a05787.html#l00053">_BenchStartedOnce</a>, <a class="el" href="a05787.html#l00054">_MsPerTick</a>, <a class="el" href="a05787.html#l00048">_RootNode</a>, <a class="el" href="a02640.html#NLMISC_1_1CHTimerv9">_RootTimer</a>, <a class="el" href="a05787.html#l00055">_WantStandardDeviation</a>, <a class="el" href="a05788.html#l00211">after()</a>, <a class="el" href="a05788.html#l00205">before()</a>, <a class="el" href="a05787.html#l00796">clear()</a>, <a class="el" href="a05788.html#l00292">NLMISC::CHTimer::CNode::Owner</a>, <a class="el" href="a05788.html#l00295">NLMISC::CHTimer::CNode::SonsTotalTime</a>, <a class="el" href="a05788.html#l00293">NLMISC::CHTimer::CNode::TotalTime</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05787.html#l00241">startBench()</a>.
+<p>
+<div class="fragment"><pre>00195 {
+00196 <span class="keywordflow">if</span>(<a class="code" href="a02640.html#NLMISC_1_1CHTimerv1">_AfterStopEstimateTimeDone</a>)
+00197 <span class="keywordflow">return</span>;
+00198 <span class="keyword">const</span> <a class="code" href="a04558.html#a15">uint</a> numSamples = 1000;
+00199
+00200 <span class="comment">// Do as in startBench, reset and init</span>
+00201 <a class="code" href="a02640.html#NLMISC_1_1CHTimere3">clear</a>();
+00202
+00203 {
+00204 <span class="preprocessor">#ifdef NL_CPU_INTEL</span>
+00205 <span class="preprocessor"></span> <span class="keywordtype">double</span> freq = (<span class="keywordtype">double</span>) CSystemInfo::getProcessorFrequency(<span class="keyword">false</span>);
+00206 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv6">_MsPerTick</a> = 1000 / (<span class="keywordtype">double</span>) freq;
+00207 <span class="preprocessor">#else</span>
+00208 <span class="preprocessor"></span> <a class="code" href="a02640.html#NLMISC_1_1CHTimerv6">_MsPerTick</a> = CTime::ticksToSecond(1000);
+00209 <span class="preprocessor">#endif</span>
+00210 <span class="preprocessor"></span> CSimpleClock::init();
+00211 }
+00212
+00213 <span class="comment">// start</span>
+00214 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv2">_Benching</a> = <span class="keyword">true</span>;
+00215 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv3">_BenchStartedOnce</a> = <span class="keyword">true</span>;
+00216 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv8">_RootNode</a>.<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo6">Owner</a> = &amp;<a class="code" href="a02640.html#NLMISC_1_1CHTimerv9">_RootTimer</a>;
+00217 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv10">_WantStandardDeviation</a> = <span class="keyword">false</span>;
+00218 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv9">_RootTimer</a>.before();
+00219
+00220 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> i=0;i&lt;numSamples;i++)
+00221 {
+00222 <span class="keyword">static</span> <a class="code" href="a02640.html">NLMISC::CHTimer</a> estimateSampleTimer(<span class="stringliteral">"sampleTimer"</span>);
+00223 estimateSampleTimer.<a class="code" href="a02640.html#NLMISC_1_1CHTimera2">before</a>();
+00224 estimateSampleTimer.<a class="code" href="a02640.html#NLMISC_1_1CHTimera1">after</a>();
+00225 }
+00226
+00227 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv9">_RootTimer</a>.after();
+00228 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv2">_Benching</a> = <span class="keyword">false</span>;
+00229
+00230 <span class="comment">// Then the After Stop time is the rootTimer time / numSamples</span>
+00231 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv0">_AfterStopEstimateTime</a>= (<a class="code" href="a02640.html#NLMISC_1_1CHTimerv8">_RootNode</a>.<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo11">TotalTime</a>-<a class="code" href="a02640.html#NLMISC_1_1CHTimerv8">_RootNode</a>.<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo10">SonsTotalTime</a>) / numSamples;
+00232
+00233 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv1">_AfterStopEstimateTimeDone</a>= <span class="keyword">true</span>;
+00234
+00235 <span class="comment">// must re-clear.</span>
+00236 <a class="code" href="a02640.html#NLMISC_1_1CHTimere3">clear</a>();
+00237 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimera5" doxytag="NLMISC::CHTimer::getName" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const char* NLMISC::CHTimer::getName </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">void&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap> const<code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05788.html#l00222">222</a> of file <a class="el" href="a05788.html">hierarchical_timer.h</a>.
+<p>
+Referenced by <a class="el" href="a05787.html#l00142">NLMISC::CHTimer::CNode::getPath()</a>.
+<p>
+<div class="fragment"><pre>00222 { <span class="keywordflow">return</span> <a class="code" href="a02640.html#NLMISC_1_1CHTimerr1">_Name</a>; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimera6" doxytag="NLMISC::CHTimer::setName" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::setName </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">const char *&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> <em>name</em> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [inline]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05788.html#l00223">223</a> of file <a class="el" href="a05788.html">hierarchical_timer.h</a>.
+<p>
+<div class="fragment"><pre>00223 { <a class="code" href="a02640.html#NLMISC_1_1CHTimerr1">_Name</a> = name; }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimere11" doxytag="NLMISC::CHTimer::startBench" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::startBench </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="md" nowrap valign="top">bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>wantStandardDeviation</em> = false, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>quick</em> = false, </td>
+ </tr>
+ <tr>
+ <td class="md" nowrap align="right"></td>
+ <td></td>
+ <td class="md" nowrap>bool&nbsp;</td>
+ <td class="mdname" nowrap> <em>reset</em> = true</td>
+ </tr>
+ <tr>
+ <td></td>
+ <td class="md">)&nbsp;</td>
+ <td class="md" colspan="2"><code> [static]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+Starts a bench session <dl compact><dt><b>Parameters:</b></dt><dd>
+ <table border="0" cellspacing="2" cellpadding="0">
+ <tr><td valign=top><em>wantStandardDeviation</em>&nbsp;</td><td>When true, benchs will report the standard deviation of values. This require more memory, however, because each samples must be kept. </td></tr>
+ <tr><td valign=top><em>quick</em>&nbsp;</td><td>if true, quick compute the frequency of the processor</td></tr>
+ </table>
+</dl>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00241">241</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+References <a class="el" href="a05787.html#l00052">_Benching</a>, <a class="el" href="a05787.html#l00053">_BenchStartedOnce</a>, <a class="el" href="a05787.html#l00054">_MsPerTick</a>, <a class="el" href="a05787.html#l00048">_RootNode</a>, <a class="el" href="a02640.html#NLMISC_1_1CHTimerv9">_RootTimer</a>, <a class="el" href="a05787.html#l00055">_WantStandardDeviation</a>, <a class="el" href="a05788.html#l00205">before()</a>, <a class="el" href="a05787.html#l00796">clear()</a>, <a class="el" href="a05787.html#l00194">estimateAfterStopTime()</a>, <a class="el" href="a05622.html#l00290">nlassert</a>, and <a class="el" href="a05788.html#l00292">NLMISC::CHTimer::CNode::Owner</a>.
+<p>
+Referenced by <a class="el" href="a05788.html#l00231">bench()</a>, and <a class="el" href="a06420.html#l01056">NLSOUND::CSoundDriverDSound::startBench()</a>.
+<p>
+<div class="fragment"><pre>00242 {
+00243 <a class="code" href="a04199.html#a6">nlassert</a>(!_Benching);
+00244
+00245 <span class="comment">// if not done, estimate the AfterStopTime</span>
+00246 <a class="code" href="a02640.html#NLMISC_1_1CHTimerh0">estimateAfterStopTime</a>();
+00247
+00248 <span class="keywordflow">if</span>(reset)
+00249 <a class="code" href="a02640.html#NLMISC_1_1CHTimere3">clear</a>();
+00250
+00251 <span class="keywordflow">if</span>(reset)
+00252 {
+00253 <span class="preprocessor">#ifdef NL_CPU_INTEL</span>
+00254 <span class="preprocessor"></span> <span class="keywordtype">double</span> freq = (<span class="keywordtype">double</span>) CSystemInfo::getProcessorFrequency(quick);
+00255 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv6">_MsPerTick</a> = 1000 / (<span class="keywordtype">double</span>) freq;
+00256 <span class="preprocessor">#else</span>
+00257 <span class="preprocessor"></span> <a class="code" href="a02640.html#NLMISC_1_1CHTimerv6">_MsPerTick</a> = CTime::ticksToSecond(1000);
+00258 <span class="preprocessor">#endif</span>
+00259 <span class="preprocessor"></span> CSimpleClock::init();
+00260 }
+00261
+00262 <span class="comment">// Launch</span>
+00263 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv2">_Benching</a> = <span class="keyword">true</span>;
+00264 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv3">_BenchStartedOnce</a> = <span class="keyword">true</span>;
+00265 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv8">_RootNode</a>.<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo6">Owner</a> = &amp;<a class="code" href="a02640.html#NLMISC_1_1CHTimerv9">_RootTimer</a>;
+00266 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv10">_WantStandardDeviation</a> = wantStandardDeviation;
+00267 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv9">_RootTimer</a>.before();
+00268 }
+</pre></div> </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimerd2" doxytag="NLMISC::CHTimer::walkTreeToCurrent" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> void NLMISC::CHTimer::walkTreeToCurrent </td>
+ <td class="md" valign="top">(&nbsp;</td>
+ <td class="mdname1" valign="top" nowrap> </td>
+ <td class="md" valign="top">&nbsp;)&nbsp;</td>
+ <td class="md" nowrap><code> [private]</code></td>
+ </tr>
+
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00169">169</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+References <a class="el" href="a05787.html#l00049">_CurrNode</a>, <a class="el" href="a05788.html#l00430">_IsRoot</a>, <a class="el" href="a05788.html#l00291">NLMISC::CHTimer::CNode::Sons</a>, and <a class="el" href="a05981.html#l00105">uint</a>.
+<p>
+Referenced by <a class="el" href="a05787.html#l00935">doBefore()</a>.
+<p>
+<div class="fragment"><pre>00170 {
+00171 <span class="keywordflow">if</span> (<a class="code" href="a02640.html#NLMISC_1_1CHTimerr0">_IsRoot</a>) <span class="keywordflow">return</span>;
+00172 <span class="keywordtype">bool</span> found = <span class="keyword">false</span>;
+00173 <span class="keywordflow">for</span>(<a class="code" href="a04558.html#a15">uint</a> k = 0; k &lt; <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo8">Sons</a>.size(); ++k)
+00174 {
+00175 <span class="keywordflow">if</span> (<a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo8">Sons</a>[k]-&gt;Owner == <span class="keyword">this</span>)
+00176 {
+00177 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a> = <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo8">Sons</a>[k];
+00178 found = <span class="keyword">true</span>;
+00179 <span class="keywordflow">break</span>;
+00180 }
+00181 }
+00182 <span class="keywordflow">if</span> (!found)
+00183 {
+00184 <span class="comment">// no node for this execution path : create a new one</span>
+00185 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo8">Sons</a>.push_back(<span class="keyword">new</span> CNode(<span class="keyword">this</span>, _CurrNode));
+00186 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo8">Sons</a>.back()-&gt;Parent = <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>;
+00187 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a> = <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-&gt;<a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo8">Sons</a>.back();
+00188 }
+00189 }
+</pre></div> </td>
+ </tr>
+</table>
+<hr><h2>Field Documentation</h2>
+<a class="anchor" name="NLMISC_1_1CHTimerv0" doxytag="NLMISC::CHTimer::_AfterStopEstimateTime" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a04558.html#a12">sint64</a> <a class="el" href="a02640.html#NLMISC_1_1CHTimerv0">NLMISC::CHTimer::_AfterStopEstimateTime</a> = 0<code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00057">57</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05787.html#l00957">doAfter()</a>, and <a class="el" href="a05787.html#l00194">estimateAfterStopTime()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimerv1" doxytag="NLMISC::CHTimer::_AfterStopEstimateTimeDone" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a02640.html#NLMISC_1_1CHTimerv1">NLMISC::CHTimer::_AfterStopEstimateTimeDone</a> = false<code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00058">58</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05787.html#l00194">estimateAfterStopTime()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimerv2" doxytag="NLMISC::CHTimer::_Benching" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a02640.html#NLMISC_1_1CHTimerv2">NLMISC::CHTimer::_Benching</a> = false<code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00052">52</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05788.html#l00211">after()</a>, <a class="el" href="a05788.html#l00205">before()</a>, <a class="el" href="a05788.html#l00238">benching()</a>, <a class="el" href="a05787.html#l00271">endBench()</a>, <a class="el" href="a05787.html#l00194">estimateAfterStopTime()</a>, and <a class="el" href="a05787.html#l00241">startBench()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimerv3" doxytag="NLMISC::CHTimer::_BenchStartedOnce" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a02640.html#NLMISC_1_1CHTimerv3">NLMISC::CHTimer::_BenchStartedOnce</a> = false<code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00053">53</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05787.html#l00288">display()</a>, <a class="el" href="a05787.html#l00375">displayByExecutionPath()</a>, <a class="el" href="a05787.html#l00472">displayHierarchical()</a>, <a class="el" href="a05787.html#l00556">displayHierarchicalByExecutionPathSorted()</a>, <a class="el" href="a05787.html#l00675">displaySummary()</a>, <a class="el" href="a05787.html#l00194">estimateAfterStopTime()</a>, and <a class="el" href="a05787.html#l00241">startBench()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimerv4" doxytag="NLMISC::CHTimer::_CurrNode" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02642.html">CHTimer::CNode</a> * <a class="el" href="a02640.html#NLMISC_1_1CHTimerv4">NLMISC::CHTimer::_CurrNode</a> = &amp;<a class="el" href="a02640.html#NLMISC_1_1CHTimerv8">_RootNode</a><code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00049">49</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05787.html#l00796">clear()</a>, <a class="el" href="a05787.html#l00288">display()</a>, <a class="el" href="a05787.html#l00375">displayByExecutionPath()</a>, <a class="el" href="a05787.html#l00472">displayHierarchical()</a>, <a class="el" href="a05787.html#l00556">displayHierarchicalByExecutionPathSorted()</a>, <a class="el" href="a05787.html#l00675">displaySummary()</a>, <a class="el" href="a05787.html#l00957">doAfter()</a>, <a class="el" href="a05787.html#l00935">doBefore()</a>, <a class="el" href="a05787.html#l00271">endBench()</a>, and <a class="el" href="a05787.html#l00169">walkTreeToCurrent()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimerv5" doxytag="NLMISC::CHTimer::_CurrTimer" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02640.html">CHTimer</a> * <a class="el" href="a02640.html#NLMISC_1_1CHTimerv5">NLMISC::CHTimer::_CurrTimer</a> = &amp;<a class="el" href="a02640.html#NLMISC_1_1CHTimerv9">_RootTimer</a><code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00056">56</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05787.html#l00957">doAfter()</a>, and <a class="el" href="a05787.html#l00935">doBefore()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimerr0" doxytag="NLMISC::CHTimer::_IsRoot" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a02640.html#NLMISC_1_1CHTimerr0">NLMISC::CHTimer::_IsRoot</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05788.html#l00430">430</a> of file <a class="el" href="a05788.html">hierarchical_timer.h</a>.
+<p>
+Referenced by <a class="el" href="a05788.html#l00202">CHTimer()</a>, and <a class="el" href="a05787.html#l00169">walkTreeToCurrent()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimerv6" doxytag="NLMISC::CHTimer::_MsPerTick" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> double <a class="el" href="a02640.html#NLMISC_1_1CHTimerv6">NLMISC::CHTimer::_MsPerTick</a><code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00054">54</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05787.html#l00288">display()</a>, <a class="el" href="a05787.html#l00375">displayByExecutionPath()</a>, <a class="el" href="a05787.html#l00472">displayHierarchical()</a>, <a class="el" href="a05787.html#l00556">displayHierarchicalByExecutionPathSorted()</a>, <a class="el" href="a05787.html#l00675">displaySummary()</a>, <a class="el" href="a05787.html#l00957">doAfter()</a>, <a class="el" href="a05787.html#l00194">estimateAfterStopTime()</a>, and <a class="el" href="a05787.html#l00241">startBench()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimerr1" doxytag="NLMISC::CHTimer::_Name" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> const char* <a class="el" href="a02640.html#NLMISC_1_1CHTimerr1">NLMISC::CHTimer::_Name</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05788.html#l00424">424</a> of file <a class="el" href="a05788.html">hierarchical_timer.h</a>.
+<p>
+Referenced by <a class="el" href="a05787.html#l00472">displayHierarchical()</a>, <a class="el" href="a05787.html#l00556">displayHierarchicalByExecutionPathSorted()</a>, and <a class="el" href="a05787.html#l00675">displaySummary()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimerr2" doxytag="NLMISC::CHTimer::_Parent" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02640.html">CHTimer</a>* <a class="el" href="a02640.html#NLMISC_1_1CHTimerr2">NLMISC::CHTimer::_Parent</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05788.html#l00426">426</a> of file <a class="el" href="a05788.html">hierarchical_timer.h</a>.
+<p>
+Referenced by <a class="el" href="a05787.html#l00472">displayHierarchical()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimerv7" doxytag="NLMISC::CHTimer::_PreambuleClock" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a03391.html">CSimpleClock</a> <a class="el" href="a02640.html#NLMISC_1_1CHTimerv7">NLMISC::CHTimer::_PreambuleClock</a><code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+This clock is used to measure the preambule of methods such as <a class="el" href="a02640.html#NLMISC_1_1CHTimera2">CHTimer::before()</a> This is static, but the Hierarchical Timer doesn't support multithreading anyway..
+<p>
+Definition at line <a class="el" href="a05787.html#l00050">50</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05787.html#l00957">doAfter()</a>, and <a class="el" href="a05787.html#l00935">doBefore()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimerv8" doxytag="NLMISC::CHTimer::_RootNode" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02642.html">CHTimer::CNode</a> <a class="el" href="a02640.html#NLMISC_1_1CHTimerv8">NLMISC::CHTimer::_RootNode</a><code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00048">48</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05787.html#l00796">clear()</a>, <a class="el" href="a05787.html#l00288">display()</a>, <a class="el" href="a05787.html#l00375">displayByExecutionPath()</a>, <a class="el" href="a05787.html#l00472">displayHierarchical()</a>, <a class="el" href="a05787.html#l00556">displayHierarchicalByExecutionPathSorted()</a>, <a class="el" href="a05787.html#l00675">displaySummary()</a>, <a class="el" href="a05787.html#l00271">endBench()</a>, <a class="el" href="a05787.html#l00194">estimateAfterStopTime()</a>, and <a class="el" href="a05787.html#l00241">startBench()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimerv9" doxytag="NLMISC::CHTimer::_RootTimer" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02640.html">CHTimer</a> <a class="el" href="a02640.html#NLMISC_1_1CHTimerv9">NLMISC::CHTimer::_RootTimer</a><code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Referenced by <a class="el" href="a05787.html#l00472">displayHierarchical()</a>, <a class="el" href="a05787.html#l00271">endBench()</a>, <a class="el" href="a05787.html#l00194">estimateAfterStopTime()</a>, and <a class="el" href="a05787.html#l00241">startBench()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimerr3" doxytag="NLMISC::CHTimer::_Sons" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> <a class="el" href="a02640.html#NLMISC_1_1CHTimery1">TTimerVect</a> <a class="el" href="a02640.html#NLMISC_1_1CHTimerr3">NLMISC::CHTimer::_Sons</a><code> [private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05788.html#l00428">428</a> of file <a class="el" href="a05788.html">hierarchical_timer.h</a>.
+<p>
+Referenced by <a class="el" href="a05787.html#l00472">displayHierarchical()</a>, and <a class="el" href="a05787.html#l00935">doBefore()</a>. </td>
+ </tr>
+</table>
+<a class="anchor" name="NLMISC_1_1CHTimerv10" doxytag="NLMISC::CHTimer::_WantStandardDeviation" ></a><p>
+<table class="mdTable" width="100%" cellpadding="2" cellspacing="0">
+ <tr>
+ <td class="mdRow">
+ <table cellpadding="0" cellspacing="0" border="0">
+ <tr>
+ <td class="md" nowrap valign="top"> bool <a class="el" href="a02640.html#NLMISC_1_1CHTimerv10">NLMISC::CHTimer::_WantStandardDeviation</a> = false<code> [static, private]</code>
+ </table>
+ </td>
+ </tr>
+</table>
+<table cellspacing=5 cellpadding=0 border=0>
+ <tr>
+ <td>
+ &nbsp;
+ </td>
+ <td>
+
+<p>
+
+<p>
+Definition at line <a class="el" href="a05787.html#l00055">55</a> of file <a class="el" href="a05787.html">hierarchical_timer.cpp</a>.
+<p>
+Referenced by <a class="el" href="a05787.html#l00288">display()</a>, <a class="el" href="a05787.html#l00375">displayByExecutionPath()</a>, <a class="el" href="a05787.html#l00472">displayHierarchical()</a>, <a class="el" href="a05787.html#l00556">displayHierarchicalByExecutionPathSorted()</a>, <a class="el" href="a05787.html#l00675">displaySummary()</a>, <a class="el" href="a05787.html#l00957">doAfter()</a>, <a class="el" href="a05787.html#l00194">estimateAfterStopTime()</a>, and <a class="el" href="a05787.html#l00241">startBench()</a>. </td>
+ </tr>
+</table>
+<hr>The documentation for this class was generated from the following files:<ul>
+<li><a class="el" href="a05788.html">hierarchical_timer.h</a><li><a class="el" href="a05787.html">hierarchical_timer.cpp</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Tue Mar 16 13:17:26 2004 for NeL by
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border=0 >
+</a>1.3.6 </small></address>
+</body>
+</html>