<div>Hi All,</div><div> </div><div>         Here is a simple patch to add per frame timing information while retracing. Tested this patch with couple of simple applications. It seems to work fine.</div><div>This will provide useful information to identify performance issues with a specific frame. Currently, this patch creates a new file (frame.time) to dump the per frame timings. </div>



<div>But the ideal way would be to integrate this information with apitrace UI. I would try to understand the UI code and integrate this new feature. </div><div><br></div><div>diff --git a/glretrace_main.cpp b/glretrace_main.cpp</div>



<div>index 4e4b8ae..5dab825 100644</div><div>--- a/glretrace_main.cpp</div><div>+++ b/glretrace_main.cpp</div>
<div>@@ -197,22 +197,31 @@ static void display(void) {</div><div>     retracer.addCallbacks(cgl_callbacks);</div><div><br></div><div>     startTime = OS::GetTime();</div><div>+    FILE *timefile = fopen(&quot;frame.time&quot;, &quot;w+&quot;);</div>




<div>+    long long framestartTime = startTime;</div><div>     Trace::Call *call;</div><div><br></div><div>     while ((call = parser.parse_call())) {</div><div>-        retracer.retrace(*call);</div><div>-</div><div>-        if (!insideGlBeginEnd &amp;&amp;</div>




<div>+       retracer.retrace(*call);</div><div>+</div><div>+        if (!strcmp(call-&gt;name(),&quot;glXSwapBuffers&quot;)){</div><div>+            static unsigned int frame_count = 0;</div><div>+            long long frameendTime = OS::GetTime();</div>




<div>+            float frametimeInterval = (frameendTime - framestartTime) * 1.0E-3;</div><div>+            framestartTime =  frameendTime;</div><div>+           if (timefile != NULL)</div><div>+                fprintf(timefile,&quot;Frame # %4d \t\t Rendering Time =   %4.4f  ms \n&quot;, ++frame_count, frametimeInterval);</div>




<div>+           }</div><div>+        </div><div>+       if (!insideGlBeginEnd &amp;&amp;</div><div>             drawable &amp;&amp; context &amp;&amp;</div><div>             call-&gt;no &gt;= dump_state) {</div><div>             glstate::dumpCurrentContext(std::cout);</div>




<div>             exit(0);</div><div>         }</div><div>-</div><div>         delete call;</div><div>     }</div><div>-</div><div>-    // Reached the end of trace</div><div>+   // Reached the end of trace</div><div>     glFlush();</div>




<div><br></div><div>     long long endTime = OS::GetTime();</div><div>@@ -222,9 +231,13 @@ static void display(void) {</div><div>         std::cout &lt;&lt;</div><div>             &quot;Rendered &quot; &lt;&lt; frame &lt;&lt; &quot; frames&quot;</div>




<div>             &quot; in &quot; &lt;&lt;  timeInterval &lt;&lt; &quot; secs,&quot;</div><div>-            &quot; average of &quot; &lt;&lt; (frame/timeInterval) &lt;&lt; &quot; fps\n&quot;;</div><div>+            &quot; average of &quot; &lt;&lt; (frame/timeInterval) &lt;&lt; &quot; fps\n&quot;</div>




<div>+           &quot;Refer to frame.time file for per frame timings\n&quot;;</div><div>     }</div><div><br></div><div>+    if(timefile != NULL) </div><div>+       fclose(timefile);</div><div>+ </div><div>     if (wait) {</div>




<div>         while (glws::processEvents()) {}</div><div>     } else {</div><div><br></div><div><br></div><div><br></div><div>Sample frame.time file:</div><div><br></div><div>Frame #    1             Rendering Time =   86.8040  ms</div>



<div>Frame #    2             Rendering Time =   52.9150  ms</div><div>Frame #    3             Rendering Time =   13.1800  ms</div><div>Frame #    4             Rendering Time =   13.5760  ms</div><div>Frame #    5             Rendering Time =   16.5770  ms</div>



<div>Frame #    6             Rendering Time =   16.7020  ms</div><div>Frame #    7             Rendering Time =   16.4650  ms</div><div>Frame #    8             Rendering Time =   17.0980  ms</div><div>Frame #    9             Rendering Time =   16.6430  ms</div>



<div>Frame #   10             Rendering Time =   16.6400  ms</div><div>Frame #   11             Rendering Time =   16.3250  ms</div><div>Frame #   12             Rendering Time =   16.9020  ms</div><div>Frame #   13             Rendering Time =   16.7450  ms</div>



<div>Frame #   14             Rendering Time =   16.5160  ms</div><div>Frame #   15             Rendering Time =   16.2400  ms</div><div>Frame #   16             Rendering Time =   16.9940  ms</div><div>Frame #   17             Rendering Time =   16.1750  ms</div>



<div>Frame #   18             Rendering Time =   16.9450  ms</div><div>Frame #   19             Rendering Time =   16.7750  ms</div><div>Frame #   20             Rendering Time =   16.5170  ms</div><div>Frame #   21             Rendering Time =   16.4950  ms</div>



<div>Frame #   22             Rendering Time =   16.4520  ms</div><div>Frame #   23             Rendering Time =   16.9910  ms</div><div>Frame #   24             Rendering Time =   16.2530  ms</div><div>Frame #   25             Rendering Time =   16.6570  ms</div>



<div>Frame #   26             Rendering Time =   16.9600  ms</div><div>Frame #   27             Rendering Time =   16.3200  ms</div><div>Frame #   28             Rendering Time =   17.0080  ms</div><div>Frame #   29             Rendering Time =   16.1800  ms</div>



<div>Frame #   30             Rendering Time =   16.6230  ms</div><div>Frame #   31             Rendering Time =   17.1000  ms</div><div>Frame #   32             Rendering Time =   16.5390  ms</div><div>Frame #   33             Rendering Time =   16.3890  ms</div>



<div>Frame #   34             Rendering Time =   16.8460  ms</div><div>Frame #   35             Rendering Time =   16.7060  ms</div><div>Frame #   36             Rendering Time =   16.1800  ms</div><div>Frame #   37             Rendering Time =   17.0210  ms</div>



<div>Frame #   38             Rendering Time =   16.5970  ms</div><div>Frame #   39             Rendering Time =   16.6590  ms</div><div>Frame #   40             Rendering Time =   16.6490  ms</div><div>Frame #   41             Rendering Time =   16.6930  ms</div>



<div>Frame #   42             Rendering Time =   16.6110  ms</div><div>Frame #   43             Rendering Time =   16.5880  ms</div><div>Frame #   44             Rendering Time =   16.6480  ms</div><div>Frame #   45             Rendering Time =   16.5620  ms</div>



<div>Frame #   46             Rendering Time =   16.5230  ms</div><div>Frame #   47             Rendering Time =   16.7410  ms</div><div>Frame #   48             Rendering Time =   16.6920  ms</div><div>Frame #   49             Rendering Time =   16.5250  ms</div>



<div>Frame #   50             Rendering Time =   16.6510  ms</div><div><br></div><div><br></div><div>Regards</div><div>Anuj</div>