diff options
author | neodarz <neodarz@neodarz.net> | 2018-08-11 20:21:34 +0200 |
---|---|---|
committer | neodarz <neodarz@neodarz.net> | 2018-08-11 20:21:34 +0200 |
commit | 0ea5fc66924303d1bf73ba283a383e2aadee02f2 (patch) | |
tree | 2568e71a7ccc44ec23b8bb3f0ff97fb6bf2ed709 /docs/doxygen/nel/hierarchical__timer_8h-source.html | |
download | nevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.tar.xz nevrax-website-self-hostable-0ea5fc66924303d1bf73ba283a383e2aadee02f2.zip |
Initial commit
Diffstat (limited to 'docs/doxygen/nel/hierarchical__timer_8h-source.html')
-rw-r--r-- | docs/doxygen/nel/hierarchical__timer_8h-source.html | 503 |
1 files changed, 503 insertions, 0 deletions
diff --git a/docs/doxygen/nel/hierarchical__timer_8h-source.html b/docs/doxygen/nel/hierarchical__timer_8h-source.html new file mode 100644 index 00000000..2b849341 --- /dev/null +++ b/docs/doxygen/nel/hierarchical__timer_8h-source.html @@ -0,0 +1,503 @@ +<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> +<HTML> +<HEAD> + <TITLE>nevrax.org : docs</TITLE> + <LINK REL=stylesheet TYPE="text/css" HREF="http://www.nevrax.org/inc/css/nevrax.css"> + <link href="doxygen.css" rel="stylesheet" type="text/css"> +</HEAD> +<BODY MARGINHEIGHT="0" MARGINWIDTH="0"> + +<!-- uplinks --> +<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0> + <TR> + <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD> + <TD WIDTH=140 BGCOLOR=#dddddd><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="16" BORDER=0 ALT=""></TD> + <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD> + <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle> <A CLASS=uplinks HREF=http://www.nevrax.org><b>Home</B></FONT></A> </TD> + <TD><IMG width=6 height=14 SRC="http://www.nevrax.org/inc/img/reddots.gif" ALT="#" VSPACE=2 HSPACE=2 BORDER=0 ></TD><TD VALIGN=middle> <A CLASS=uplinks HREF=http://www.nevrax.com><b>nevrax.com</B></FONT></A> </TD> + </TR> +</TABLE> + +<!-- banner Nevrax --> +<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 WIDTH=100%> + <TR><TD BGCOLOR="#000000" BACKGROUND="http://www.nevrax.org/inc/img/black_banner.jpg"><A HREF="http://www.nevrax.org"><IMG SRC="http://www.nevrax.org/inc/img/nevrax.gif" WIDTH="170" HEIGHT="45" BORDER=0 ALT="Nevrax" ></A></TD></TR> +</TABLE> + +<!-- main table --> +<TABLE CELLSPACING=0 CELLPADDING=0 BORDER=0 height=100%> + <TR> + <TD WIDTH=16><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="10" BORDER=0 ALT=""></TD> + <TD WIDTH=140 BGCOLOR=#dddddd VALIGN=TOP ALIGN=middle><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT=""> + + <!------ Begin Box ------> + <TABLE BORDER=0 CELLSPACING=0 CELLPADDING=0 BGCOLOR=black><TR><TD><TABLE border=0 cellspacing=2 cellpadding=0 width=120><tr><TD ALIGN=middle bgcolor=black> + <FONT COLOR=white FACE="sans-serif"><B>Nevrax.org</B></FONT></TD></TR><tr><td colspan=2 bgcolor=#FFFFFF> + <TABLE cellspacing=0 cellpadding=1 border=0> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="Rubrique news"><img width=13 height=15 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-news.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/news/" TITLE="News">News</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Rubrique mail"><img width=15 height=11 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-mail.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/mail/" TITLE="Mailing list archive">Mailing-list</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Rubrique docs"><img width=14 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-docs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/docs/" TITLE="Documentation">Documentation</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="Rubrique cvs"><img width=13 height=17 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-cvs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/cvs/" TITLE="CVS Web">CVS</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Rubrique bugs"><img width=20 height=16 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-bugs.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/bugs/" TITLE="Bugtracking">Bugs</a></td></tr> + <tr><td ALIGN=middle><a class='linkbox' href="http://www.nevrax.org/GPL.php3" TITLE="Rubrique license"><img width=18 height=12 hspace=5 border=0 src=http://www.nevrax.org/inc/img/picto-gpl.gif ALT=#></A></td><td><a class='linkbox' href="http://www.nevrax.org/GPL.php3" TITLE="License">License</a></td></tr> + </TABLE> + </TD></TR></TABLE></TD></TR></TABLE> + <!------ End Box ------> + + </TD> + <TD WIDTH=15><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="16" HEIGHT="16" BORDER=0 ALT=""></TD> + <TD ALIGN=left valign=top><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="140" HEIGHT="10" BORDER=0 ALT=""> + +<!-- title --> +<TABLE background="http://www.nevrax.org/inc/img/redline.gif" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td> +<A HREF="http://www.nevrax.org/docs/"><img src="http://www.nevrax.org/inc/img/t_docs.gif" ALT="Docs" HEIGHT=20 BORDER=0></A> +</td><td><IMG SRC="http://www.nevrax.org/inc/img/pixel.gif" WIDTH="1" HEIGHT="1" BORDER=0 ALT=""> +</td></tr></table> + + +<!-- block --> +<TABLE bgcolor="#dddddd" CELLSPACING=0 CELLPADDING=0 BORDER=0 width=100%><tr><td width=1% valign=middle><img width=6 height=14 hspace=2 vspace=2 src="http://www.nevrax.org/inc/img/reddots.gif"></TD> + <TD><B>Documentation</B></TD> + <TD ALIGN=RIGHT> </td> +</tr></table> +<!-- Generated by Doxygen 1.2.14 --> +<center> +<a class="qindex" href="index.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">Compound List</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">Compound Members</a> <a class="qindex" href="globals.html">File Members</a> <a class="qindex" href="pages.html">Related Pages</a> <a class="qindexRef" doxygen="_cgi:http://www.nevrax.org/cgi-bin/nel-search.cgi" href="http://www.nevrax.org/cgi-bin/nel-search.cgi">Search</a> </center> +<hr><h1>hierarchical_timer.h</h1><a href="hierarchical__timer_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 +00007 <font class="comment">/* Copyright, 2000, 2001 Nevrax Ltd.</font> +00008 <font class="comment"> *</font> +00009 <font class="comment"> * This file is part of NEVRAX NeL Network Services.</font> +00010 <font class="comment"> * NEVRAX NeL Network Services is free software; you can redistribute it and/or modify</font> +00011 <font class="comment"> * it under the terms of the GNU General Public License as published by</font> +00012 <font class="comment"> * the Free Software Foundation; either version 2, or (at your option)</font> +00013 <font class="comment"> * any later version.</font> +00014 <font class="comment"></font> +00015 <font class="comment"> * NEVRAX NeL Network Services is distributed in the hope that it will be useful, but</font> +00016 <font class="comment"> * WITHOUT ANY WARRANTY; without even the implied warranty of</font> +00017 <font class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</font> +00018 <font class="comment"> * General Public License for more details.</font> +00019 <font class="comment"></font> +00020 <font class="comment"> * You should have received a copy of the GNU General Public License</font> +00021 <font class="comment"> * along with NEVRAX NeL Network Services; see the file COPYING. If not, write to the</font> +00022 <font class="comment"> * Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,</font> +00023 <font class="comment"> * MA 02111-1307, USA.</font> +00024 <font class="comment"> */</font> +00025 +00026 <font class="preprocessor">#ifndef NL_HIERARCHICAL_TIMER_H</font> +00027 <font class="preprocessor"></font><font class="preprocessor">#define NL_HIERARCHICAL_TIMER_H</font> +00028 <font class="preprocessor"></font> +00029 <font class="preprocessor">#include <string></font> +00030 <font class="preprocessor">#include <vector></font> +00031 +00032 <font class="preprocessor">#include "<a class="code" href="types__nl_8h.html">nel/misc/types_nl.h</a>"</font> +00033 <font class="preprocessor">#include "<a class="code" href="time__nl_8h.html">nel/misc/time_nl.h</a>"</font> +00034 <font class="preprocessor">#include "<a class="code" href="debug_8h.html">nel/misc/debug.h</a>"</font> +00035 +00036 <font class="preprocessor">#include <algorithm></font> +00037 +<a name="l00038"></a><a class="code" href="hierarchical__timer_8h.html#a0">00038</a> <font class="preprocessor">#define ALLOW_TIMING_MEASURES</font> +00039 <font class="preprocessor"></font> +00040 +00041 <font class="preprocessor">#ifdef ALLOW_TIMING_MEASURES</font> +00042 <font class="preprocessor"></font> <font class="comment">// Several macros to use</font> +<a name="l00043"></a><a class="code" href="hierarchical__timer_8h.html#a1">00043</a> <font class="preprocessor"># define H_TIME(name, inst) \</font> +00044 <font class="preprocessor"> { \</font> +00045 <font class="preprocessor"> static NLMISC::CHTimer nl_h_timer(name); \</font> +00046 <font class="preprocessor"> nl_h_timer.before(); \</font> +00047 <font class="preprocessor"> inst \</font> +00048 <font class="preprocessor"> nl_h_timer.after(); \</font> +00049 <font class="preprocessor"> }</font> +00050 <font class="preprocessor"></font> <font class="comment">//</font> +<a name="l00051"></a><a class="code" href="hierarchical__timer_8h.html#a2">00051</a> <font class="preprocessor"># define H_BEFORE(__name) static NLMISC::CHTimer __name##_timer(#__name); __name##_timer.before();</font> +<a name="l00052"></a><a class="code" href="hierarchical__timer_8h.html#a3">00052</a> <font class="preprocessor"></font><font class="preprocessor"># define H_AFTER(__name) __name##_timer.after();</font> +00053 <font class="preprocessor"></font> <font class="comment">//</font> +<a name="l00054"></a><a class="code" href="hierarchical__timer_8h.html#a4">00054</a> <font class="preprocessor"># define H_AUTO(__name) static NLMISC::CHTimer __name##_timer(#__name); NLMISC::CAutoTimer __name##_auto(&__name##_timer);</font> +00055 <font class="preprocessor"></font> <font class="comment">// display the timer info after each loop call</font> +<a name="l00056"></a><a class="code" href="hierarchical__timer_8h.html#a5">00056</a> <font class="preprocessor"># define H_AUTO_INST(__name) static NLMISC::CHTimer __name##_timer(#__name); NLMISC::CAutoTimer __name##_auto(&__name##_timer, true);</font> +00057 <font class="preprocessor"></font> +<a name="l00061"></a><a class="code" href="hierarchical__timer_8h.html#a6">00061</a> <font class="preprocessor"># define H_AUTO_DECL(__name) static NLMISC::CHTimer __name##_timer(#__name); </font> +<a name="l00062"></a><a class="code" href="hierarchical__timer_8h.html#a7">00062</a> <font class="preprocessor"></font><font class="preprocessor"># define H_AUTO_USE(__name) NLMISC::CAutoTimer __name##_auto(&__name##_timer);</font> +00063 <font class="preprocessor"></font> +00064 <font class="preprocessor">#else</font> +00065 <font class="preprocessor"></font> <font class="comment">// void macros</font> +00066 <font class="preprocessor"># define H_TIME(name, inst) </font> +00067 <font class="preprocessor"></font><font class="preprocessor"># define H_BEFORE(__name)</font> +00068 <font class="preprocessor"></font><font class="preprocessor"># define H_AFTER(__name) </font> +00069 <font class="preprocessor"></font><font class="preprocessor"># define H_AUTO(__name) </font> +00070 <font class="preprocessor"></font><font class="preprocessor"># define H_AUTO_INST(__name)</font> +00071 <font class="preprocessor"></font><font class="preprocessor"># define H_AUTO_DECL(__name)</font> +00072 <font class="preprocessor"></font><font class="preprocessor"># define H_AUTO_USE(__name)</font> +00073 <font class="preprocessor"></font><font class="preprocessor">#endif</font> +00074 <font class="preprocessor"></font> +00075 +00076 <font class="keyword">namespace </font>NLMISC +00077 { +00078 +00079 +00080 <font class="preprocessor">#ifdef NL_OS_WINDOWS</font> +00081 <font class="preprocessor"></font><font class="comment">// Vicual C++ warning : ebp maybe modified</font> +00082 <font class="preprocessor"># pragma warning(disable:4731)</font> +00083 <font class="preprocessor"></font><font class="preprocessor">#endif</font> +00084 <font class="preprocessor"></font> +00085 +00088 <font class="preprocessor">#ifdef NL_CPU_INTEL</font> +00089 <font class="preprocessor"></font> +00090 <font class="keyword">inline</font> uint64 rdtsc() +00091 { +00092 uint64 ticks; +00093 <font class="preprocessor"># ifndef NL_OS_WINDOWS </font> +00094 <font class="preprocessor"></font> __asm__ <font class="keyword">volatile</font>(<font class="stringliteral">".byte 0x0f, 0x31"</font> : <font class="stringliteral">"=a"</font> (ticks.low), <font class="stringliteral">"=d"</font> (ticks.high)); +00095 <font class="preprocessor"># else </font> +00096 <font class="preprocessor"></font> __asm rdtsc +00097 __asm mov DWORD PTR [ticks], eax +00098 __asm mov DWORD PTR [ticks + 4], edx +00099 <font class="preprocessor"># endif</font> +00100 <font class="preprocessor"></font> <font class="keywordflow">return</font> ticks; +00101 } +00102 +00103 <font class="preprocessor">#endif </font> +00104 <font class="preprocessor"></font> +00105 +<a name="l00114"></a><a class="code" href="classNLMISC_1_1CSimpleClock.html">00114</a> <font class="keyword">class </font>CSimpleClock +00115 { +00116 <font class="keyword">public</font>: +<a name="l00117"></a><a class="code" href="classNLMISC_1_1CSimpleClock.html#a0">00117</a> <a class="code" href="classNLMISC_1_1CSimpleClock.html#a0">CSimpleClock</a>() : <a class="code" href="classNLMISC_1_1CSimpleClock.html#o1">_NumTicks</a>(0) +00118 { +00119 <font class="preprocessor"># ifdef NL_DEBUG</font> +00120 <font class="preprocessor"></font> _Started = <font class="keyword">false</font>; +00121 <font class="preprocessor"># endif</font> +00122 <font class="preprocessor"></font> } +00123 <font class="comment">// start measure</font> +<a name="l00124"></a><a class="code" href="classNLMISC_1_1CSimpleClock.html#a1">00124</a> <font class="keywordtype">void</font> <a class="code" href="classNLMISC_1_1CSimpleClock.html#a1">start</a>() +00125 { +00126 <font class="preprocessor"># ifdef NL_DEBUG</font> +00127 <font class="preprocessor"></font> <a class="code" href="debug_8h.html#a6">nlassert</a>(!_Started); +00128 _Started = <font class="keyword">true</font>; +00129 <font class="preprocessor"># endif</font> +00130 <font class="preprocessor"></font><font class="preprocessor"># ifdef NL_CPU_INTEL</font> +00131 <font class="preprocessor"></font> <a class="code" href="classNLMISC_1_1CSimpleClock.html#o0">_StartTick</a> = rdtsc(); +00132 <font class="preprocessor"># else</font> +00133 <font class="preprocessor"></font> <a class="code" href="classNLMISC_1_1CSimpleClock.html#o0">_StartTick</a> = CTime::getPerformanceTime(); +00134 <font class="preprocessor"># endif</font> +00135 <font class="preprocessor"></font> } +00136 <font class="comment">// end measure</font> +<a name="l00137"></a><a class="code" href="classNLMISC_1_1CSimpleClock.html#a2">00137</a> <font class="keywordtype">void</font> <a class="code" href="classNLMISC_1_1CSimpleClock.html#a2">stop</a>() +00138 { +00139 <font class="preprocessor"># ifdef NL_DEBUG</font> +00140 <font class="preprocessor"></font> <a class="code" href="debug_8h.html#a6">nlassert</a>(_Started); +00141 _Started = <font class="keyword">false</font>; +00142 <font class="preprocessor"># endif</font> +00143 <font class="preprocessor"></font><font class="preprocessor"># ifdef NL_CPU_INTEL</font> +00144 <font class="preprocessor"></font> <a class="code" href="classNLMISC_1_1CSimpleClock.html#o1">_NumTicks</a> = rdtsc() - <a class="code" href="classNLMISC_1_1CSimpleClock.html#o0">_StartTick</a>; +00145 <font class="preprocessor"># else</font> +00146 <font class="preprocessor"></font> <a class="code" href="classNLMISC_1_1CSimpleClock.html#o1">_NumTicks</a> = CTime::getPerformanceTime() - <a class="code" href="classNLMISC_1_1CSimpleClock.html#o0">_StartTick</a>; +00147 <font class="preprocessor"># endif</font> +00148 <font class="preprocessor"></font> +00149 } +00150 <font class="comment">// get measure</font> +<a name="l00151"></a><a class="code" href="classNLMISC_1_1CSimpleClock.html#a3">00151</a> uint64 <a class="code" href="classNLMISC_1_1CSimpleClock.html#a3">getNumTicks</a>()<font class="keyword"> const</font> +00152 <font class="keyword"> </font>{ +00153 <font class="preprocessor"> #ifdef NL_DEBUG</font> +00154 <font class="preprocessor"></font> <a class="code" href="debug_8h.html#a6">nlassert</a>(!_Started); +00155 <font class="preprocessor"> #endif</font> +00156 <font class="preprocessor"></font> <a class="code" href="debug_8h.html#a6">nlassert</a>(<a class="code" href="classNLMISC_1_1CSimpleClock.html#o1">_NumTicks</a> != 0); +00157 <font class="keywordflow">return</font> <a class="code" href="classNLMISC_1_1CSimpleClock.html#o1">_NumTicks</a>; +00158 } +00159 <font class="comment">// This compute the duration of start and stop (in cycles).</font> +00160 <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="classNLMISC_1_1CSimpleClock.html#d0">init</a>(); +<a name="l00164"></a><a class="code" href="classNLMISC_1_1CSimpleClock.html#d1">00164</a> <font class="keyword">static</font> uint64 <a class="code" href="classNLMISC_1_1CSimpleClock.html#d1">getStartStopNumTicks</a>() +00165 { +00166 <font class="keywordflow">return</font> <a class="code" href="classNLMISC_1_1CSimpleClock.html#r1">_StartStopNumTicks</a>; +00167 } +00168 <font class="keyword">private</font>: +<a name="l00169"></a><a class="code" href="classNLMISC_1_1CSimpleClock.html#o0">00169</a> uint64 <a class="code" href="classNLMISC_1_1CSimpleClock.html#o0">_StartTick</a>; +<a name="l00170"></a><a class="code" href="classNLMISC_1_1CSimpleClock.html#o1">00170</a> uint64 <a class="code" href="classNLMISC_1_1CSimpleClock.html#o1">_NumTicks</a>; +00171 <font class="preprocessor"># ifdef NL_DEBUG</font> +00172 <font class="preprocessor"></font> <font class="keywordtype">bool</font> _Started; +00173 <font class="preprocessor"># endif</font> +00174 <font class="preprocessor"></font> <font class="keyword">static</font> <font class="keywordtype">bool</font> <a class="code" href="classNLMISC_1_1CSimpleClock.html#r0">_InitDone</a>; +00175 <font class="keyword">static</font> uint64 <a class="code" href="classNLMISC_1_1CSimpleClock.html#r1">_StartStopNumTicks</a>; +00176 }; +00177 +00178 +00179 +00180 +00181 +<a name="l00205"></a><a class="code" href="classNLMISC_1_1CHTimer.html">00205</a> <font class="keyword">class </font>CHTimer +00206 { +00207 <font class="keyword">public</font>: +00208 <font class="comment">// this enum is used to sort displayed results</font> +<a name="l00209"></a><a class="code" href="classNLMISC_1_1CHTimer.html#s8">00209</a> <font class="keyword">enum</font> <a class="code" href="classNLMISC_1_1CHTimer.html#s8">TSortCriterion</a> { <a class="code" href="classNLMISC_1_1CHTimer.html#s8s0">NoSort</a>, +00210 <a class="code" href="classNLMISC_1_1CHTimer.html#s8s1">TotalTime</a>, +00211 <a class="code" href="classNLMISC_1_1CHTimer.html#s8s2">TotalTimeWithoutSons</a>, +00212 <a class="code" href="classNLMISC_1_1CHTimer.html#s8s3">MeanTime</a>, +00213 <a class="code" href="classNLMISC_1_1CHTimer.html#s8s4">NumVisits</a>, +00214 <a class="code" href="classNLMISC_1_1CHTimer.html#s8s5">MaxTime</a>, +00215 <a class="code" href="classNLMISC_1_1CHTimer.html#s8s6">MinTime</a>, +00216 <a class="code" href="classNLMISC_1_1CHTimer.html#s8s7">SortCriterionsLast</a> +00217 }; +00218 <font class="keyword">public</font>: +<a name="l00220"></a><a class="code" href="classNLMISC_1_1CHTimer.html#a0">00220</a> <a class="code" href="classNLMISC_1_1CHTimer.html#a0">CHTimer</a>(<font class="keyword">const</font> <font class="keywordtype">char</font> *name, <font class="keywordtype">bool</font> isRoot = <font class="keyword">false</font>) : <a class="code" href="classNLMISC_1_1CHTimer.html#o0">_Name</a>(name), <a class="code" href="classNLMISC_1_1CHTimer.html#o3">_IsRoot</a>(isRoot) {} +00222 <font class="keywordtype">void</font> <a class="code" href="classNLMISC_1_1CHTimer.html#a1">before</a>(); +00223 <font class="comment">// Ends a measuring session</font> +00224 <font class="keywordtype">void</font> <a class="code" href="classNLMISC_1_1CHTimer.html#a2">after</a>(<font class="keywordtype">bool</font> displayAfter = <font class="keyword">false</font>); +00225 <font class="comment">// Get this node name</font> +<a name="l00226"></a><a class="code" href="classNLMISC_1_1CHTimer.html#a3">00226</a> <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="classNLMISC_1_1CHTimer.html#a3">getName</a>()<font class="keyword"> const </font>{ <font class="keywordflow">return</font> <a class="code" href="classNLMISC_1_1CHTimer.html#o0">_Name</a>; } +00231 <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="classNLMISC_1_1CHTimer.html#d0">startBench</a>(<font class="keywordtype">bool</font> wantStandardDeviation = <font class="keyword">false</font>, <font class="keywordtype">bool</font> quick = <font class="keyword">false</font>); +<a name="l00234"></a><a class="code" href="classNLMISC_1_1CHTimer.html#d1">00234</a> <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="classNLMISC_1_1CHTimer.html#d1">bench</a>() { <a class="code" href="classNLMISC_1_1CHTimer.html#d0">startBench</a>(); } +<a name="l00237"></a><a class="code" href="classNLMISC_1_1CHTimer.html#d2">00237</a> <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="classNLMISC_1_1CHTimer.html#d2">adjust</a>() {} +00239 <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="classNLMISC_1_1CHTimer.html#d3">endBench</a>(); +00243 <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="classNLMISC_1_1CHTimer.html#d4">display</a>(CLog *log= <a class="code" href="namespaceNLMISC.html#a10">InfoLog</a>, <a class="code" href="classNLMISC_1_1CHTimer.html#s8">TSortCriterion</a> criterion = <a class="code" href="classNLMISC_1_1CHTimer.html#s8s1">TotalTime</a>, <font class="keywordtype">bool</font> displayInline = <font class="keyword">true</font>, <font class="keywordtype">bool</font> displayEx = <font class="keyword">true</font>); +00249 <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="classNLMISC_1_1CHTimer.html#d5">displayByExecutionPath</a>(CLog *log= <a class="code" href="namespaceNLMISC.html#a10">InfoLog</a>, <a class="code" href="classNLMISC_1_1CHTimer.html#s8">TSortCriterion</a> criterion = <a class="code" href="classNLMISC_1_1CHTimer.html#s8s1">TotalTime</a>, <font class="keywordtype">bool</font> displayInline = <font class="keyword">true</font>, <font class="keywordtype">bool</font> alignPaths = <font class="keyword">true</font>, <font class="keywordtype">bool</font> displayEx = <font class="keyword">true</font>); +00250 +00255 <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="classNLMISC_1_1CHTimer.html#d6">displayHierarchical</a>(CLog *log= <a class="code" href="namespaceNLMISC.html#a10">InfoLog</a>, <font class="keywordtype">bool</font> displayEx = <font class="keyword">true</font>, uint labelNumChar = 32, uint indentationStep = 2); +00256 +00261 <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="classNLMISC_1_1CHTimer.html#d7">displayHierarchicalByExecutionPath</a>(CLog *log= <a class="code" href="namespaceNLMISC.html#a10">InfoLog</a>, <font class="keywordtype">bool</font> displayEx = <font class="keyword">true</font>, uint labelNumChar = 32, uint indentationStep = 2); +00262 +00267 <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="classNLMISC_1_1CHTimer.html#d8">displayHierarchicalByExecutionPathSorted</a>(CLog *log= <a class="code" href="namespaceNLMISC.html#a10">InfoLog</a>, <a class="code" href="classNLMISC_1_1CHTimer.html#s8">TSortCriterion</a> criterion = <a class="code" href="classNLMISC_1_1CHTimer.html#s8s1">TotalTime</a>, <font class="keywordtype">bool</font> displayEx = <font class="keyword">true</font>, uint labelNumChar = 32, uint indentationStep = 2); +00268 +00270 <font class="keyword">static</font> <font class="keywordtype">void</font> <a class="code" href="classNLMISC_1_1CHTimer.html#d9">clear</a>(); +00271 +00276 <font class="preprocessor">#ifdef NL_CPU_INTEL</font> +00277 <font class="preprocessor"></font> <font class="keyword">static</font> uint64 getProcessorFrequency(<font class="keywordtype">bool</font> quick=<font class="keyword">false</font>); +00278 <font class="preprocessor">#endif</font> +00281 <font class="preprocessor">private:</font> +00282 <font class="preprocessor"></font> <font class="keyword">struct </font>CNode; +<a name="l00283"></a><a class="code" href="classNLMISC_1_1CHTimer.html#u0">00283</a> <font class="keyword">typedef</font> std::vector<CNode *> <a class="code" href="classNLMISC_1_1CHTimer.html#u0">TNodeVect</a>; +<a name="l00284"></a><a class="code" href="classNLMISC_1_1CHTimer.html#u1">00284</a> <font class="keyword">typedef</font> std::vector<CHTimer *> <a class="code" href="classNLMISC_1_1CHTimer.html#u1">TTimerVect</a>; +00285 <font class="comment">//</font> +<a name="l00287"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CNode.html">00287</a> <font class="comment"> struct CNode</font> +00288 { +<a name="l00289"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CNode.html#s0">00289</a> <font class="keyword">typedef</font> std::vector<double> TTimeVect; +00290 <font class="comment">//</font> +<a name="l00291"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CNode.html#m0">00291</a> CNode *Parent; +<a name="l00292"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CNode.html#m1">00292</a> <a class="code" href="classNLMISC_1_1CHTimer.html#u0">TNodeVect</a> Sons; +<a name="l00293"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CNode.html#m2">00293</a> <a class="code" href="classNLMISC_1_1CHTimer.html#a0">CHTimer</a> *Owner; <font class="comment">// the hierarchical timer this node is associated with </font> +<a name="l00294"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CNode.html#m3">00294</a> uint64 <a class="code" href="classNLMISC_1_1CHTimer.html#s8s1">TotalTime</a>; <font class="comment">// the total time spent in that node, including sons </font> +<a name="l00295"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CNode.html#m4">00295</a> uint64 LastSonsTotalTime; +<a name="l00296"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CNode.html#m5">00296</a> uint64 SonsTotalTime; <font class="comment">// maybe different from LastSonsTotalTime while benching the sons and if the display is called in a benched node</font> +<a name="l00297"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CNode.html#m6">00297</a> TTimeVect Measures; <font class="comment">// All time measures. Used only when standard deviation is wanted</font> +<a name="l00298"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CNode.html#m7">00298</a> uint64 <a class="code" href="classNLMISC_1_1CHTimer.html#s8s6">MinTime</a>; <font class="comment">// the minimum time spent in that node</font> +<a name="l00299"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CNode.html#m8">00299</a> uint64 <a class="code" href="classNLMISC_1_1CHTimer.html#s8s5">MaxTime</a>; <font class="comment">// the maximum time spent in that node</font> +<a name="l00300"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CNode.html#m9">00300</a> uint64 <a class="code" href="classNLMISC_1_1CHTimer.html#s8s4">NumVisits</a>; <font class="comment">// the number of time the execution has gone through this node </font> +00301 <font class="comment">//</font> +<a name="l00302"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CNode.html#m10">00302</a> uint64 SonsPreambule; <font class="comment">// preambule time for the sons </font> +<a name="l00303"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CNode.html#m11">00303</a> CSimpleClock Clock; <font class="comment">// a clock to do the measures at this node</font> +00304 <font class="comment">// ctor </font> +<a name="l00305"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CNode.html#a0">00305</a> CNode(<a class="code" href="classNLMISC_1_1CHTimer.html#a0">CHTimer</a> *owner = NULL, CNode *parent = NULL) : Parent(parent), Owner(owner) +00306 { +00307 reset(); +00308 } +00309 <font class="comment">// dtor</font> +00310 ~CNode(); +00311 <font class="comment">// Get the number of nodes in the tree starting at this node</font> +00312 uint getNumNodes() <font class="keyword">const</font>; +00313 <font class="comment">// release the sons, should not be benching when calling this</font> +00314 <font class="keywordtype">void</font> releaseSons(); +00315 <font class="comment">// reset this node measures</font> +<a name="l00316"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CNode.html#a4">00316</a> <font class="keywordtype">void</font> reset() +00317 { +00318 SonsTotalTime = 0; +00319 <a class="code" href="classNLMISC_1_1CHTimer.html#s8s1">TotalTime</a> = 0; +00320 <a class="code" href="classNLMISC_1_1CHTimer.html#s8s5">MaxTime</a> = 0; +00321 <a class="code" href="classNLMISC_1_1CHTimer.html#s8s6">MinTime</a> = (uint64) -1; +00322 <a class="code" href="classNLMISC_1_1CHTimer.html#s8s4">NumVisits</a> = 0; +00323 SonsPreambule = 0; +00324 LastSonsTotalTime = 0; +00325 <a class="code" href="namespaceNLMISC.html#a222">NLMISC::contReset</a>(Measures); +00326 } +00327 <font class="comment">// Display this node path</font> +00328 <font class="keywordtype">void</font> displayPath(CLog *log) <font class="keyword">const</font>; +00329 <font class="comment">// Get this node path</font> +00330 <font class="keywordtype">void</font> getPath(std::string &dest) <font class="keyword">const</font>; +00331 }; +00332 +<a name="l00336"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html">00336</a> <font class="keyword">struct </font>CStats +00337 { +<a name="l00338"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html#m0">00338</a> <font class="keywordtype">double</font> <a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html#m0">TimeStandardDeviation</a>; +<a name="l00339"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html#m1">00339</a> <font class="keywordtype">double</font> <a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html#m1">TotalTime</a>; +<a name="l00340"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html#m2">00340</a> <font class="keywordtype">double</font> <a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html#m2">TotalTimeWithoutSons</a>; +<a name="l00341"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html#m3">00341</a> <font class="keywordtype">double</font> <a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html#m3">MeanTime</a>; +<a name="l00342"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html#m4">00342</a> uint64 <a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html#m4">NumVisits</a>; +<a name="l00343"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html#m5">00343</a> <font class="keywordtype">double</font> <a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html#m5">MinTime</a>; +<a name="l00344"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html#m6">00344</a> <font class="keywordtype">double</font> <a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html#m6">MaxTime</a>; +00345 +00346 <font class="comment">// build stats from a single node</font> +00347 <font class="keywordtype">void</font> <a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html#a0">buildFromNode</a>(CNode *node, <font class="keywordtype">double</font> msPerTick); +00348 +00349 <font class="comment">// build stats from a vector of nodes</font> +00350 <font class="keywordtype">void</font> <a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html#a1">buildFromNodes</a>(CNode **firstNode, uint numNodes, <font class="keywordtype">double</font> msPerTick); +00351 +00352 <font class="comment">// display stats</font> +00353 <font class="keywordtype">void</font> <a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html#a2">display</a>(CLog *log, <font class="keywordtype">bool</font> displayEx = <font class="keyword">false</font>, <font class="keywordtype">bool</font> wantStandardDeviation = <font class="keyword">false</font>); +00354 +00358 <font class="keywordtype">void</font> <a class="code" href="structNLMISC_1_1CHTimer_1_1CStats.html#a3">getStats</a>(std::string &dest, <font class="keywordtype">bool</font> statEx, <font class="keywordtype">double</font> rootTotalTime, <font class="keywordtype">bool</font> wantStandardDeviation = <font class="keyword">false</font>); +00359 }; +00360 <font class="comment">// Stats and the associated timer</font> +<a name="l00361"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CTimerStat.html">00361</a> <font class="keyword">struct </font>CTimerStat : <font class="keyword">public</font> CStats +00362 { +<a name="l00363"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CTimerStat.html#m0">00363</a> CHTimer *<a class="code" href="structNLMISC_1_1CHTimer_1_1CTimerStat.html#m0">Timer</a>; +00364 }; +00365 <font class="comment">// Stats and the associated node</font> +<a name="l00366"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CNodeStat.html">00366</a> <font class="keyword">struct </font>CNodeStat : <font class="keyword">public</font> CStats +00367 { +<a name="l00368"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CNodeStat.html#m0">00368</a> CNode *<a class="code" href="structNLMISC_1_1CHTimer_1_1CNodeStat.html#m0">Node</a>; +00369 }; +00370 +00371 +<a name="l00375"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CStatSorter.html">00375</a> <font class="keyword">struct </font>CStatSorter +00376 { +<a name="l00377"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CStatSorter.html#a0">00377</a> <a class="code" href="structNLMISC_1_1CHTimer_1_1CStatSorter.html#a0">CStatSorter</a>(TSortCriterion criterion = TotalTime) : <a class="code" href="structNLMISC_1_1CHTimer_1_1CStatSorter.html#m0">Criterion</a>(criterion) +00378 {} +<a name="l00379"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CStatSorter.html#m0">00379</a> TSortCriterion <a class="code" href="structNLMISC_1_1CHTimer_1_1CStatSorter.html#m0">Criterion</a>; +00380 <font class="comment">// Less operator</font> +00381 <font class="keywordtype">bool</font> <a class="code" href="structNLMISC_1_1CHTimer_1_1CStatSorter.html#a1">operator()</a>(<font class="keyword">const</font> CStats *lhs, <font class="keyword">const</font> CStats *rhs); +00382 }; +00383 +00384 +<a name="l00388"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CExamStackEntry.html">00388</a> <font class="keyword">struct </font>CExamStackEntry +00389 { +00390 <font class="comment">// The node.</font> +<a name="l00391"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CExamStackEntry.html#m0">00391</a> CNode *<a class="code" href="structNLMISC_1_1CHTimer_1_1CExamStackEntry.html#m0">Node</a>; +00392 <font class="comment">// The current child to process.</font> +<a name="l00393"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CExamStackEntry.html#m1">00393</a> uint <a class="code" href="structNLMISC_1_1CHTimer_1_1CExamStackEntry.html#m1">CurrentChild</a>; +00394 <font class="comment">// The childs, sorted by specific criterion.</font> +<a name="l00395"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CExamStackEntry.html#m2">00395</a> std::vector<CNode*> <a class="code" href="structNLMISC_1_1CHTimer_1_1CExamStackEntry.html#m2">Children</a>; +00396 +<a name="l00397"></a><a class="code" href="structNLMISC_1_1CHTimer_1_1CExamStackEntry.html#a0">00397</a> <font class="keyword">explicit</font> <a class="code" href="structNLMISC_1_1CHTimer_1_1CExamStackEntry.html#a0">CExamStackEntry</a>(CNode *node) +00398 { +00399 <a class="code" href="structNLMISC_1_1CHTimer_1_1CExamStackEntry.html#m0">Node</a>= node; +00400 <a class="code" href="structNLMISC_1_1CHTimer_1_1CExamStackEntry.html#m1">CurrentChild</a>= 0; +00401 } +00402 }; +00403 +00404 +00405 <font class="keyword">private</font>: +00406 <font class="comment">// walk the tree to current execution node, creating it if necessary</font> +00407 <font class="keywordtype">void</font> <a class="code" href="classNLMISC_1_1CHTimer.html#c0">walkTreeToCurrent</a>(); +00408 <font class="keyword">private</font>: +00409 <font class="comment">// node name</font> +<a name="l00410"></a><a class="code" href="classNLMISC_1_1CHTimer.html#o0">00410</a> <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="classNLMISC_1_1CHTimer.html#o0">_Name</a>; +00411 <font class="comment">// the parent timer</font> +<a name="l00412"></a><a class="code" href="classNLMISC_1_1CHTimer.html#o1">00412</a> <a class="code" href="classNLMISC_1_1CHTimer.html#a0">CHTimer</a> *<a class="code" href="classNLMISC_1_1CHTimer.html#o1">_Parent</a>; +00413 <font class="comment">// the sons timers</font> +<a name="l00414"></a><a class="code" href="classNLMISC_1_1CHTimer.html#o2">00414</a> <a class="code" href="classNLMISC_1_1CHTimer.html#u1">TTimerVect</a> <a class="code" href="classNLMISC_1_1CHTimer.html#o2">_Sons</a>; +00415 <font class="comment">// Tells if this is a root node</font> +<a name="l00416"></a><a class="code" href="classNLMISC_1_1CHTimer.html#o3">00416</a> <font class="keywordtype">bool</font> <a class="code" href="classNLMISC_1_1CHTimer.html#o3">_IsRoot</a>; +00417 <font class="keyword">private</font>: +00418 <font class="comment">// root node of the hierarchy</font> +00419 <font class="keyword">static</font> CNode <a class="code" href="classNLMISC_1_1CHTimer.html#r0">_RootNode</a>; +00420 <font class="comment">// the current node of the execution</font> +00421 <font class="keyword">static</font> CNode *<a class="code" href="classNLMISC_1_1CHTimer.html#r1">_CurrNode</a>; +00422 <font class="comment">// the root timer</font> +00423 <font class="keyword">static</font> <a class="code" href="classNLMISC_1_1CHTimer.html#a0">CHTimer</a> <a class="code" href="classNLMISC_1_1CHTimer.html#r2">_RootTimer</a>; +00427 <font class="keyword">static</font> CSimpleClock <a class="code" href="classNLMISC_1_1CHTimer.html#r3">_PreambuleClock</a>; +00428 <font class="comment">//</font> +00429 <font class="keyword">static</font> <font class="keywordtype">double</font> <a class="code" href="classNLMISC_1_1CHTimer.html#r4">_MsPerTick</a>; +00430 <font class="comment">//</font> +00431 <font class="keyword">static</font> <font class="keywordtype">bool</font> <a class="code" href="classNLMISC_1_1CHTimer.html#r5">_Benching</a>; +00432 <font class="comment">//</font> +00433 <font class="keyword">static</font> <font class="keywordtype">bool</font> <a class="code" href="classNLMISC_1_1CHTimer.html#r6">_BenchStartedOnce</a>; +00434 <font class="comment">//</font> +00435 <font class="keyword">static</font> <font class="keywordtype">bool</font> <a class="code" href="classNLMISC_1_1CHTimer.html#r7">_WantStandardDeviation</a>; +00436 <font class="comment">//</font> +00437 <font class="keyword">static</font> <a class="code" href="classNLMISC_1_1CHTimer.html#a0">CHTimer</a> *<a class="code" href="classNLMISC_1_1CHTimer.html#r8">_CurrTimer</a>; +00438 +00439 }; +00440 +00441 +00442 +<a name="l00459"></a><a class="code" href="classNLMISC_1_1CAutoTimer.html">00459</a> <font class="keyword">class </font>CAutoTimer +00460 { +00461 <font class="keyword">private</font>: +<a name="l00462"></a><a class="code" href="classNLMISC_1_1CAutoTimer.html#o0">00462</a> CHTimer *<a class="code" href="classNLMISC_1_1CAutoTimer.html#o0">_HTimer</a>; +<a name="l00463"></a><a class="code" href="classNLMISC_1_1CAutoTimer.html#o1">00463</a> <font class="keywordtype">bool</font> <a class="code" href="classNLMISC_1_1CAutoTimer.html#o1">_DisplayAfter</a>; +00464 <font class="keyword">public</font>: +<a name="l00465"></a><a class="code" href="classNLMISC_1_1CAutoTimer.html#a0">00465</a> <a class="code" href="classNLMISC_1_1CAutoTimer.html#a0">CAutoTimer</a>(CHTimer *timer, <font class="keywordtype">bool</font> displayAfter=<font class="keyword">false</font>) : _HTimer(timer), <a class="code" href="classNLMISC_1_1CAutoTimer.html#o1">_DisplayAfter</a>(displayAfter) { _HTimer->before(); } +<a name="l00466"></a><a class="code" href="classNLMISC_1_1CAutoTimer.html#a1">00466</a> <a class="code" href="classNLMISC_1_1CAutoTimer.html#a1">~CAutoTimer</a>() { _HTimer->after(<a class="code" href="classNLMISC_1_1CAutoTimer.html#o1">_DisplayAfter</a>); } +00467 }; +00468 +00469 +00471 <font class="comment">// inlines implementation //</font> +00473 <font class="comment">#if 0</font> +00474 <font class="comment">//===============================================</font> +00475 <font class="keyword">inline</font> <font class="keywordtype">void</font> CHTimer::before() +00476 { +00477 <font class="keywordflow">if</font> (!_Benching) <font class="keywordflow">return</font>; +00478 _PreambuleClock.start(); +00479 walkTreeToCurrent(); +00480 ++ _CurrNode->NumVisits; +00481 _CurrNode->SonsPreambule = 0; +00482 <font class="keywordflow">if</font> (!_Parent && _CurrTimer != <font class="keyword">this</font>) +00483 { +00484 _Parent = _CurrTimer; +00485 <font class="comment">// register as a son of the parent</font> +00486 _Parent->_Sons.push_back(<font class="keyword">this</font>); +00487 } +00488 _CurrTimer = <font class="keyword">this</font>; +00489 _PreambuleClock.stop(); +00490 <font class="keywordflow">if</font> (_CurrNode->Parent) +00491 { +00492 _CurrNode->Parent->SonsPreambule += _PreambuleClock.getNumTicks(); +00493 } +00494 _CurrNode->Clock.start(); +00495 } +00496 +00497 <font class="comment">//===============================================</font> +00498 <font class="keyword">inline</font> <font class="keywordtype">void</font> CHTimer::after(<font class="keywordtype">bool</font> displayAfter <font class="comment">/*= false*/</font>) +00499 { +00500 <font class="keywordflow">if</font> (!_Benching) <font class="keywordflow">return</font>; +00501 _CurrNode->Clock.stop(); +00502 _PreambuleClock.start(); +00503 <font class="comment">// </font> +00504 <font class="comment">//nlinfo((std::string("clock ") + _Name + std::string(" time = ") + NLMISC::toString(_CurrNode->Clock.getNumTicks())).c_str());</font> +00505 uint64 numTicks = _CurrNode->Clock.getNumTicks() - _CurrNode->SonsPreambule - (CSimpleClock::getStartStopNumTicks() << 1); +00506 +00507 _CurrNode->TotalTime += numTicks; +00508 _CurrNode->MinTime = <a class="code" href="bit__set_8cpp.html#a0">std::min</a>(_CurrNode->MinTime, numTicks); +00509 _CurrNode->MaxTime = std::max(_CurrNode->MaxTime, numTicks); +00510 _CurrNode->LastSonsTotalTime = _CurrNode->SonsTotalTime; +00511 <font class="keywordflow">if</font> (displayAfter) +00512 { +00513 <a class="code" href="debug_8h.html#a1">nlinfo</a>(<font class="stringliteral">"FEHTIMER> %s %.3fms loop number %d"</font>, _Name, numTicks * _MsPerTick, _CurrNode->NumVisits); +00514 } +00515 <font class="comment">//</font> +00516 <font class="keywordflow">if</font> (_WantStandardDeviation) +00517 { +00518 _CurrNode->Measures.push_back(numTicks * _MsPerTick); +00519 } +00520 <font class="comment">//</font> +00521 <font class="keywordflow">if</font> (_Parent) +00522 { +00523 _CurrTimer = _Parent; +00524 } +00525 <font class="comment">//</font> +00526 <font class="keywordflow">if</font> (_CurrNode->Parent) +00527 { +00528 _PreambuleClock.stop(); +00529 _CurrNode = _CurrNode->Parent; +00530 _CurrNode->SonsTotalTime += numTicks; +00531 _CurrNode->SonsPreambule += _PreambuleClock.getNumTicks(); +00532 } +00533 <font class="keywordflow">else</font> +00534 { +00535 _PreambuleClock.stop(); +00536 } +00537 } +00538 <font class="preprocessor">#endif</font> +00539 <font class="preprocessor"></font> +00540 } <font class="comment">// NLMISC</font> +00541 +00542 <font class="preprocessor">#endif // NL_HIERARCHICAL_TIMER_H</font> +00543 <font class="preprocessor"></font> +00544 <font class="comment">/* End of hierarchical_timer.h */</font> +00545 +</pre></div> + +<!-- footer --> +<BR><FONT Size=+5> </FONT> +</TD> +<TD WIDTH=15><IMG SRC=http://www.nevrax.org/inc/img/pixel.gif WIDTH=15 HEIGHT=15 BORDER=0 ALT=""></TD> +</TR> +</TABLE> +</BODY> +</HTML> |