import pandas as pd import plotly.graph_objs as go call_depths = [0] datas = [] def ensure_big_enough(list, idx, el): l = len(list) if (idx >= l): list.extend([el]*(idx-l+1)) def incr_call_depth(thread): ensure_big_enough(call_depths, thread, 0) call_depths[thread] += 1 def append_to_datas(thread, data): ensure_big_enough(datas, thread, []) datas[thread].append(data) with open("../bin/profiler.report", "r") as file: for line in file: infos = line.split() thread = int(infos[0]) if infos[1] == "->": incr_call_depth(thread) append_to_datas(thread, { "task": f"[T{thread}] - {'{:03d}'.format(call_depths[thread])}", "start": int(infos[5]), "end": None }) elif infos[1] == "<-": call_depths[thread] -= 1 for set in datas[thread][::-1]: if set["end"] == None: set["end"] = int(infos[2]) break else: print("couldn't find task that finished") break else: print("neither -> nor <-") fig = go.Figure( layout = { 'barmode': 'stack', "dragmode" : "pan", } ) flat_datas= [item for sublist in datas for item in sublist] # i = 1 # df = flat_datas[:20] # for call in df: # name = call["task"] # start = call["start"] # end = call["end"] # duration = end,start # fig.add_bar(x=(i,duration), # y=(i,name), # base=(i,start), # orientation='h', # showlegend=False, # name=name, # hovertext=f"yes", # text="" # ) # i += 1 df = pd.DataFrame(flat_datas[:20]) df['duration'] = df['end'] - df['start'] for stackdepth, stackdepth_df in df.groupby('task'): params = {"x": stackdepth_df.duration, "y": stackdepth_df.task, "name": stackdepth, "base": stackdepth_df.start } print(params) fig.add_bar(**params, orientation='h', showlegend=False, hovertext=f"yes", text="" ) fig.show(config={'scrollZoom': True})