92 lines
2.6 KiB
Python
92 lines
2.6 KiB
Python
import sqlite3 as sql
|
|
import argparse
|
|
|
|
|
|
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument('sqldb')
|
|
parser.add_argument('-v', '--visual', action='store_true', default=False)
|
|
parser.add_argument('-z', '--zoom', action='store', type=float, default=1)
|
|
parser.add_argument('-p', '--period', action='store', default=333)
|
|
|
|
args = parser.parse_args()
|
|
|
|
sqldb = args.sqldb
|
|
|
|
tick_per_cycle = int(args.period)
|
|
cycle_per_line = int(100 * args.zoom)
|
|
|
|
stages = ['f','d','r','D','i','a','g','e','b','w','c']
|
|
|
|
|
|
def non_stage():
|
|
return '.'
|
|
|
|
def stage(x):
|
|
return stages[x]
|
|
|
|
def dump_visual(pos, records):
|
|
pos_start = pos[0] % cycle_per_line
|
|
line = ''
|
|
line += '[' + non_stage() * pos_start
|
|
pos_next = pos_start
|
|
last_index = 0
|
|
for i in range(1, len(pos)):
|
|
if (pos[i] == pos[last_index]) or pos[i] == 0:
|
|
continue
|
|
if pos[i] - pos[last_index] >= cycle_per_line - pos_next:
|
|
diff = cycle_per_line - pos_next
|
|
line += f'{stage(last_index)}' * diff + ']\n'
|
|
diff_line = ((pos[i] - pos[last_index]) - diff - 1) // cycle_per_line
|
|
if diff_line > 0:
|
|
line += '[' + f'{stage(last_index)}' * cycle_per_line + ']\n'
|
|
|
|
pos_next = pos[i] % cycle_per_line
|
|
line += '[' + f'{stage(last_index)}' * pos_next
|
|
else:
|
|
diff = pos[i] - pos[last_index]
|
|
pos_next = pos[i] % cycle_per_line
|
|
line += f'{stage(last_index)}' * diff
|
|
last_index = i
|
|
if cycle_per_line - pos_next == 0:
|
|
line += ']\n'
|
|
line += f'[{stage(i)}{non_stage() * (cycle_per_line - 1)}]\n'
|
|
else:
|
|
line += f'{stage(i)}' + non_stage() * (cycle_per_line - pos_next - 1) + ']'
|
|
line += str(records)
|
|
print(line)
|
|
|
|
|
|
def dump_txt(pos, records):
|
|
for i in range(len(pos)):
|
|
print(f'{stage(i)}{pos[i]}', end=' ')
|
|
print(records)
|
|
|
|
|
|
dump = dump_txt
|
|
if args.visual:
|
|
dump = dump_visual
|
|
|
|
with sql.connect(sqldb) as con:
|
|
cur = con.cursor()
|
|
cur.execute("SELECT * FROM LifeTimeCommitTrace")
|
|
col_name = [i[0] for i in cur.description]
|
|
col_name = col_name[1:]
|
|
col_name = [i.lower() for i in col_name]
|
|
rows = cur.fetchall()
|
|
for row in rows:
|
|
row = row[1:]
|
|
pos = []
|
|
records = []
|
|
i = 0
|
|
for val in row:
|
|
if col_name[i].startswith('at'):
|
|
pos.append(val//tick_per_cycle)
|
|
elif col_name[i].startswith('pc'):
|
|
if val < 0:
|
|
val = val + 1 << 64
|
|
records.append(hex(val))
|
|
else:
|
|
records.append(val)
|
|
i += 1
|
|
dump(pos, records) |