(entries: List[BenchmarkEntry])
| 74 | |
| 75 | |
| 76 | def render_hq_comparison(entries: List[BenchmarkEntry]): |
| 77 | def render_bench_subtab(child, name): |
| 78 | return Tabs(tabs=[Panel(child=child, title=name)]) |
| 79 | |
| 80 | tabs = [] |
| 81 | reports = [entry.report for entry in entries] |
| 82 | widgets = { |
| 83 | "Profiling data": [], |
| 84 | "Global usage": [], |
| 85 | "Node usage": [], |
| 86 | "Process usage": [], |
| 87 | } |
| 88 | node_maxes = {} |
| 89 | |
| 90 | for key in widgets: |
| 91 | for report in reports: |
| 92 | name = report.directory.name |
| 93 | panel = Tabs() |
| 94 | |
| 95 | if key == "Profiling data": |
| 96 | panel = render_bench_subtab(render_profiling_data(report), name) |
| 97 | elif key == "Global usage": |
| 98 | per_node_df = create_global_resources_df(report.monitoring) |
| 99 | panel = render_bench_subtab(render_global_resource_usage(report, per_node_df), name) |
| 100 | elif key == "Node usage": |
| 101 | # Keep maximum of each subfigure for axis sync between rows |
| 102 | per_node_df = create_global_resources_df(report.monitoring) |
| 103 | child = render_nodes_resource_usage(report, per_node_df) |
| 104 | figs = child.children[0].children[1].children |
| 105 | for fig in figs: |
| 106 | figmax = fig.y_range.end |
| 107 | if node_maxes.get(fig.title.text) is not None: |
| 108 | node_maxes[fig.title.text] = max(figmax, node_maxes[fig.title.text]) |
| 109 | else: |
| 110 | node_maxes[fig.title.text] = figmax |
| 111 | panel = render_bench_subtab(child, name) |
| 112 | elif key == "Process usage": |
| 113 | per_process_df = create_per_process_resources_df(report.monitoring) |
| 114 | panel = render_bench_subtab(render_process_resource_usage(report, per_process_df), name) |
| 115 | widgets[key].append(panel) |
| 116 | |
| 117 | for w in widgets["Node usage"]: |
| 118 | figs = w.tabs[0].child.children[0].children[1].children |
| 119 | for fig in figs: |
| 120 | ymax = node_maxes[fig.title.text] |
| 121 | fig.y_range.end = ymax |
| 122 | |
| 123 | for key in widgets: |
| 124 | tabs.append(Panel(child=row(widgets[key]), title=key)) |
| 125 | |
| 126 | return Tabs(tabs=tabs) |
| 127 | |
| 128 | |
| 129 | def render_durations(title: str, durations: List[float]): |
no test coverage detected