diff options
Diffstat (limited to 'docs/doxygen/nel/a02640.html')
-rw-r--r-- | docs/doxygen/nel/a02640.html | 2371 |
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 Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class Hierarchy</a> | <a class="qindex" href="classes.html">Alphabetical List</a> | <a class="qindex" href="annotated.html">Data Structures</a> | <a class="qindex" href="files.html">File List</a> | <a class="qindex" href="namespacemembers.html">Namespace Members</a> | <a class="qindex" href="functions.html">Data Fields</a> | <a class="qindex" href="globals.html">Globals</a> | <a class="qindex" href="pages.html">Related Pages</a> | <span class="search"><u>S</u>earch for <input class="search" type="text" name="query" value="" size="20" accesskey="s"/></span></form></div> +<h1>NLMISC::CHTimer Class Reference</h1><code>#include <<a class="el" href="a05788.html">hierarchical_timer.h</a>></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 </td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerw8">TSortCriterion</a> { <br> + <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> + <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 </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 </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 </td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimera2">before</a> ()</td></tr> + +<tr><td class="mdescLeft"> </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> </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> </td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimera4">CHTimer</a> ()</td></tr> + +<tr><td class="mdescLeft"> </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 * </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 </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 </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 </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 </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 </td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimere3">clear</a> ()</td></tr> + +<tr><td class="mdescLeft"> </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 </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 </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 </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 </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 </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 </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 </td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimere10">endBench</a> ()</td></tr> + +<tr><td class="mdescLeft"> </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 </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< <a class="el" href="a02642.html">CNode</a> * > </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< <a class="el" href="a02640.html">CHTimer</a> * > </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 </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 </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 </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 </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 </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 * </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> * </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> </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> </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 </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 </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 </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> * </td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a> = &<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> * </td><td class="memItemRight" valign=bottom><a class="el" href="a02640.html#NLMISC_1_1CHTimerv5">_CurrTimer</a> = &<a class="el" href="a02640.html#NLMISC_1_1CHTimerv9">_RootTimer</a></td></tr> + +<tr><td class="memItemLeft" nowrap align=right valign=top>double </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> </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> </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> </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 </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<<a class="el" href="a02642.html">CNode</a> *> <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> + + </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<<a class="el" href="a02640.html">CHTimer</a> *> <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> + + </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> + + </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> </td><td> +</td></tr> +<tr><td valign=top><em><a class="anchor" name="NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw6" doxytag="TotalTime" ></a>TotalTime</em> </td><td> +</td></tr> +<tr><td valign=top><em><a class="anchor" name="NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw7" doxytag="TotalTimeWithoutSons" ></a>TotalTimeWithoutSons</em> </td><td> +</td></tr> +<tr><td valign=top><em><a class="anchor" name="NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw1" doxytag="MeanTime" ></a>MeanTime</em> </td><td> +</td></tr> +<tr><td valign=top><em><a class="anchor" name="NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw4" doxytag="NumVisits" ></a>NumVisits</em> </td><td> +</td></tr> +<tr><td valign=top><em><a class="anchor" name="NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw0" doxytag="MaxTime" ></a>MaxTime</em> </td><td> +</td></tr> +<tr><td valign=top><em><a class="anchor" name="NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw2" doxytag="MinTime" ></a>MinTime</em> </td><td> +</td></tr> +<tr><td valign=top><em><a class="anchor" name="NLMISC_1_1CHTimerw8NLMISC_1_1CHTimerw5" doxytag="SortCriterionsLast" ></a>SortCriterionsLast</em> </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 & 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">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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">( </td> + <td class="md" nowrap valign="top">const char * </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 </td> + <td class="mdname" nowrap> <em>isRoot</em> = false</td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [inline, static]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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">( </td> + <td class="md" nowrap valign="top">bool </td> + <td class="mdname1" valign="top" nowrap> <em>displayAfter</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [inline, static]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [inline, static]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [static]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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 == &_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> = &<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">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02813.html">CLog</a> * </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> </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 </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 </td> + <td class="mdname" nowrap> <em>displayEx</em> = true</td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [static]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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> </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>-><a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo9">SonsPreambule</a> += benchClock.getNumTicks(); +00296 <span class="keywordflow">return</span>; +00297 } +00298 log->displayNL(<span class="stringliteral">"HTIMER: ========================================================================="</span>); +00299 log->displayRawNL(<span class="stringliteral">"HTIMER: Bench cumuled results"</span>); +00300 <span class="keyword">typedef</span> std::map<CHTimer *, TNodeVect> TNodeMap; +00301 TNodeMap nodeMap; +00302 <a class="code" href="a02640.html#NLMISC_1_1CHTimery0">TNodeVect</a> nodeLeft; +00303 nodeLeft.push_back(&_RootNode); +00305 <span class="keywordflow">while</span> (!nodeLeft.empty()) +00306 { +00307 CNode *currNode = nodeLeft.back(); +00308 nodeMap[currNode->Owner].push_back(currNode); +00309 nodeLeft.pop_back(); +00310 nodeLeft.insert(nodeLeft.end(), currNode->Sons.begin(), currNode->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<CTimerStat> TTimerStatVect; +00316 <span class="keyword">typedef</span> std::vector<CTimerStat *> 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] = &stats[k]; +00324 stats[k].Timer = it->first; +00325 stats[k].buildFromNodes(&(it->second[0]), it->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( &_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)->Timer->_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->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->displayRawNL(<span class="stringliteral">"HTIMER: ================================="</span>); +00359 log->displayRawNL(<span class="stringliteral">"HTIMER: Node %s"</span>, (*statIt)->Timer->_Name); +00360 (*statIt)->display(log, displayEx, _WantStandardDeviation); +00361 } +00362 <span class="keywordflow">else</span> +00363 { +00364 (*statIt)->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)->Timer->_Name, statsInline.c_str()); +00367 log->displayRawNL(out); +00368 } +00369 } +00370 benchClock.stop(); +00371 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-><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">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02813.html">CLog</a> * </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> </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 </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 </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 </td> + <td class="mdname" nowrap> <em>displayEx</em> = true</td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [static]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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> </td><td>true to display each result on a single line. </td></tr> + <tr><td valign=top><em>alignPaths</em> </td><td>true to display all execution paths aligned. </td></tr> + <tr><td valign=top><em>displayEx</em> </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->displayRawNL(<span class="stringliteral">"HTIMER: ========================================================================="</span>); +00380 log->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<CNodeStat> TNodeStatVect; +00384 <span class="keyword">typedef</span> std::vector<CNodeStat *> 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(&_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->Sons.begin(), currNode->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 < nodeStats.size(); ++k) +00408 { +00409 nodeStatsPtrs[k] = &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(&_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)->Node->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->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->displayRawNL(<span class="stringliteral">"HTIMER: ================================="</span>); +00454 (*it)->Node->displayPath(log); +00455 (*it)->display(log, displayEx, _WantStandardDeviation); +00456 } +00457 <span class="keywordflow">else</span> +00458 { +00459 (*it)->getStats(statsInline, displayEx, rootStats.TotalTime, _WantStandardDeviation); +00460 (*it)->Node->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->displayRawNL(out); +00465 } +00466 } +00467 benchClock.stop(); +00468 <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-><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">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02813.html">CLog</a> * </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 </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> </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> </td> + <td class="mdname" nowrap> <em>indentationStep</em> = 2</td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [static]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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> </td><td>true to display more detailed infos. </td></tr> + <tr><td valign=top><em>labelNumChar</em> </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->displayNL(<span class="stringliteral">"HTIMER: ========================================================================="</span>); +00477 log->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<CHTimer *, TNodeVect> TNodeMap; +00480 TNodeMap nodeMap; +00481 <a class="code" href="a02640.html#NLMISC_1_1CHTimery0">TNodeVect</a> nodeLeft; +00482 nodeLeft.push_back(&_RootNode); +00484 <span class="keywordflow">while</span> (!nodeLeft.empty()) +00485 { +00486 CNode *currNode = nodeLeft.back(); +00487 nodeMap[currNode->Owner].push_back(currNode); +00488 nodeLeft.pop_back(); +00489 nodeLeft.insert(nodeLeft.end(), currNode->Sons.begin(), currNode->Sons.end()); +00490 +00491 } +00492 log->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(&_RootNode, _MsPerTick); +00497 +00499 CStats currNodeStats; +00500 std::vector<uint> 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 = &<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->_Name), labelNumChar); +00515 <span class="keywordflow">if</span> ((<a class="code" href="a04558.html#a14">sint</a>) (endIndex - startIndex) >= 1) +00516 { +00517 std::copy(currTimer->_Name, currTimer->_Name + (endIndex - startIndex), resultName.begin() + startIndex); +00518 } +00519 <a class="code" href="a02640.html#NLMISC_1_1CHTimery0">TNodeVect</a> &execNodes = nodeMap[currTimer]; +00520 <span class="keywordflow">if</span> (execNodes.size() > 0) +00521 { +00522 currNodeStats.buildFromNodes(&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->displayRawNL(<span class="stringliteral">"HTIMER: %s"</span>, (resultName + resultStats).c_str()); +00525 } +00526 } +00527 <span class="keywordflow">if</span> (sonsIndex.back() == currTimer->_Sons.size()) +00528 { +00529 sonsIndex.pop_back(); +00530 currTimer = currTimer->_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->_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>-><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">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02813.html">CLog</a> * </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 </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> </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> </td> + <td class="mdname" nowrap> <em>indentationStep</em> = 2</td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [static]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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> </td><td>true to display more detailed infos. </td></tr> + <tr><td valign=top><em>labelNumChar</em> </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">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02813.html">CLog</a> * </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> </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 </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> </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> </td> + <td class="mdname" nowrap> <em>indentationStep</em> = 2</td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [static]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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> </td><td>true to display more detailed infos. </td></tr> + <tr><td valign=top><em>labelNumChar</em> </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(&_RootNode, _MsPerTick); +00566 +00567 +00568 <span class="comment">// display header.</span> +00569 CLog::TDisplayInfo dummyDspInfo; +00570 log->displayRawNL(<span class="stringliteral">"HTIMER: ========================================================================="</span>); +00571 log->displayRawNL(<span class="stringliteral">"HTIMER: Hierarchical display of bench by execution path"</span>); +00572 log->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< CExamStackEntry > examStack; +00577 +00578 <span class="comment">// Add the root to the stack.</span> +00579 examStack.push_back( CExamStackEntry( &_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<CNode*> &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->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->Sons; +00603 } +00604 <span class="comment">// else, Sort them with criterion.</span> +00605 <span class="keywordflow">else</span> +00606 { +00607 std::vector<CNodeStat> stats; +00608 std::vector<CNodeStat *> 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<children.size(); i++) +00615 { +00616 CNode *childNode= node->Sons[i]; +00617 stats[i].buildFromNode(childNode, _MsPerTick); +00618 stats[i].Node = childNode; +00619 ptrStats[i]= &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<children.size(); i++) +00629 { +00630 children[i]= ptrStats[i]->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->Owner->_Name), labelNumChar); +00642 <span class="keywordflow">if</span> ((<a class="code" href="a04558.html#a14">sint</a>) (endIndex - startIndex) >= 1) +00643 { +00644 std::copy(node->Owner->_Name, node->Owner->_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->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 >= 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>-><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">( </td> + <td class="md" nowrap valign="top"><a class="el" href="a02813.html">CLog</a> * </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> </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 </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> </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> </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> </td> + <td class="mdname" nowrap> <em>maxDepth</em> = 3</td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [static]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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> </td><td>true to display more detailed infos. </td></tr> + <tr><td valign=top><em>labelNumChar</em> </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(&_RootNode, _MsPerTick); +00685 +00686 +00687 <span class="comment">// display header.</span> +00688 CLog::TDisplayInfo dummyDspInfo; +00689 log->displayRawNL(<span class="stringliteral">"HTIMER: ========================================================================="</span>); +00690 log->displayRawNL(<span class="stringliteral">"HTIMER: Hierarchical display of bench by execution path"</span>); +00691 log->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< CExamStackEntry > examStack; +00696 +00697 <span class="comment">// Add the root to the stack.</span> +00698 examStack.push_back( CExamStackEntry( &_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<CNode*> &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->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->Sons; +00723 } +00724 <span class="comment">// else, Sort them with criterion.</span> +00725 <span class="keywordflow">else</span> +00726 { +00727 std::vector<CNodeStat> stats; +00728 std::vector<CNodeStat *> 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<children.size(); i++) +00735 { +00736 CNode *childNode= node->Sons[i]; +00737 stats[i].buildFromNode(childNode, _MsPerTick); +00738 stats[i].Node = childNode; +00739 ptrStats[i]= &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<children.size(); i++) +00749 { +00750 children[i]= ptrStats[i]->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->Owner->_Name), labelNumChar); +00762 <span class="keywordflow">if</span> ((<a class="code" href="a04558.html#a14">sint</a>) (endIndex - startIndex) >= 1) +00763 { +00764 std::copy(node->Owner->_Name, node->Owner->_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->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 >= 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 < 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>-><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">( </td> + <td class="md" nowrap valign="top">bool </td> + <td class="mdname1" valign="top" nowrap> <em>displayAfter</em> = false </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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>-><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>-><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>-><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 < of the SonTime</span> +00968 <span class="keywordflow">if</span>(<a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-><a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo11">TotalTime</a> + numTicks < <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-><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>-><a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo10">SonsTotalTime</a> - <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-><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>-><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>-><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>-><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>-><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>-><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>-><a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo1">LastSonsTotalTime</a> = <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-><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>-><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>-><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>-><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-><a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo7">Parent</a>; +00995 parent-><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->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->SonsPreambule += <a class="code" href="a02640.html#NLMISC_1_1CHTimerv7">_PreambuleClock</a>.getNumTicks() + curNode->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">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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>-><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>-><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> && <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>->_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>-><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>-><a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo7">Parent</a>-><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>-><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">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [static]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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> == &<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">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [static, private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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> = &<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<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">( </td> + <td class="md" nowrap valign="top">void </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap> const<code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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">( </td> + <td class="md" nowrap valign="top">const char * </td> + <td class="mdname1" valign="top" nowrap> <em>name</em> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [inline]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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">( </td> + <td class="md" nowrap valign="top">bool </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 </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 </td> + <td class="mdname" nowrap> <em>reset</em> = true</td> + </tr> + <tr> + <td></td> + <td class="md">) </td> + <td class="md" colspan="2"><code> [static]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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> </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> </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> = &<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">( </td> + <td class="mdname1" valign="top" nowrap> </td> + <td class="md" valign="top"> ) </td> + <td class="md" nowrap><code> [private]</code></td> + </tr> + + </table> + </td> + </tr> +</table> +<table cellspacing=5 cellpadding=0 border=0> + <tr> + <td> + + </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 < <a class="code" href="a02640.html#NLMISC_1_1CHTimerv4">_CurrNode</a>-><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>-><a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo8">Sons</a>[k]->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>-><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>-><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>-><a class="code" href="a02642.html#NLMISC_1_1CHTimer_1_1CNodeo8">Sons</a>.back()->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>-><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> + + </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> + + </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> + + </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> + + </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> = &<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> + + </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> = &<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> + + </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> + + </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> + + </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> + + </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> + + </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> + + </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> + + </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> + + </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> + + </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> + + </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> |