xref: /aosp_15_r20/external/autotest/client/tools/oprofile_diff (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1*9c5db199SXin Li#!/usr/bin/python3
2*9c5db199SXin Lifrom __future__ import absolute_import
3*9c5db199SXin Lifrom __future__ import division
4*9c5db199SXin Lifrom __future__ import print_function
5*9c5db199SXin Li
6*9c5db199SXin Liimport re
7*9c5db199SXin Liimport sys
8*9c5db199SXin Li
9*9c5db199SXin Lidef parse_file(filename):
10*9c5db199SXin Li    data = {}
11*9c5db199SXin Li    for line in open(filename):
12*9c5db199SXin Li        if re.match('\d', line):
13*9c5db199SXin Li            (samples, percent, symbol) = line.split()
14*9c5db199SXin Li            data[symbol] = float(percent)
15*9c5db199SXin Li    return data
16*9c5db199SXin Li
17*9c5db199SXin Li
18*9c5db199SXin Lidata1 = parse_file(sys.argv[1])
19*9c5db199SXin Lidata2 = parse_file(sys.argv[2])
20*9c5db199SXin Li
21*9c5db199SXin Lidelta = {}
22*9c5db199SXin Lifor symbol in list(data1.keys()) + list(data2.keys()):
23*9c5db199SXin Li    delta[symbol] = data1.get(symbol, 0) - data2.get(symbol, 0)
24*9c5db199SXin Li
25*9c5db199SXin Lidef lookup_delta(symbol):
26*9c5db199SXin Li    return delta[symbol]
27*9c5db199SXin Li
28*9c5db199SXin Lisorted_deltas = sorted(list(delta.keys()), key=lookup_delta, reverse=True)
29*9c5db199SXin Li
30*9c5db199SXin Liif len(sorted_deltas) > 40:
31*9c5db199SXin Li    sorted_deltas = sorted_deltas[0:20] + sorted_deltas[-20:]
32*9c5db199SXin Li
33*9c5db199SXin Lifor symbol in sorted_deltas:
34*9c5db199SXin Li    print('%2.3f %s' % (delta[symbol], symbol))
35