25 lines
1.3 KiB
Python
25 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
# Разбивка времени кадра по фазам из `adb shell dumpsys gfxinfo <пакет> framestats` (stdin), см. ui_bench в env.sh.
|
|
import sys, statistics as st
|
|
lines=sys.stdin.read().splitlines()
|
|
hdr=None; rows=[]
|
|
for l in lines:
|
|
if l.startswith('Flags,'): hdr=l.strip().strip(',').split(','); continue
|
|
if hdr and l and l[0].isdigit():
|
|
v=l.strip().strip(',').split(',')
|
|
if len(v)>=len(hdr): rows.append(dict(zip(hdr,map(int,v[:len(hdr)]))))
|
|
if l.startswith('---PROFILEDATA---') and rows: pass
|
|
rows=[r for r in rows if r['Flags']==0]
|
|
def ms(a,b): return [(r[b]-r[a])/1e6 for r in rows if r[a]>0 and r[b]>0]
|
|
def p(x):
|
|
x=sorted(x); return f"p50 {x[len(x)//2]:.1f} p90 {x[int(len(x)*.9)]:.1f} max {x[-1]:.1f}" if x else "-"
|
|
print("frames",len(rows))
|
|
print("total ", p(ms('IntendedVsync','FrameCompleted')))
|
|
print("input+anim ", p(ms('HandleInputStart','PerformTraversalsStart')))
|
|
print("traversal ", p(ms('PerformTraversalsStart','DrawStart')))
|
|
print("record draw", p(ms('DrawStart','SyncQueued')))
|
|
print("sync ", p(ms('SyncStart','IssueDrawCommandsStart')))
|
|
print("issue cmds ", p(ms('IssueDrawCommandsStart','SwapBuffers')))
|
|
print("swap ", p(ms('SwapBuffers','FrameCompleted')))
|
|
if 'GpuCompleted' in hdr: print("gpu ", p(ms('IssueDrawCommandsStart','GpuCompleted')))
|