Patches to glretrace to add support for looping arbitrary frames

Jon Ashburn jon at lunarg.com
Tue May 27 10:18:57 PDT 2014


Jose:

I will look into making a LoopParser class to handle the various looping 
logic.
Regards,
Jon

On 05/27/2014 10:35 AM, José Fonseca wrote:
> Jon,
>
> 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.
>
> 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:
>
>  // Parser interface
>  class BaseParser {
>     virtual  parse_call() = 0;
>   };
>
>   // Concrete parser
>   class Parser :  public BaseParser {
>   }
>
>   // Decorator for parser which loops
>   class LoopParser : public BaseParser  {
>   }
>
> 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.
>
> You could even have an hierrachy on top of LoopParser: 
> LastFrameLoopParser, CallRangeLoopParser, FrameRangeLoopParser, etc.
>
> Jose
>
>
>
> On Tue, Apr 22, 2014 at 7:53 PM, Jon Ashburn <jon at lunarg.com 
> <mailto:jon at lunarg.com>> wrote:
>
>     glretrace has ability to loop the last frame of a trace
>     continuosly. These
>     two patches improve upon this feature in several ways.  For
>     analysis of
>     the driver/GPU performance  from a captured trace the existing
>     looping can be
>     improved. Firstly, statistics  of the looping  performance should
>     be logged,
>     in addition to the total retrace statistics which include non
>     looping frames.
>     Secondly, the  looping should be generalized for N iterations and
>     any arbitrary
>     range of frames or API call numbers.  Thirdly, time spent in
>     apitrace  parsing
>     and executing calls  should be minimized so any driver or GPU
>     bottlenecks  are
>     not masked by glretrace looping replay time.
>
>     To achieve these improvements, these features are added to
>     glretrace by these
>     patches:
>
>     Add  a numeric parameter to the --loop option which is the number
>     of times to
>     loop.  Zero is continuous looping, default is 1.
>
>     Add --framerange  option that allows an arbitray range of frames
>     to be looped
>     and log the time spent in the framerange looping.
>
>     Add --callrange option that allows an arbitrary range of call
>     numbers to be
>     looped and log the time spent in the callrange looping.
>      Framerange and callrange
>     are mutually exclusive options. --loop=N specifies the number of
>     times to loop
>     the range.  The replay ends after the looping is finished.
>
>     When executing a looping replay (non-continuos  and iterations !=
>     1)  first
>     save the parsed API calls.  Thus,  no need to reparse  the calls
>     on every
>     iteration of a loop.  This vastly improves the execution time  of
>     glretrace.
>     The looping replay performance, in many cases now matches the
>     performance for
>     the frames of interest from the original app/benchmark prior to
>     capture.  This
>     makes glretrace a very useful performance analysis tool  and also
>     performance
>     regression tool.
>     _______________________________________________
>     apitrace mailing list
>     apitrace at lists.freedesktop.org <mailto:apitrace at lists.freedesktop.org>
>     http://lists.freedesktop.org/mailman/listinfo/apitrace
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/apitrace/attachments/20140527/b55f97d5/attachment.html>


More information about the apitrace mailing list