Files
SleppyOwl/tools/tv/framestats.py
2026-10-14 10:50:40 +03:00

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')))