X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=scripts%2Fprofileshader.py;h=d31130e2896ffa933cd10fa5b194e6c20ac83d68;hb=48c661ea6c0f2bd9b76a3385cd946b7d07bc9b5f;hp=3cfa850deeb139bddc5929322778adb03b185373;hpb=c748fbcb434374ec13e14cc837ade7c581789e0c;p=apitrace diff --git a/scripts/profileshader.py b/scripts/profileshader.py index 3cfa850..d31130e 100755 --- a/scripts/profileshader.py +++ b/scripts/profileshader.py @@ -24,52 +24,61 @@ # ##########################################################################/ + import sys -if len(sys.argv) <= 1: - print 'Please specify a file to read' - sys.exit() -times = {} +def process(stream): + times = {} + + # call no gpu_start gpu_dura cpu_start cpu_dura pixels program name + + for line in stream: + words = line.split(' ') + + if line.startswith('#'): + continue + + if words[0] == 'call': + id = long(words[1]) + duration = long(words[3]) + shader = long(words[7]) + func = words[8] -# frame_begin no gpu_start cpu_start -# frame_end no gpu_end gpu_dura cpu_end cpu_dura -# call no gpu_start gpu_dura cpu_start cpu_dura pixels program name + if times.has_key(shader): + times[shader]['draws'] += 1 + times[shader]['duration'] += duration -for line in open(sys.argv[1], 'r'): - words = line.split(' ') + if duration > times[shader]['longestDuration']: + times[shader]['longest'] = id + times[shader]['longestDuration'] = duration + else: + times[shader] = {'draws': 1, 'duration': duration, 'longest': id, 'longestDuration': duration} - if line.startswith('#'): - continue + times = sorted(times.items(), key=lambda x: x[1]['duration'], reverse=True) - if words[0] == 'call': - id = long(words[1]) - duration = long(words[3]) - shader = long(words[7]) - func = words[8] + print '+------------+--------------+--------------------+--------------+-------------+' + print '| Shader[id] | Draws [#] | Duration [ns] v | Per Call[ns] | Longest[id] |' + print '+------------+--------------+--------------------+--------------+-------------+' - if times.has_key(shader): - times[shader]['draws'] += 1 - times[shader]['duration'] += duration + for shader in times: + id = str(shader[0]).rjust(10) + draw = str(shader[1]['draws']).rjust(12) + dura = str(shader[1]['duration']).rjust(18) + perCall = str(shader[1]['duration'] / shader[1]['draws']).rjust(12) + longest = str(shader[1]['longest']).rjust(11) + print "| %s | %s | %s | %s | %s |" % (id, draw, dura, perCall, longest) - if duration > times[shader]['longestDuration']: - times[shader]['longest'] = id - times[shader]['longestDuration'] = duration - else: - times[shader] = {'draws': 1, 'duration': duration, 'longest': id, 'longestDuration': duration} + print '+------------+--------------+--------------------+--------------+-------------+' -times = sorted(times.items(), key=lambda x: x[1]['duration'], reverse=True) -print '+------------+--------------+--------------------+--------------+-------------+' -print '| Shader[id] | Draws [#] | Duration [ns] v | Per Call[ns] | Longest[id] |' -print '+------------+--------------+--------------------+--------------+-------------+' +def main(): + if len(sys.argv) > 1: + for arg in sys.argv[1:]: + process(open(arg, 'rt')) + else: + process(sys.stdin) -for shader in times: - id = str(shader[0]).rjust(10) - draw = str(shader[1]['draws']).rjust(12) - dura = str(shader[1]['duration']).rjust(18) - perCall = str(shader[1]['duration'] / shader[1]['draws']).rjust(12) - longest = str(shader[1]['longest']).rjust(11) - print "| %s | %s | %s | %s | %s |" % (id, draw, dura, perCall, longest) -print '+------------+--------------+--------------------+--------------+-------------+' +if __name__ == '__main__': + main()