Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 17b3b183e611d5215dd0c74920f6f6d9 > files > 66

jack-audio-connection-kit-devel-1.9.7-1.fc15.i686.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>Jack2: JackEngineProfiling.cpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.3 -->
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">Jack2&#160;<span id="projectnumber">1.9.7</span></div>
  </td>
 </tr>
 </tbody>
</table>
</div>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
<div class="header">
  <div class="headertitle">
<h1>JackEngineProfiling.cpp</h1>  </div>
</div>
<div class="contents">
<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment">Copyright (C) 2008 Grame &amp; RTL</span>
<a name="l00003"></a>00003 <span class="comment"></span>
<a name="l00004"></a>00004 <span class="comment">This program is free software; you can redistribute it and/or modify</span>
<a name="l00005"></a>00005 <span class="comment">it under the terms of the GNU Lesser General Public License as published by</span>
<a name="l00006"></a>00006 <span class="comment">the Free Software Foundation; either version 2.1 of the License, or</span>
<a name="l00007"></a>00007 <span class="comment">(at your option) any later version.</span>
<a name="l00008"></a>00008 <span class="comment"></span>
<a name="l00009"></a>00009 <span class="comment">This program is distributed in the hope that it will be useful,</span>
<a name="l00010"></a>00010 <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00011"></a>00011 <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<a name="l00012"></a>00012 <span class="comment">GNU Lesser General Public License for more details.</span>
<a name="l00013"></a>00013 <span class="comment"></span>
<a name="l00014"></a>00014 <span class="comment">You should have received a copy of the GNU Lesser General Public License</span>
<a name="l00015"></a>00015 <span class="comment">along with this program; if not, write to the Free Software </span>
<a name="l00016"></a>00016 <span class="comment">Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.</span>
<a name="l00017"></a>00017 <span class="comment"></span>
<a name="l00018"></a>00018 <span class="comment">*/</span>
<a name="l00019"></a>00019 
<a name="l00020"></a>00020 <span class="preprocessor">#include &quot;JackEngineProfiling.h&quot;</span>
<a name="l00021"></a>00021 <span class="preprocessor">#include &quot;JackGraphManager.h&quot;</span>
<a name="l00022"></a>00022 <span class="preprocessor">#include &quot;JackClientControl.h&quot;</span>
<a name="l00023"></a>00023 <span class="preprocessor">#include &quot;JackEngineControl.h&quot;</span>
<a name="l00024"></a>00024 <span class="preprocessor">#include &quot;JackClientInterface.h&quot;</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include &quot;JackGlobals.h&quot;</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include &quot;JackTime.h&quot;</span>
<a name="l00027"></a>00027 
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;iostream&gt;</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include &lt;fstream&gt;</span>
<a name="l00030"></a>00030 
<a name="l00031"></a>00031 <span class="keyword">namespace </span>Jack
<a name="l00032"></a>00032 {
<a name="l00033"></a>00033 
<a name="l00034"></a>00034 JackEngineProfiling::JackEngineProfiling():fAudioCycle(0),fMeasuredClient(0)
<a name="l00035"></a>00035 {
<a name="l00036"></a>00036     <a class="code" href="group__ServerControl.html#ga21328fd378306e0da7270952196eb717">jack_info</a>(<span class="stringliteral">&quot;Engine profiling activated, beware %ld MBytes are needed to record profiling points...&quot;</span>, <span class="keyword">sizeof</span>(fProfileTable) / (1024 * 1024));
<a name="l00037"></a>00037     
<a name="l00038"></a>00038     <span class="comment">// Force memory page in</span>
<a name="l00039"></a>00039     memset(fProfileTable, 0, <span class="keyword">sizeof</span>(fProfileTable));
<a name="l00040"></a>00040 }
<a name="l00041"></a>00041 
<a name="l00042"></a>00042 JackEngineProfiling::~JackEngineProfiling()
<a name="l00043"></a>00043 {
<a name="l00044"></a>00044     std::ofstream fStream(<span class="stringliteral">&quot;JackEngineProfiling.log&quot;</span>, std::ios_base::ate);
<a name="l00045"></a>00045     <a class="code" href="group__ServerControl.html#ga21328fd378306e0da7270952196eb717">jack_info</a>(<span class="stringliteral">&quot;Write server and clients timing data...&quot;</span>);
<a name="l00046"></a>00046 
<a name="l00047"></a>00047     <span class="keywordflow">if</span> (!fStream.is_open()) {
<a name="l00048"></a>00048         <a class="code" href="group__ServerControl.html#gac6448626e0b75fc6d9da1ccbdca0355e">jack_error</a>(<span class="stringliteral">&quot;JackEngineProfiling::Save cannot open JackEngineProfiling.log file&quot;</span>);
<a name="l00049"></a>00049     } <span class="keywordflow">else</span> {
<a name="l00050"></a>00050     
<a name="l00051"></a>00051         <span class="comment">// For each measured point</span>
<a name="l00052"></a>00052         <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 2; i &lt; TIME_POINTS; i++) {
<a name="l00053"></a>00053             
<a name="l00054"></a>00054             <span class="comment">// Driver timing values</span>
<a name="l00055"></a>00055             <span class="keywordtype">long</span> d1 = long(fProfileTable[i].fCurCycleBegin - fProfileTable[i - 1].fCurCycleBegin);
<a name="l00056"></a>00056             <span class="keywordtype">long</span> d2 = long(fProfileTable[i].fPrevCycleEnd - fProfileTable[i - 1].fCurCycleBegin);
<a name="l00057"></a>00057             
<a name="l00058"></a>00058             <span class="keywordflow">if</span> (d1 &lt;= 0 || fProfileTable[i].fAudioCycle &lt;= 0)
<a name="l00059"></a>00059                 <span class="keywordflow">continue</span>; <span class="comment">// Skip non valid cycles</span>
<a name="l00060"></a>00060                 
<a name="l00061"></a>00061             <span class="comment">// Print driver delta and end cycle</span>
<a name="l00062"></a>00062             fStream &lt;&lt; d1 &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span> &lt;&lt; d2 &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span>;
<a name="l00063"></a>00063              
<a name="l00064"></a>00064             <span class="comment">// For each measured client</span>
<a name="l00065"></a>00065             <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> j = 0; j &lt; fMeasuredClient; j++) { 
<a name="l00066"></a>00066             
<a name="l00067"></a>00067                 <span class="keywordtype">int</span> ref = fIntervalTable[j].fRefNum;
<a name="l00068"></a>00068             
<a name="l00069"></a>00069                 <span class="comment">// Is valid client cycle </span>
<a name="l00070"></a>00070                  <span class="keywordflow">if</span> (fProfileTable[i].fClientTable[ref].fStatus != NotTriggered) {
<a name="l00071"></a>00071              
<a name="l00072"></a>00072                     <span class="keywordtype">long</span> d5 = long(fProfileTable[i].fClientTable[ref].fSignaledAt - fProfileTable[i - 1].fCurCycleBegin);
<a name="l00073"></a>00073                     <span class="keywordtype">long</span> d6 = long(fProfileTable[i].fClientTable[ref].fAwakeAt - fProfileTable[i - 1].fCurCycleBegin);
<a name="l00074"></a>00074                     <span class="keywordtype">long</span> d7 = long(fProfileTable[i].fClientTable[ref].fFinishedAt - fProfileTable[i - 1].fCurCycleBegin);
<a name="l00075"></a>00075                         
<a name="l00076"></a>00076                      fStream &lt;&lt; ref &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span> ;
<a name="l00077"></a>00077                      fStream &lt;&lt; ((d5 &gt; 0) ? d5 : 0) &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span>;
<a name="l00078"></a>00078                      fStream &lt;&lt; ((d6 &gt; 0) ? d6 : 0) &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span> ;
<a name="l00079"></a>00079                      fStream &lt;&lt; ((d7 &gt; 0) ? d7 : 0) &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span>;
<a name="l00080"></a>00080                      fStream &lt;&lt; ((d6 &gt; 0 &amp;&amp; d5 &gt; 0) ? (d6 - d5) : 0) &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span> ;
<a name="l00081"></a>00081                      fStream &lt;&lt; ((d7 &gt; 0 &amp;&amp; d6 &gt; 0) ? (d7 - d6) : 0) &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span> ;
<a name="l00082"></a>00082                      fStream &lt;&lt; fProfileTable[i].fClientTable[ref].fStatus &lt;&lt; <span class="stringliteral">&quot;\t&quot;</span> ;;
<a name="l00083"></a>00083                 
<a name="l00084"></a>00084                  } <span class="keywordflow">else</span> { <span class="comment">// Print tabs</span>
<a name="l00085"></a>00085                      fStream &lt;&lt;  <span class="stringliteral">&quot;\t  \t  \t  \t  \t  \t \t&quot;</span>;
<a name="l00086"></a>00086                 }
<a name="l00087"></a>00087             }
<a name="l00088"></a>00088             
<a name="l00089"></a>00089             <span class="comment">// Terminate line</span>
<a name="l00090"></a>00090             fStream &lt;&lt; std::endl;
<a name="l00091"></a>00091         }
<a name="l00092"></a>00092     }
<a name="l00093"></a>00093     
<a name="l00094"></a>00094     <span class="comment">// Driver period</span>
<a name="l00095"></a>00095      std::ofstream fStream1(<span class="stringliteral">&quot;Timing1.plot&quot;</span>, std::ios_base::ate);
<a name="l00096"></a>00096  
<a name="l00097"></a>00097     <span class="keywordflow">if</span> (!fStream1.is_open()) {
<a name="l00098"></a>00098         <a class="code" href="group__ServerControl.html#gac6448626e0b75fc6d9da1ccbdca0355e">jack_error</a>(<span class="stringliteral">&quot;JackEngineProfiling::Save cannot open Timing1.plot file&quot;</span>);
<a name="l00099"></a>00099     } <span class="keywordflow">else</span> {
<a name="l00100"></a>00100         
<a name="l00101"></a>00101         fStream1 &lt;&lt; <span class="stringliteral">&quot;set grid\n&quot;</span>;
<a name="l00102"></a>00102         fStream1 &lt;&lt;  <span class="stringliteral">&quot;set title \&quot;Audio driver timing\&quot;\n&quot;</span>;
<a name="l00103"></a>00103         fStream1 &lt;&lt;  <span class="stringliteral">&quot;set xlabel \&quot;audio cycles\&quot;\n&quot;</span>;
<a name="l00104"></a>00104         fStream1 &lt;&lt;  <span class="stringliteral">&quot;set ylabel \&quot;usec\&quot;\n&quot;</span>;
<a name="l00105"></a>00105         fStream1 &lt;&lt;  <span class="stringliteral">&quot;plot \&quot;JackEngineProfiling.log\&quot; using 1 title \&quot;Audio period\&quot; with lines \n&quot;</span>;
<a name="l00106"></a>00106         
<a name="l00107"></a>00107         fStream1 &lt;&lt;  <span class="stringliteral">&quot;set output &#39;Timing1.svg\n&quot;</span>;
<a name="l00108"></a>00108         fStream1 &lt;&lt;  <span class="stringliteral">&quot;set terminal svg\n&quot;</span>;
<a name="l00109"></a>00109         
<a name="l00110"></a>00110         fStream1 &lt;&lt;  <span class="stringliteral">&quot;set grid\n&quot;</span>;
<a name="l00111"></a>00111         fStream1 &lt;&lt;  <span class="stringliteral">&quot;set title \&quot;Audio driver timing\&quot;\n&quot;</span>;
<a name="l00112"></a>00112         fStream1 &lt;&lt;  <span class="stringliteral">&quot;set xlabel \&quot;audio cycles\&quot;\n&quot;</span>;
<a name="l00113"></a>00113         fStream1 &lt;&lt;  <span class="stringliteral">&quot;set ylabel \&quot;usec\&quot;\n&quot;</span>;
<a name="l00114"></a>00114         fStream1 &lt;&lt;  <span class="stringliteral">&quot;plot \&quot;JackEngineProfiling.log\&quot; using 1 title \&quot;Audio period\&quot; with lines \n&quot;</span>;
<a name="l00115"></a>00115         fStream1 &lt;&lt;  <span class="stringliteral">&quot;unset output\n&quot;</span>;
<a name="l00116"></a>00116     }
<a name="l00117"></a>00117     
<a name="l00118"></a>00118     <span class="comment">// Driver end date</span>
<a name="l00119"></a>00119     std::ofstream fStream2(<span class="stringliteral">&quot;Timing2.plot&quot;</span>, std::ios_base::ate);
<a name="l00120"></a>00120   
<a name="l00121"></a>00121     <span class="keywordflow">if</span> (!fStream2.is_open()) {
<a name="l00122"></a>00122         <a class="code" href="group__ServerControl.html#gac6448626e0b75fc6d9da1ccbdca0355e">jack_error</a>(<span class="stringliteral">&quot;JackEngineProfiling::Save cannot open Timing2.plot file&quot;</span>);
<a name="l00123"></a>00123     } <span class="keywordflow">else</span> {
<a name="l00124"></a>00124    
<a name="l00125"></a>00125         fStream2 &lt;&lt; <span class="stringliteral">&quot;set grid\n&quot;</span>;
<a name="l00126"></a>00126         fStream2 &lt;&lt;  <span class="stringliteral">&quot;set title \&quot;Driver end date\&quot;\n&quot;</span>;
<a name="l00127"></a>00127         fStream2 &lt;&lt;  <span class="stringliteral">&quot;set xlabel \&quot;audio cycles\&quot;\n&quot;</span>;
<a name="l00128"></a>00128         fStream2 &lt;&lt;  <span class="stringliteral">&quot;set ylabel \&quot;usec\&quot;\n&quot;</span>;
<a name="l00129"></a>00129         fStream2 &lt;&lt;  <span class="stringliteral">&quot;plot  \&quot;JackEngineProfiling.log\&quot; using 2 title \&quot;Driver end date\&quot; with lines \n&quot;</span>;
<a name="l00130"></a>00130     
<a name="l00131"></a>00131         fStream2 &lt;&lt;  <span class="stringliteral">&quot;set output &#39;Timing2.svg\n&quot;</span>;
<a name="l00132"></a>00132         fStream2 &lt;&lt;  <span class="stringliteral">&quot;set terminal svg\n&quot;</span>;
<a name="l00133"></a>00133     
<a name="l00134"></a>00134         fStream2 &lt;&lt;  <span class="stringliteral">&quot;set grid\n&quot;</span>;
<a name="l00135"></a>00135         fStream2 &lt;&lt;  <span class="stringliteral">&quot;set title \&quot;Driver end date\&quot;\n&quot;</span>;
<a name="l00136"></a>00136         fStream2 &lt;&lt;  <span class="stringliteral">&quot;set xlabel \&quot;audio cycles\&quot;\n&quot;</span>;
<a name="l00137"></a>00137         fStream2 &lt;&lt;  <span class="stringliteral">&quot;set ylabel \&quot;usec\&quot;\n&quot;</span>;
<a name="l00138"></a>00138         fStream2 &lt;&lt;  <span class="stringliteral">&quot;plot  \&quot;JackEngineProfiling.log\&quot; using 2 title \&quot;Driver end date\&quot; with lines \n&quot;</span>;
<a name="l00139"></a>00139         fStream2 &lt;&lt;  <span class="stringliteral">&quot;unset output\n&quot;</span>;
<a name="l00140"></a>00140     }
<a name="l00141"></a>00141         
<a name="l00142"></a>00142     <span class="comment">// Clients end date</span>
<a name="l00143"></a>00143     <span class="keywordflow">if</span> (fMeasuredClient &gt; 0) {
<a name="l00144"></a>00144         std::ofstream fStream3(<span class="stringliteral">&quot;Timing3.plot&quot;</span>, std::ios_base::ate);
<a name="l00145"></a>00145         
<a name="l00146"></a>00146         <span class="keywordflow">if</span> (!fStream3.is_open()) {
<a name="l00147"></a>00147             <a class="code" href="group__ServerControl.html#gac6448626e0b75fc6d9da1ccbdca0355e">jack_error</a>(<span class="stringliteral">&quot;JackEngineProfiling::Save cannot open Timing3.plot file&quot;</span>);
<a name="l00148"></a>00148         } <span class="keywordflow">else</span> {
<a name="l00149"></a>00149         
<a name="l00150"></a>00150             fStream3 &lt;&lt; <span class="stringliteral">&quot;set multiplot\n&quot;</span>;
<a name="l00151"></a>00151             fStream3 &lt;&lt; <span class="stringliteral">&quot;set grid\n&quot;</span>;
<a name="l00152"></a>00152             fStream3 &lt;&lt; <span class="stringliteral">&quot;set title \&quot;Clients end date\&quot;\n&quot;</span>;
<a name="l00153"></a>00153             fStream3 &lt;&lt; <span class="stringliteral">&quot;set xlabel \&quot;audio cycles\&quot;\n&quot;</span>;
<a name="l00154"></a>00154             fStream3 &lt;&lt; <span class="stringliteral">&quot;set ylabel \&quot;usec\&quot;\n&quot;</span>;
<a name="l00155"></a>00155             fStream3 &lt;&lt; <span class="stringliteral">&quot;plot &quot;</span>;
<a name="l00156"></a>00156             <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; fMeasuredClient; i++) {
<a name="l00157"></a>00157                 <span class="keywordflow">if</span> (i == 0) {
<a name="l00158"></a>00158                     <span class="keywordflow">if</span> (i + 1 == fMeasuredClient) { <span class="comment">// Last client</span>
<a name="l00159"></a>00159                         fStream3 &lt;&lt; <span class="stringliteral">&quot;\&quot;JackEngineProfiling.log\&quot; using 1 title \&quot;Audio period\&quot; with lines,\&quot;JackEngineProfiling.log\&quot; using &quot;</span>;
<a name="l00160"></a>00160                         fStream3 &lt;&lt;  ((i + 1) * 7) - 1;
<a name="l00161"></a>00161                         fStream3 &lt;&lt; <span class="stringliteral">&quot; title \&quot;&quot;</span> &lt;&lt; fIntervalTable[i].fName &lt;&lt; <span class="stringliteral">&quot;\&quot;with lines&quot;</span>;
<a name="l00162"></a>00162                      } <span class="keywordflow">else</span> {
<a name="l00163"></a>00163                         fStream3 &lt;&lt; <span class="stringliteral">&quot;\&quot;JackEngineProfiling.log\&quot; using 1 title \&quot;Audio period\&quot; with lines,\&quot;JackEngineProfiling.log\&quot; using &quot;</span>;
<a name="l00164"></a>00164                         fStream3 &lt;&lt;  ((i + 1) * 7) - 1;
<a name="l00165"></a>00165                         fStream3 &lt;&lt; <span class="stringliteral">&quot; title \&quot;&quot;</span> &lt;&lt; fIntervalTable[i].fName &lt;&lt; <span class="stringliteral">&quot;\&quot;with lines,&quot;</span>;
<a name="l00166"></a>00166                     }
<a name="l00167"></a>00167                 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (i + 1 == fMeasuredClient) { <span class="comment">// Last client</span>
<a name="l00168"></a>00168                     fStream3 &lt;&lt; <span class="stringliteral">&quot;\&quot;JackEngineProfiling.log\&quot; using &quot;</span> &lt;&lt; ((i + 1) * 7) - 1  &lt;&lt; <span class="stringliteral">&quot; title \&quot;&quot;</span> &lt;&lt; fIntervalTable[i].fName &lt;&lt; <span class="stringliteral">&quot;\&quot; with lines&quot;</span>;
<a name="l00169"></a>00169                 } <span class="keywordflow">else</span> {
<a name="l00170"></a>00170                     fStream3 &lt;&lt; <span class="stringliteral">&quot;\&quot;JackEngineProfiling.log\&quot; using &quot;</span> &lt;&lt; ((i + 1) * 7) - 1  &lt;&lt; <span class="stringliteral">&quot; title \&quot;&quot;</span> &lt;&lt; fIntervalTable[i].fName &lt;&lt; <span class="stringliteral">&quot;\&quot; with lines,&quot;</span>;
<a name="l00171"></a>00171                 }
<a name="l00172"></a>00172             }
<a name="l00173"></a>00173         
<a name="l00174"></a>00174             fStream3 &lt;&lt; <span class="stringliteral">&quot;\n unset multiplot\n&quot;</span>;  
<a name="l00175"></a>00175             fStream3 &lt;&lt; <span class="stringliteral">&quot;set output &#39;Timing3.svg\n&quot;</span>;
<a name="l00176"></a>00176             fStream3 &lt;&lt; <span class="stringliteral">&quot;set terminal svg\n&quot;</span>;
<a name="l00177"></a>00177         
<a name="l00178"></a>00178             fStream3 &lt;&lt; <span class="stringliteral">&quot;set multiplot\n&quot;</span>;
<a name="l00179"></a>00179             fStream3 &lt;&lt; <span class="stringliteral">&quot;set grid\n&quot;</span>;
<a name="l00180"></a>00180             fStream3 &lt;&lt; <span class="stringliteral">&quot;set title \&quot;Clients end date\&quot;\n&quot;</span>;
<a name="l00181"></a>00181             fStream3 &lt;&lt; <span class="stringliteral">&quot;set xlabel \&quot;audio cycles\&quot;\n&quot;</span>;
<a name="l00182"></a>00182             fStream3 &lt;&lt; <span class="stringliteral">&quot;set ylabel \&quot;usec\&quot;\n&quot;</span>;
<a name="l00183"></a>00183             fStream3 &lt;&lt; <span class="stringliteral">&quot;plot &quot;</span>;
<a name="l00184"></a>00184             <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; fMeasuredClient; i++) {
<a name="l00185"></a>00185                 <span class="keywordflow">if</span> (i == 0) {
<a name="l00186"></a>00186                     <span class="keywordflow">if</span> ((i + 1) == fMeasuredClient) { <span class="comment">// Last client</span>
<a name="l00187"></a>00187                         fStream3 &lt;&lt; <span class="stringliteral">&quot;\&quot;JackEngineProfiling.log\&quot; using 1 title \&quot;Audio period\&quot; with lines,\&quot;JackEngineProfiling.log\&quot; using &quot;</span>;
<a name="l00188"></a>00188                         fStream3 &lt;&lt;  ((i + 1) * 7) - 1;
<a name="l00189"></a>00189                         fStream3 &lt;&lt; <span class="stringliteral">&quot; title \&quot;&quot;</span> &lt;&lt; fIntervalTable[i].fName &lt;&lt; <span class="stringliteral">&quot;\&quot;with lines&quot;</span>;
<a name="l00190"></a>00190                     } <span class="keywordflow">else</span> {
<a name="l00191"></a>00191                         fStream3 &lt;&lt; <span class="stringliteral">&quot;\&quot;JackEngineProfiling.log\&quot; using 1 title \&quot;Audio period\&quot; with lines,\&quot;JackEngineProfiling.log\&quot; using &quot;</span>;
<a name="l00192"></a>00192                         fStream3 &lt;&lt;  ((i + 1) * 7) - 1;
<a name="l00193"></a>00193                         fStream3 &lt;&lt; <span class="stringliteral">&quot; title \&quot;&quot;</span> &lt;&lt; fIntervalTable[i].fName &lt;&lt; <span class="stringliteral">&quot;\&quot;with lines,&quot;</span>;
<a name="l00194"></a>00194                     }
<a name="l00195"></a>00195                 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((i + 1) == fMeasuredClient) { <span class="comment">// Last client</span>
<a name="l00196"></a>00196                     fStream3 &lt;&lt; <span class="stringliteral">&quot;\&quot;JackEngineProfiling.log\&quot; using &quot;</span> &lt;&lt; ((i + 1) * 7) - 1  &lt;&lt; <span class="stringliteral">&quot; title \&quot;&quot;</span> &lt;&lt; fIntervalTable[i].fName &lt;&lt; <span class="stringliteral">&quot;\&quot; with lines&quot;</span>;
<a name="l00197"></a>00197                 } <span class="keywordflow">else</span> {
<a name="l00198"></a>00198                     fStream3 &lt;&lt; <span class="stringliteral">&quot;\&quot;JackEngineProfiling.log\&quot; using &quot;</span> &lt;&lt; ((i + 1) * 7) - 1  &lt;&lt; <span class="stringliteral">&quot; title \&quot;&quot;</span> &lt;&lt; fIntervalTable[i].fName &lt;&lt; <span class="stringliteral">&quot;\&quot; with lines,&quot;</span>;
<a name="l00199"></a>00199                 }
<a name="l00200"></a>00200             }
<a name="l00201"></a>00201             fStream3 &lt;&lt; <span class="stringliteral">&quot;\nunset multiplot\n&quot;</span>;
<a name="l00202"></a>00202             fStream3 &lt;&lt; <span class="stringliteral">&quot;unset output\n&quot;</span>;
<a name="l00203"></a>00203         }
<a name="l00204"></a>00204     }
<a name="l00205"></a>00205 
<a name="l00206"></a>00206     <span class="comment">// Clients scheduling</span>
<a name="l00207"></a>00207     <span class="keywordflow">if</span> (fMeasuredClient &gt; 0) {
<a name="l00208"></a>00208         std::ofstream fStream4(<span class="stringliteral">&quot;Timing4.plot&quot;</span>, std::ios_base::ate);
<a name="l00209"></a>00209         
<a name="l00210"></a>00210         <span class="keywordflow">if</span> (!fStream4.is_open()) {
<a name="l00211"></a>00211             <a class="code" href="group__ServerControl.html#gac6448626e0b75fc6d9da1ccbdca0355e">jack_error</a>(<span class="stringliteral">&quot;JackEngineProfiling::Save cannot open Timing4.plot file&quot;</span>);
<a name="l00212"></a>00212         } <span class="keywordflow">else</span> {
<a name="l00213"></a>00213         
<a name="l00214"></a>00214             fStream4 &lt;&lt; <span class="stringliteral">&quot;set multiplot\n&quot;</span>;
<a name="l00215"></a>00215             fStream4 &lt;&lt; <span class="stringliteral">&quot;set grid\n&quot;</span>;
<a name="l00216"></a>00216             fStream4 &lt;&lt; <span class="stringliteral">&quot;set title \&quot;Clients scheduling latency\&quot;\n&quot;</span>;
<a name="l00217"></a>00217             fStream4 &lt;&lt; <span class="stringliteral">&quot;set xlabel \&quot;audio cycles\&quot;\n&quot;</span>;
<a name="l00218"></a>00218             fStream4 &lt;&lt; <span class="stringliteral">&quot;set ylabel \&quot;usec\&quot;\n&quot;</span>;
<a name="l00219"></a>00219             fStream4 &lt;&lt; <span class="stringliteral">&quot;plot &quot;</span>;
<a name="l00220"></a>00220             <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; fMeasuredClient; i++) {
<a name="l00221"></a>00221                 <span class="keywordflow">if</span> ((i + 1) == fMeasuredClient) { <span class="comment">// Last client</span>
<a name="l00222"></a>00222                     fStream4 &lt;&lt; <span class="stringliteral">&quot;\&quot;JackEngineProfiling.log\&quot; using &quot;</span> &lt;&lt; ((i + 1) * 7)  &lt;&lt; <span class="stringliteral">&quot; title \&quot;&quot;</span> &lt;&lt; fIntervalTable[i].fName &lt;&lt; <span class="stringliteral">&quot;\&quot; with lines&quot;</span>;
<a name="l00223"></a>00223                  } <span class="keywordflow">else</span> {
<a name="l00224"></a>00224                      fStream4 &lt;&lt; <span class="stringliteral">&quot;\&quot;JackEngineProfiling.log\&quot; using &quot;</span> &lt;&lt; ((i + 1) * 7)  &lt;&lt; <span class="stringliteral">&quot; title \&quot;&quot;</span> &lt;&lt; fIntervalTable[i].fName &lt;&lt; <span class="stringliteral">&quot;\&quot; with lines,&quot;</span>;
<a name="l00225"></a>00225                 }
<a name="l00226"></a>00226             }
<a name="l00227"></a>00227             
<a name="l00228"></a>00228             fStream4 &lt;&lt; <span class="stringliteral">&quot;\n unset multiplot\n&quot;</span>;  
<a name="l00229"></a>00229             fStream4 &lt;&lt; <span class="stringliteral">&quot;set output &#39;Timing4.svg\n&quot;</span>;
<a name="l00230"></a>00230             fStream4 &lt;&lt; <span class="stringliteral">&quot;set terminal svg\n&quot;</span>;
<a name="l00231"></a>00231             
<a name="l00232"></a>00232             fStream4 &lt;&lt; <span class="stringliteral">&quot;set multiplot\n&quot;</span>;
<a name="l00233"></a>00233             fStream4 &lt;&lt; <span class="stringliteral">&quot;set grid\n&quot;</span>;
<a name="l00234"></a>00234             fStream4 &lt;&lt; <span class="stringliteral">&quot;set title \&quot;Clients scheduling latency\&quot;\n&quot;</span>;
<a name="l00235"></a>00235             fStream4 &lt;&lt; <span class="stringliteral">&quot;set xlabel \&quot;audio cycles\&quot;\n&quot;</span>;
<a name="l00236"></a>00236             fStream4 &lt;&lt; <span class="stringliteral">&quot;set ylabel \&quot;usec\&quot;\n&quot;</span>;
<a name="l00237"></a>00237             fStream4 &lt;&lt; <span class="stringliteral">&quot;plot &quot;</span>;
<a name="l00238"></a>00238             <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; fMeasuredClient; i++) {
<a name="l00239"></a>00239                 <span class="keywordflow">if</span> ((i + 1) == fMeasuredClient) { <span class="comment">// Last client</span>
<a name="l00240"></a>00240                     fStream4 &lt;&lt; <span class="stringliteral">&quot;\&quot;JackEngineProfiling.log\&quot; using &quot;</span> &lt;&lt; ((i + 1) * 7)  &lt;&lt; <span class="stringliteral">&quot; title \&quot;&quot;</span> &lt;&lt; fIntervalTable[i].fName &lt;&lt; <span class="stringliteral">&quot;\&quot; with lines&quot;</span>;
<a name="l00241"></a>00241                 } <span class="keywordflow">else</span> {
<a name="l00242"></a>00242                      fStream4 &lt;&lt; <span class="stringliteral">&quot;\&quot;JackEngineProfiling.log\&quot; using &quot;</span> &lt;&lt; ((i + 1) * 7)  &lt;&lt; <span class="stringliteral">&quot; title \&quot;&quot;</span> &lt;&lt; fIntervalTable[i].fName &lt;&lt; <span class="stringliteral">&quot;\&quot; with lines,&quot;</span>;
<a name="l00243"></a>00243                 }
<a name="l00244"></a>00244             }
<a name="l00245"></a>00245             fStream4 &lt;&lt; <span class="stringliteral">&quot;\nunset multiplot\n&quot;</span>;
<a name="l00246"></a>00246             fStream4 &lt;&lt; <span class="stringliteral">&quot;unset output\n&quot;</span>;
<a name="l00247"></a>00247         }
<a name="l00248"></a>00248     }
<a name="l00249"></a>00249     
<a name="l00250"></a>00250      <span class="comment">// Clients duration</span>
<a name="l00251"></a>00251     <span class="keywordflow">if</span> (fMeasuredClient &gt; 0) {
<a name="l00252"></a>00252         std::ofstream fStream5(<span class="stringliteral">&quot;Timing5.plot&quot;</span>, std::ios_base::ate);
<a name="l00253"></a>00253 
<a name="l00254"></a>00254         <span class="keywordflow">if</span> (!fStream5.is_open()) {
<a name="l00255"></a>00255             <a class="code" href="group__ServerControl.html#gac6448626e0b75fc6d9da1ccbdca0355e">jack_error</a>(<span class="stringliteral">&quot;JackEngineProfiling::Save cannot open Timing5.plot file&quot;</span>);
<a name="l00256"></a>00256         } <span class="keywordflow">else</span> {
<a name="l00257"></a>00257         
<a name="l00258"></a>00258             fStream5 &lt;&lt; <span class="stringliteral">&quot;set multiplot\n&quot;</span>;
<a name="l00259"></a>00259             fStream5 &lt;&lt; <span class="stringliteral">&quot;set grid\n&quot;</span>;
<a name="l00260"></a>00260             fStream5 &lt;&lt; <span class="stringliteral">&quot;set title \&quot;Clients duration\&quot;\n&quot;</span>;
<a name="l00261"></a>00261             fStream5 &lt;&lt; <span class="stringliteral">&quot;set xlabel \&quot;audio cycles\&quot;\n&quot;</span>;
<a name="l00262"></a>00262             fStream5 &lt;&lt; <span class="stringliteral">&quot;set ylabel \&quot;usec\&quot;\n&quot;</span>;
<a name="l00263"></a>00263             fStream5 &lt;&lt; <span class="stringliteral">&quot;plot &quot;</span>;
<a name="l00264"></a>00264             <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; fMeasuredClient; i++) {
<a name="l00265"></a>00265                 <span class="keywordflow">if</span> ((i + 1) == fMeasuredClient) { <span class="comment">// Last client</span>
<a name="l00266"></a>00266                     fStream5 &lt;&lt; <span class="stringliteral">&quot;\&quot;JackEngineProfiling.log\&quot; using &quot;</span> &lt;&lt; ((i + 1) * 7) + 1  &lt;&lt; <span class="stringliteral">&quot; title \&quot;&quot;</span> &lt;&lt; fIntervalTable[i].fName &lt;&lt; <span class="stringliteral">&quot;\&quot; with lines&quot;</span>;
<a name="l00267"></a>00267                 } <span class="keywordflow">else</span> {
<a name="l00268"></a>00268                     fStream5 &lt;&lt; <span class="stringliteral">&quot;\&quot;JackEngineProfiling.log\&quot; using &quot;</span> &lt;&lt; ((i + 1) * 7) + 1  &lt;&lt; <span class="stringliteral">&quot; title \&quot;&quot;</span> &lt;&lt; fIntervalTable[i].fName &lt;&lt; <span class="stringliteral">&quot;\&quot; with lines,&quot;</span>;
<a name="l00269"></a>00269                 }
<a name="l00270"></a>00270             }
<a name="l00271"></a>00271             
<a name="l00272"></a>00272             fStream5 &lt;&lt; <span class="stringliteral">&quot;\n unset multiplot\n&quot;</span>;  
<a name="l00273"></a>00273             fStream5 &lt;&lt; <span class="stringliteral">&quot;set output &#39;Timing5.svg\n&quot;</span>;
<a name="l00274"></a>00274             fStream5 &lt;&lt; <span class="stringliteral">&quot;set terminal svg\n&quot;</span>;
<a name="l00275"></a>00275             
<a name="l00276"></a>00276             fStream5 &lt;&lt; <span class="stringliteral">&quot;set multiplot\n&quot;</span>;
<a name="l00277"></a>00277             fStream5 &lt;&lt; <span class="stringliteral">&quot;set grid\n&quot;</span>;
<a name="l00278"></a>00278             fStream5 &lt;&lt; <span class="stringliteral">&quot;set title \&quot;Clients duration\&quot;\n&quot;</span>;
<a name="l00279"></a>00279             fStream5 &lt;&lt; <span class="stringliteral">&quot;set xlabel \&quot;audio cycles\&quot;\n&quot;</span>;
<a name="l00280"></a>00280             fStream5 &lt;&lt; <span class="stringliteral">&quot;set ylabel \&quot;usec\&quot;\n&quot;</span>;
<a name="l00281"></a>00281             fStream5 &lt;&lt; <span class="stringliteral">&quot;plot &quot;</span>;
<a name="l00282"></a>00282             <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; fMeasuredClient; i++) {
<a name="l00283"></a>00283                 <span class="keywordflow">if</span> ((i + 1) == fMeasuredClient) {<span class="comment">// Last client</span>
<a name="l00284"></a>00284                     fStream5 &lt;&lt; <span class="stringliteral">&quot;\&quot;JackEngineProfiling.log\&quot; using &quot;</span> &lt;&lt; ((i + 1) * 7) + 1  &lt;&lt; <span class="stringliteral">&quot; title \&quot;&quot;</span> &lt;&lt; fIntervalTable[i].fName &lt;&lt; <span class="stringliteral">&quot;\&quot; with lines&quot;</span>;
<a name="l00285"></a>00285                 } <span class="keywordflow">else</span> {
<a name="l00286"></a>00286                     fStream5 &lt;&lt; <span class="stringliteral">&quot;\&quot;JackEngineProfiling.log\&quot; using &quot;</span> &lt;&lt; ((i + 1) * 7) + 1  &lt;&lt; <span class="stringliteral">&quot; title \&quot;&quot;</span> &lt;&lt; fIntervalTable[i].fName &lt;&lt; <span class="stringliteral">&quot;\&quot; with lines,&quot;</span>;
<a name="l00287"></a>00287                 }
<a name="l00288"></a>00288             }
<a name="l00289"></a>00289             fStream5 &lt;&lt; <span class="stringliteral">&quot;\nunset multiplot\n&quot;</span>;
<a name="l00290"></a>00290             fStream5 &lt;&lt; <span class="stringliteral">&quot;unset output\n&quot;</span>;
<a name="l00291"></a>00291         }
<a name="l00292"></a>00292     }
<a name="l00293"></a>00293     
<a name="l00294"></a>00294     std::ofstream fStream6(<span class="stringliteral">&quot;Timings.html&quot;</span>, std::ios_base::ate);
<a name="l00295"></a>00295     <span class="keywordflow">if</span> (!fStream6.is_open()) {
<a name="l00296"></a>00296         <a class="code" href="group__ServerControl.html#gac6448626e0b75fc6d9da1ccbdca0355e">jack_error</a>(<span class="stringliteral">&quot;JackEngineProfiling::Save cannot open Timings.html file&quot;</span>);
<a name="l00297"></a>00297     } <span class="keywordflow">else</span> {
<a name="l00298"></a>00298         fStream6 &lt;&lt; <span class="stringliteral">&quot;&lt;?xml version=&#39;1.0&#39; encoding=&#39;utf-8&#39;?&gt;\n&quot;</span>;
<a name="l00299"></a>00299         fStream6 &lt;&lt; <span class="stringliteral">&quot;&lt;!DOCTYPE html PUBLIC \&quot;-//W3C//DTD XHTML 1.0 Transitional//EN\&quot;\n&quot;</span>;
<a name="l00300"></a>00300         fStream6 &lt;&lt; <span class="stringliteral">&quot;\&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\&quot;&gt;\n&quot;</span>;
<a name="l00301"></a>00301         fStream6 &lt;&lt; <span class="stringliteral">&quot;&lt;html xmlns=&#39;http://www.w3.org/1999/xhtml&#39; lang=&#39;en&#39;&gt;\n&quot;</span>;
<a name="l00302"></a>00302         fStream6 &lt;&lt; <span class="stringliteral">&quot;  &lt;head&gt;\n&quot;</span>;
<a name="l00303"></a>00303         fStream6 &lt;&lt; <span class="stringliteral">&quot;    &lt;title&gt;JACK engine profiling&lt;/title&gt;\n&quot;</span>;
<a name="l00304"></a>00304         fStream6 &lt;&lt; <span class="stringliteral">&quot;    &lt;!-- assuming that images are 600px wide --&gt;\n&quot;</span>;
<a name="l00305"></a>00305         fStream6 &lt;&lt; <span class="stringliteral">&quot;    &lt;style media=&#39;all&#39; type=&#39;text/css&#39;&gt;\n&quot;</span>;
<a name="l00306"></a>00306         fStream6 &lt;&lt; <span class="stringliteral">&quot;    .center { margin-left:auto ; margin-right: auto; width: 650px; height: 550px }\n&quot;</span>;
<a name="l00307"></a>00307         fStream6 &lt;&lt; <span class="stringliteral">&quot;    &lt;/style&gt;\n&quot;</span>;
<a name="l00308"></a>00308         fStream6 &lt;&lt; <span class="stringliteral">&quot;  &lt;/head&gt;\n&quot;</span>;
<a name="l00309"></a>00309         fStream6 &lt;&lt; <span class="stringliteral">&quot;  &lt;body&gt;\n&quot;</span>;
<a name="l00310"></a>00310         fStream6 &lt;&lt; <span class="stringliteral">&quot;    &lt;h2 style=&#39;text-align:center&#39;&gt;JACK engine profiling&lt;/h2&gt;\n&quot;</span>;
<a name="l00311"></a>00311         fStream6 &lt;&lt; <span class="stringliteral">&quot;    &lt;div class=&#39;center&#39;&gt;&lt;object class=&#39;center&#39; type=&#39;image/svg+xml&#39; data=&#39;Timing1.svg&#39;&gt;Timing1&lt;/object&gt;&lt;/div&gt;&quot;</span>;
<a name="l00312"></a>00312         fStream6 &lt;&lt; <span class="stringliteral">&quot;    &lt;div class=&#39;center&#39;&gt;&lt;object class=&#39;center&#39; type=&#39;image/svg+xml&#39; data=&#39;Timing2.svg&#39;&gt;Timing2&lt;/object&gt;&lt;/div&gt;&quot;</span>;
<a name="l00313"></a>00313         fStream6 &lt;&lt; <span class="stringliteral">&quot;    &lt;div class=&#39;center&#39;&gt;&lt;object class=&#39;center&#39; type=&#39;image/svg+xml&#39; data=&#39;Timing3.svg&#39;&gt;Timing3&lt;/object&gt;&lt;/div&gt;&quot;</span>;
<a name="l00314"></a>00314         fStream6 &lt;&lt; <span class="stringliteral">&quot;    &lt;div class=&#39;center&#39;&gt;&lt;object class=&#39;center&#39; type=&#39;image/svg+xml&#39; data=&#39;Timing4.svg&#39;&gt;Timing4&lt;/object&gt;&lt;/div&gt;&quot;</span>;
<a name="l00315"></a>00315         fStream6 &lt;&lt; <span class="stringliteral">&quot;    &lt;div class=&#39;center&#39;&gt;&lt;object class=&#39;center&#39; type=&#39;image/svg+xml&#39; data=&#39;Timing5.svg&#39;&gt;Timing5&lt;/object&gt;&lt;/div&gt;&quot;</span>;
<a name="l00316"></a>00316         fStream6 &lt;&lt; <span class="stringliteral">&quot;  &lt;/body&gt;\n&quot;</span>;
<a name="l00317"></a>00317         fStream6 &lt;&lt; <span class="stringliteral">&quot;&lt;/html&gt;\n&quot;</span>;
<a name="l00318"></a>00318     }  
<a name="l00319"></a>00319     
<a name="l00320"></a>00320     std::ofstream fStream7(<span class="stringliteral">&quot;generate_timings&quot;</span>, std::ios_base::ate);
<a name="l00321"></a>00321     <span class="keywordflow">if</span> (!fStream7.is_open()) {
<a name="l00322"></a>00322         <a class="code" href="group__ServerControl.html#gac6448626e0b75fc6d9da1ccbdca0355e">jack_error</a>(<span class="stringliteral">&quot;JackEngineProfiling::Save cannot open generate_timings file&quot;</span>);
<a name="l00323"></a>00323     } <span class="keywordflow">else</span> {
<a name="l00324"></a>00324         fStream7 &lt;&lt; <span class="stringliteral">&quot;gnuplot -persist Timing1.plot \n&quot;</span>;
<a name="l00325"></a>00325         fStream7 &lt;&lt; <span class="stringliteral">&quot;gnuplot -persist Timing2.plot\n&quot;</span>;
<a name="l00326"></a>00326         fStream7 &lt;&lt; <span class="stringliteral">&quot;gnuplot -persist Timing3.plot\n&quot;</span>;
<a name="l00327"></a>00327         fStream7 &lt;&lt; <span class="stringliteral">&quot;gnuplot -persist Timing4.plot\n&quot;</span>;
<a name="l00328"></a>00328         fStream7 &lt;&lt; <span class="stringliteral">&quot;gnuplot -persist Timing5.plot\n&quot;</span>;
<a name="l00329"></a>00329     }       
<a name="l00330"></a>00330 }
<a name="l00331"></a>00331 
<a name="l00332"></a>00332 <span class="keywordtype">bool</span> JackEngineProfiling::CheckClient(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">int</span> cur_point)
<a name="l00333"></a>00333 {
<a name="l00334"></a>00334     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; MEASURED_CLIENTS; i++) {
<a name="l00335"></a>00335        <span class="keywordflow">if</span> (strcmp(fIntervalTable[i].fName, name) == 0) {
<a name="l00336"></a>00336             fIntervalTable[i].fEndInterval = cur_point;
<a name="l00337"></a>00337             <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00338"></a>00338         }
<a name="l00339"></a>00339     }
<a name="l00340"></a>00340     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00341"></a>00341 }
<a name="l00342"></a>00342 
<a name="l00343"></a>00343 <span class="keywordtype">void</span> JackEngineProfiling::Profile(JackClientInterface** table, 
<a name="l00344"></a>00344                                    JackGraphManager* manager, 
<a name="l00345"></a>00345                                    jack_time_t period_usecs,
<a name="l00346"></a>00346                                    jack_time_t cur_cycle_begin, 
<a name="l00347"></a>00347                                    jack_time_t prev_cycle_end)
<a name="l00348"></a>00348 {
<a name="l00349"></a>00349     fAudioCycle = (fAudioCycle + 1) % TIME_POINTS;
<a name="l00350"></a>00350   
<a name="l00351"></a>00351     <span class="comment">// Keeps cycle data</span>
<a name="l00352"></a>00352     fProfileTable[fAudioCycle].fPeriodUsecs = period_usecs;
<a name="l00353"></a>00353     fProfileTable[fAudioCycle].fCurCycleBegin = cur_cycle_begin;
<a name="l00354"></a>00354     fProfileTable[fAudioCycle].fPrevCycleEnd = prev_cycle_end;
<a name="l00355"></a>00355     fProfileTable[fAudioCycle].fAudioCycle = fAudioCycle;
<a name="l00356"></a>00356 
<a name="l00357"></a>00357     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = GetEngineControl()-&gt;fDriverNum; i &lt; CLIENT_NUM; i++) {
<a name="l00358"></a>00358         JackClientInterface* client = table[i];
<a name="l00359"></a>00359         JackClientTiming* timing = manager-&gt;GetClientTiming(i);
<a name="l00360"></a>00360         <span class="keywordflow">if</span> (client &amp;&amp; client-&gt;GetClientControl()-&gt;fActive &amp;&amp; client-&gt;GetClientControl()-&gt;fCallback[kRealTimeCallback]) {
<a name="l00361"></a>00361            
<a name="l00362"></a>00362             <span class="keywordflow">if</span> (!CheckClient(client-&gt;GetClientControl()-&gt;fName, fAudioCycle)) {
<a name="l00363"></a>00363                 <span class="comment">// Keep new measured client</span>
<a name="l00364"></a>00364                 fIntervalTable[fMeasuredClient].fRefNum = i;
<a name="l00365"></a>00365                 strcpy(fIntervalTable[fMeasuredClient].fName, client-&gt;GetClientControl()-&gt;fName);
<a name="l00366"></a>00366                 fIntervalTable[fMeasuredClient].fBeginInterval = fAudioCycle;
<a name="l00367"></a>00367                 fIntervalTable[fMeasuredClient].fEndInterval = fAudioCycle;
<a name="l00368"></a>00368                 fMeasuredClient++;
<a name="l00369"></a>00369             }
<a name="l00370"></a>00370             fProfileTable[fAudioCycle].fClientTable[i].fRefNum = i;
<a name="l00371"></a>00371             fProfileTable[fAudioCycle].fClientTable[i].fSignaledAt = timing-&gt;fSignaledAt;
<a name="l00372"></a>00372             fProfileTable[fAudioCycle].fClientTable[i].fAwakeAt = timing-&gt;fAwakeAt;
<a name="l00373"></a>00373             fProfileTable[fAudioCycle].fClientTable[i].fFinishedAt = timing-&gt;fFinishedAt;
<a name="l00374"></a>00374             fProfileTable[fAudioCycle].fClientTable[i].fStatus = timing-&gt;fStatus;
<a name="l00375"></a>00375         }
<a name="l00376"></a>00376     }
<a name="l00377"></a>00377 }
<a name="l00378"></a>00378 
<a name="l00379"></a>00379 JackTimingMeasure* JackEngineProfiling::GetCurMeasure()
<a name="l00380"></a>00380 {
<a name="l00381"></a>00381     <span class="keywordflow">return</span> &amp;fProfileTable[fAudioCycle];
<a name="l00382"></a>00382 }
<a name="l00383"></a>00383     
<a name="l00384"></a>00384 } <span class="comment">// end of namespace</span>
</pre></div></div>
</div>
<hr size="1"><address style="text-align: right;"><small>
Generated for Jack2 by <a href="http://www.doxygen.org/
index.html"><img src="doxygen.png" alt="doxygen" align="middle" border="0"></a>
1.7.3</small></address>
</body>
</html>