def show_summary(trace: ProcessedTrace) -> None: print(f"{trace.NumberGCs} GCs") for k, v in trace.number_gcs_in_each_generation.items(): print(f" {k.name}: {v}") print(f"{trace.HeapCount} heaps") for m in ("HeapSizeAfterMB_Mean", "HeapSizeAfterMB_Max"): print(f"{m}: {trace.unwrap_metric_from_name(m)}") # TODO: how to get mean/max memory load? Is it possible? metrics: Sequence[str] = ("PauseDurationMSec", "PromotedMBPerSec", "HeapSizeAfterMB") num_metrics = len(metrics) kind_to_metric_to_values: List[List[List[float]]] = [ [[] for _ in range(num_metrics)] for _ in range(4) ] for gc in trace.gcs: gc_kind = get_gc_kind(gc) for metric_index, metric in enumerate(metrics): metric_index_to_values = kind_to_metric_to_values[enum_value( gc_kind)] values = metric_index_to_values[metric_index] values.append(gc.unwrap_metric_from_name(metric)) for kind in GCKind: histograms: List[BasicHistogram] = [] for metric_index, metric in enumerate(metrics): histograms.append( BasicHistogram( values=kind_to_metric_to_values[enum_value(kind)] [metric_index], name=metric, x_label=kind.name, )) basic_chart(histograms)
def _custom_chart() -> None: xs = tuple(range(8)) basic_chart(( BasicLineChart( lines=( BasicLine(name="linear", xs=xs, ys=xs), BasicLine(name="quadratic", xs=xs, ys=[x**2 for x in xs]), ), x_label="x", y_label="y", ), BasicHistogram(values=[x for n in range(4) for x in repeat(n, n)], x_label="number"), ))