<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
Jose:<br>
<br>
I will look into making a LoopParser class to handle the various
looping logic.<br>
Regards,<br>
Jon<br>
<br>
<div class="moz-cite-prefix">On 05/27/2014 10:35 AM, José Fonseca
wrote:<br>
</div>
<blockquote
cite="mid:CAH_+9jkqRMOJs_DHEEg8WmhzoPfH-JMkPwJC34a632oS1MO9BA@mail.gmail.com"
type="cite">
<div dir="ltr">
<div>
<div>
<div>
<div>
<div>
<div>
<div>
<div>Jon,<br>
<br>
</div>
I looked into this further, and the logic to
execute the loops is too spread out, touching too
many places, which will make things really hard to
maintain.<br>
<br>
</div>
I'd like to see all the logic for all sort of
looping (be it infinite loop, last-frame, frame
range, call-range etc) to be encapsulated in a
single class, "LoopParser", which acts as a
decorator for vanilla Parsers:<br>
<br>
</div>
<div> // Parser interface<br>
</div>
<div> class BaseParser {<br>
virtual parse_call() = 0;<br>
};<br>
<br>
</div>
<div> // Concrete parser<br>
</div>
<div> class Parser : public BaseParser {<br>
}<br>
<br>
</div>
<div> // Decorator for parser which loops<br>
</div>
<div> class LoopParser : public BaseParser {<br>
}<br>
<br>
</div>
LoopParser::parse_call() would internally rewind the
stream, so that the rest of retrace_main.cpp just
calls parse_call() and doesn't even know if its using
a LoopParser or a Parser.<br>
</div>
<br>
</div>
<div>You could even have an hierrachy on top of
LoopParser: LastFrameLoopParser, CallRangeLoopParser,
FrameRangeLoopParser, etc.<br>
</div>
<div><br>
Jose<br>
</div>
<div>
<div>
<div>
<div><br>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="gmail_extra"><br>
<br>
<div class="gmail_quote">On Tue, Apr 22, 2014 at 7:53 PM, Jon
Ashburn <span dir="ltr"><<a moz-do-not-send="true"
href="mailto:jon@lunarg.com" target="_blank">jon@lunarg.com</a>></span>
wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">glretrace
has ability to loop the last frame of a trace continuosly.
These<br>
two patches improve upon this feature in several ways. For
analysis of<br>
the driver/GPU performance from a captured trace the
existing looping can be<br>
improved. Firstly, statistics of the looping performance
should be logged,<br>
in addition to the total retrace statistics which include
non looping frames.<br>
Secondly, the looping should be generalized for N
iterations and any arbitrary<br>
range of frames or API call numbers. Thirdly, time spent in
apitrace parsing<br>
and executing calls should be minimized so any driver or
GPU bottlenecks are<br>
not masked by glretrace looping replay time.<br>
<br>
To achieve these improvements, these features are added to
glretrace by these<br>
patches:<br>
<br>
Add a numeric parameter to the --loop option which is the
number of times to<br>
loop. Zero is continuous looping, default is 1.<br>
<br>
Add --framerange option that allows an arbitray range of
frames to be looped<br>
and log the time spent in the framerange looping.<br>
<br>
Add --callrange option that allows an arbitrary range of
call numbers to be<br>
looped and log the time spent in the callrange looping.
Framerange and callrange<br>
are mutually exclusive options. --loop=N specifies the
number of times to loop<br>
the range. The replay ends after the looping is finished.<br>
<br>
When executing a looping replay (non-continuos and
iterations != 1) first<br>
save the parsed API calls. Thus, no need to reparse the
calls on every<br>
iteration of a loop. This vastly improves the execution
time of glretrace.<br>
The looping replay performance, in many cases now matches
the performance for<br>
the frames of interest from the original app/benchmark prior
to capture. This<br>
makes glretrace a very useful performance analysis tool and
also performance<br>
regression tool.<br>
_______________________________________________<br>
apitrace mailing list<br>
<a moz-do-not-send="true"
href="mailto:apitrace@lists.freedesktop.org">apitrace@lists.freedesktop.org</a><br>
<a moz-do-not-send="true"
href="http://lists.freedesktop.org/mailman/listinfo/apitrace"
target="_blank">http://lists.freedesktop.org/mailman/listinfo/apitrace</a><br>
</blockquote>
</div>
<br>
</div>
</blockquote>
<br>
</body>
</html>