xref: /aosp_15_r20/external/trace-cmd/scripts/debug/tsync_hist.py (revision 58e6ee5f017f6a8912852c892d18457e4bafb554)
1*58e6ee5fSAndroid Build Coastguard Worker# SPDX-License-Identifier: GPL-2.0
2*58e6ee5fSAndroid Build Coastguard Worker#
3*58e6ee5fSAndroid Build Coastguard Worker# Copyright (C) 2019, VMware Inc, Tzvetomir Stoyanov <[email protected]>
4*58e6ee5fSAndroid Build Coastguard Worker# Copyright (C) 2019, VMware Inc, Yordan Karadzhov <[email protected]>
5*58e6ee5fSAndroid Build Coastguard Worker
6*58e6ee5fSAndroid Build Coastguard Worker
7*58e6ee5fSAndroid Build Coastguard Workerimport matplotlib.pyplot as plt
8*58e6ee5fSAndroid Build Coastguard Workerimport matplotlib.lines as mlines
9*58e6ee5fSAndroid Build Coastguard Workerimport numpy as np
10*58e6ee5fSAndroid Build Coastguard Workerimport sys
11*58e6ee5fSAndroid Build Coastguard Worker
12*58e6ee5fSAndroid Build Coastguard Workerdef newline(p1, p2):
13*58e6ee5fSAndroid Build Coastguard Worker    ax = plt.gca()
14*58e6ee5fSAndroid Build Coastguard Worker    xmin, xmax = ax.get_xbound()
15*58e6ee5fSAndroid Build Coastguard Worker
16*58e6ee5fSAndroid Build Coastguard Worker    if(p2[0] == p1[0]):
17*58e6ee5fSAndroid Build Coastguard Worker        xmin = xmax = p1[0]
18*58e6ee5fSAndroid Build Coastguard Worker        ymin, ymax = ax.get_ybound()
19*58e6ee5fSAndroid Build Coastguard Worker    else:
20*58e6ee5fSAndroid Build Coastguard Worker        ymax = p1[1]+(p2[1]-p1[1])/(p2[0]-p1[0])*(xmax-p1[0])
21*58e6ee5fSAndroid Build Coastguard Worker        ymin = p1[1]+(p2[1]-p1[1])/(p2[0]-p1[0])*(xmin-p1[0])
22*58e6ee5fSAndroid Build Coastguard Worker
23*58e6ee5fSAndroid Build Coastguard Worker    l = mlines.Line2D([xmin,xmax], [ymin,ymax], color='red')
24*58e6ee5fSAndroid Build Coastguard Worker    ax.add_line(l)
25*58e6ee5fSAndroid Build Coastguard Worker    return l
26*58e6ee5fSAndroid Build Coastguard Worker
27*58e6ee5fSAndroid Build Coastguard Worker
28*58e6ee5fSAndroid Build Coastguard Workerdata = np.loadtxt(fname = sys.argv[1])
29*58e6ee5fSAndroid Build Coastguard Workerselected_ts  = data[-1, 1]
30*58e6ee5fSAndroid Build Coastguard Workerselected_ofs = data[-1, 0]
31*58e6ee5fSAndroid Build Coastguard Workerdata = data[:-1,:]
32*58e6ee5fSAndroid Build Coastguard Worker
33*58e6ee5fSAndroid Build Coastguard Workerx = data[:, 1] - data[:, 0]
34*58e6ee5fSAndroid Build Coastguard Worker
35*58e6ee5fSAndroid Build Coastguard Workermean = x.mean()
36*58e6ee5fSAndroid Build Coastguard Workerstd = x.std()
37*58e6ee5fSAndroid Build Coastguard Worker
38*58e6ee5fSAndroid Build Coastguard Workernum_bins = 500
39*58e6ee5fSAndroid Build Coastguard Workermin = x.min() #+ .4 * (x.max() - x.min())
40*58e6ee5fSAndroid Build Coastguard Workermax = x.max() #- .4 * (x.max() - x.min())
41*58e6ee5fSAndroid Build Coastguard Workerbins = np.linspace(min, max, num_bins, endpoint = False, dtype=int)
42*58e6ee5fSAndroid Build Coastguard Worker
43*58e6ee5fSAndroid Build Coastguard Workerfig, ax = plt.subplots()
44*58e6ee5fSAndroid Build Coastguard Worker
45*58e6ee5fSAndroid Build Coastguard Worker# the histogram of the data
46*58e6ee5fSAndroid Build Coastguard Workern, bins, patches = ax.hist(x, bins, histtype=u'step');
47*58e6ee5fSAndroid Build Coastguard Worker
48*58e6ee5fSAndroid Build Coastguard Workerax.set_xlabel('clock offset [$\mu$s]')
49*58e6ee5fSAndroid Build Coastguard Workerax.set_ylabel('entries')
50*58e6ee5fSAndroid Build Coastguard Workerax.set_title("$\sigma$=%i" % std)
51*58e6ee5fSAndroid Build Coastguard Worker
52*58e6ee5fSAndroid Build Coastguard Workerx1, y1 = [selected_ofs, min], [selected_ofs, max]
53*58e6ee5fSAndroid Build Coastguard Workernewline(x1, y1)
54*58e6ee5fSAndroid Build Coastguard Worker
55*58e6ee5fSAndroid Build Coastguard Worker# Tweak spacing to prevent clipping of ylabel
56*58e6ee5fSAndroid Build Coastguard Workerfig.tight_layout()
57*58e6ee5fSAndroid Build Coastguard Workerplt.show()
58