Files

35 lines
1.1 KiB
Python

"""Per-frame comparison of two Mali counter captures.
usage: python compare.py A.pftrace FPS_A B.pftrace FPS_B
Needs `pip install perfetto`.
"""
import sys
from perfetto.trace_processor import TraceProcessor
def per_second(path):
tp = TraceProcessor(trace=path)
rows = tp.query(
"select t.name, sum(c.value) s, (max(c.ts) - min(c.ts)) / 1e9 dur "
"from gpu_counter_track t join counter c on c.track_id = t.id group by t.id")
out = {r.name: r.s / r.dur for r in rows if r.dur > 0}
tp.close()
return out
def main():
if len(sys.argv) != 5:
sys.exit(__doc__)
a, fps_a, b, fps_b = sys.argv[1], float(sys.argv[2]), sys.argv[3], float(sys.argv[4])
A, B = per_second(a), per_second(b)
print(f"{'counter':52s} {'A/frame':>14s} {'B/frame':>14s} {'B/A':>6s}")
for name in sorted(A, key=lambda k: -A[k] / fps_a):
pa, pb = A[name] / fps_a, B.get(name, 0.0) / fps_b
ratio = f"{pb / pa:6.2f}" if pa else " n/a"
print(f"{name:52s} {pa:14.0f} {pb:14.0f} {ratio}")
if __name__ == "__main__":
main()