mirror of
https://github.com/koloideal/Argenta.git
synced 2026-06-10 10:05:28 +03:00
50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
__all__ = ["ReleaseGenerator"]
|
|
|
|
import json
|
|
import shutil
|
|
from pathlib import Path
|
|
|
|
from ..benchmarks.core.models import BenchmarkGroupResult
|
|
from .diagram_generator import DiagramGenerator
|
|
|
|
|
|
class ReleaseGenerator:
|
|
def __init__(self, lib_version: str) -> None:
|
|
self.lib_version = lib_version
|
|
self.output_dir = Path("metrics/reports/releases") / lib_version
|
|
|
|
def generate_release(self, benchmark_groups: list[BenchmarkGroupResult]) -> Path:
|
|
if self.output_dir.exists():
|
|
shutil.rmtree(self.output_dir)
|
|
|
|
self.output_dir.mkdir(parents=True, exist_ok=True)
|
|
|
|
for benchmark_group in benchmark_groups:
|
|
type_dir = self.output_dir / benchmark_group.type_
|
|
type_dir.mkdir(exist_ok=True)
|
|
|
|
diagram_generator = DiagramGenerator(type_dir)
|
|
diagram_generator.generate_comparison_diagram(benchmark_group)
|
|
|
|
json_data = {
|
|
"type": benchmark_group.type_,
|
|
"iterations": benchmark_group.iterations,
|
|
"gc_disabled": benchmark_group.is_gc_disabled,
|
|
"benchmarks": [
|
|
{
|
|
"name": br.name,
|
|
"description": br.description,
|
|
"avg_time": br.avg_time,
|
|
"median_time": br.median_time,
|
|
"std_dev": br.std_dev
|
|
}
|
|
for br in benchmark_group.benchmark_results
|
|
]
|
|
}
|
|
|
|
json_path = type_dir / f"{benchmark_group.type_}.json"
|
|
with open(json_path, 'w', encoding='utf-8') as f:
|
|
json.dump(json_data, f, indent=2, ensure_ascii=False)
|
|
|
|
return self.output_dir
|