xref: /aosp_15_r20/development/tools/axl/chewperf.py (revision 90c8c64db3049935a07c6143d7fd006e26f8ecca)
1*90c8c64dSAndroid Build Coastguard Worker#!/usr/bin/env python
2*90c8c64dSAndroid Build Coastguard Worker
3*90c8c64dSAndroid Build Coastguard Worker"""
4*90c8c64dSAndroid Build Coastguard Worker  chewperf.py: Chew an http perf log
5*90c8c64dSAndroid Build Coastguard Worker  bucketize
6*90c8c64dSAndroid Build Coastguard Worker
7*90c8c64dSAndroid Build Coastguard Worker"""
8*90c8c64dSAndroid Build Coastguard Worker
9*90c8c64dSAndroid Build Coastguard Workerimport sys, time
10*90c8c64dSAndroid Build Coastguard Worker
11*90c8c64dSAndroid Build Coastguard Workerdef resets():
12*90c8c64dSAndroid Build Coastguard Worker    f = open(sys.argv[1]).read()
13*90c8c64dSAndroid Build Coastguard Worker    rawLines = f.split('\n')
14*90c8c64dSAndroid Build Coastguard Worker
15*90c8c64dSAndroid Build Coastguard Worker    times = []
16*90c8c64dSAndroid Build Coastguard Worker    for x in range(len(rawLines)):
17*90c8c64dSAndroid Build Coastguard Worker        line = rawLines[x].split()
18*90c8c64dSAndroid Build Coastguard Worker        try:
19*90c8c64dSAndroid Build Coastguard Worker            if line[-1] == "SIGNAL_STRENGTH":
20*90c8c64dSAndroid Build Coastguard Worker                ts = int(rawLines[x - 1].split()[-1])
21*90c8c64dSAndroid Build Coastguard Worker                times.append(ts)
22*90c8c64dSAndroid Build Coastguard Worker        except:
23*90c8c64dSAndroid Build Coastguard Worker            pass
24*90c8c64dSAndroid Build Coastguard Worker
25*90c8c64dSAndroid Build Coastguard Worker    return times
26*90c8c64dSAndroid Build Coastguard Worker
27*90c8c64dSAndroid Build Coastguard Workerdef augment():
28*90c8c64dSAndroid Build Coastguard Worker    f = open(sys.argv[1]).read()
29*90c8c64dSAndroid Build Coastguard Worker    rawLines = f.split('\r\n')
30*90c8c64dSAndroid Build Coastguard Worker
31*90c8c64dSAndroid Build Coastguard Worker    out = []
32*90c8c64dSAndroid Build Coastguard Worker    t0 = None
33*90c8c64dSAndroid Build Coastguard Worker    last = 0
34*90c8c64dSAndroid Build Coastguard Worker    for line in rawLines:
35*90c8c64dSAndroid Build Coastguard Worker        if "Pulled" in line:
36*90c8c64dSAndroid Build Coastguard Worker            chewed = [int(line.split()[5]), int(line.split()[7])]
37*90c8c64dSAndroid Build Coastguard Worker            if not t0: t0 = chewed[1]
38*90c8c64dSAndroid Build Coastguard Worker            tm = chewed[1] - t0
39*90c8c64dSAndroid Build Coastguard Worker            out.append("%s %d" % (line, (tm - last)))
40*90c8c64dSAndroid Build Coastguard Worker            last = tm
41*90c8c64dSAndroid Build Coastguard Worker        else:
42*90c8c64dSAndroid Build Coastguard Worker            out.append(line)
43*90c8c64dSAndroid Build Coastguard Worker    print "\n".join(out)
44*90c8c64dSAndroid Build Coastguard Worker
45*90c8c64dSAndroid Build Coastguard Workerdef chew():
46*90c8c64dSAndroid Build Coastguard Worker    f = open(sys.argv[1]).read()
47*90c8c64dSAndroid Build Coastguard Worker    rawLines = f.split('\n')
48*90c8c64dSAndroid Build Coastguard Worker    lines = [x for x in rawLines if "Pulled" in x]
49*90c8c64dSAndroid Build Coastguard Worker
50*90c8c64dSAndroid Build Coastguard Worker    sidx = lines[0].split().index("Pulled")
51*90c8c64dSAndroid Build Coastguard Worker    print "sidx", sidx
52*90c8c64dSAndroid Build Coastguard Worker    chewed = [[int(x.split()[sidx + 2]), int(x.split()[sidx + 4])] for x in lines]
53*90c8c64dSAndroid Build Coastguard Worker
54*90c8c64dSAndroid Build Coastguard Worker    t0 = chewed[0][1]
55*90c8c64dSAndroid Build Coastguard Worker    tLast = chewed[-1][1]
56*90c8c64dSAndroid Build Coastguard Worker    chewed = [[x[1] - t0, x[0]] for x in chewed]
57*90c8c64dSAndroid Build Coastguard Worker
58*90c8c64dSAndroid Build Coastguard Worker    totalTime = tLast - t0
59*90c8c64dSAndroid Build Coastguard Worker    bytes = sum(x[1] for x in chewed)
60*90c8c64dSAndroid Build Coastguard Worker    print "total time", totalTime, "bytes", bytes, "rate", bytes * 1000 / totalTime
61*90c8c64dSAndroid Build Coastguard Worker
62*90c8c64dSAndroid Build Coastguard Worker    buckets = {}
63*90c8c64dSAndroid Build Coastguard Worker    for x in chewed:
64*90c8c64dSAndroid Build Coastguard Worker        bucket = x[0] / 1000
65*90c8c64dSAndroid Build Coastguard Worker        bytes = x[1]
66*90c8c64dSAndroid Build Coastguard Worker        if bucket in buckets:
67*90c8c64dSAndroid Build Coastguard Worker            buckets[bucket] += bytes
68*90c8c64dSAndroid Build Coastguard Worker        else:
69*90c8c64dSAndroid Build Coastguard Worker            buckets[bucket] = bytes
70*90c8c64dSAndroid Build Coastguard Worker
71*90c8c64dSAndroid Build Coastguard Worker    top = max(buckets.keys())
72*90c8c64dSAndroid Build Coastguard Worker    for x in range(top):
73*90c8c64dSAndroid Build Coastguard Worker        if x not in buckets.keys():
74*90c8c64dSAndroid Build Coastguard Worker            buckets[x] = 0
75*90c8c64dSAndroid Build Coastguard Worker
76*90c8c64dSAndroid Build Coastguard Worker    # smooth
77*90c8c64dSAndroid Build Coastguard Worker    window = [0 for x in range(5)]
78*90c8c64dSAndroid Build Coastguard Worker
79*90c8c64dSAndroid Build Coastguard Worker    for x in range(len(buckets.items())):
80*90c8c64dSAndroid Build Coastguard Worker        window[x % len(window)] = buckets.items()[x][1]
81*90c8c64dSAndroid Build Coastguard Worker        print "%s\t%s" % (buckets.items()[x][0], sum(window) / len(window))
82*90c8c64dSAndroid Build Coastguard Worker
83*90c8c64dSAndroid Build Coastguard Workerdef main():
84*90c8c64dSAndroid Build Coastguard Worker    chew()
85*90c8c64dSAndroid Build Coastguard Worker
86*90c8c64dSAndroid Build Coastguard Workerif __name__ == '__main__':
87*90c8c64dSAndroid Build Coastguard Worker    main()
88