<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("frame.time", "w+");</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 &&</div>
<div>+ retracer.retrace(*call);</div><div>+</div><div>+ if (!strcmp(call->name(),"glXSwapBuffers")){</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,"Frame # %4d \t\t Rendering Time = %4.4f ms \n", ++frame_count, frametimeInterval);</div>
<div>+ }</div><div>+ </div><div>+ if (!insideGlBeginEnd &&</div><div> drawable && context &&</div><div> call->no >= 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 <<</div><div> "Rendered " << frame << " frames"</div>
<div> " in " << timeInterval << " secs,"</div><div>- " average of " << (frame/timeInterval) << " fps\n";</div><div>+ " average of " << (frame/timeInterval) << " fps\n"</div>
<div>+ "Refer to frame.time file for per frame timings\n";</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>