@@ -26,11 +26,12 @@ const BASE_HUES: &[f64] = &[
2626/// Chart dimensions and layout.
2727const CHART_WIDTH : f64 = 500.0 ;
2828const CHART_HEIGHT : f64 = 250.0 ;
29- const CHART_PADDING_LEFT : f64 = 80 .0; // Extra space for y-axis labels
30- const CHART_PADDING_RIGHT : f64 = 60 .0;
31- const CHART_PADDING_TOP : f64 = 60 .0;
32- const CHART_PADDING_BOTTOM : f64 = 40 .0;
29+ const CHART_PADDING_LEFT : f64 = 40 .0;
30+ const CHART_PADDING_RIGHT : f64 = 10 .0;
31+ const CHART_PADDING_TOP : f64 = 40 .0;
32+ const CHART_PADDING_BOTTOM : f64 = 30 .0;
3333const CHART_SPACING : f64 = 40.0 ;
34+ const LEGEND_WIDTH : f64 = 70.0 ;
3435const LEGEND_LINE_HEIGHT : f64 = 20.0 ;
3536
3637/// Lightness range for color shades (oldest to newest).
@@ -88,7 +89,12 @@ fn generate_shade_colors(base_hue: f64, count: usize) -> Vec<String> {
8889}
8990
9091/// Generate an SVG group for a single benchmark chart.
91- fn generate_benchmark_chart ( benchmark : & BenchmarkData , base_hue : f64 , y_offset : f64 ) -> Group {
92+ fn generate_benchmark_chart (
93+ benchmark : & BenchmarkData ,
94+ base_hue : f64 ,
95+ x_offset : f64 ,
96+ y_offset : f64 ,
97+ ) -> Group {
9298 let mut group = Group :: new ( ) ;
9399 let chart_id = & benchmark. name ;
94100
@@ -120,7 +126,7 @@ fn generate_benchmark_chart(benchmark: &BenchmarkData, base_hue: f64, y_offset:
120126
121127 let plot_width = CHART_WIDTH - CHART_PADDING_LEFT - CHART_PADDING_RIGHT ;
122128 let plot_height = CHART_HEIGHT - CHART_PADDING_TOP - CHART_PADDING_BOTTOM ;
123- let plot_x = CHART_PADDING_LEFT ;
129+ let plot_x = x_offset + CHART_PADDING_LEFT ;
124130 let plot_y = y_offset + CHART_PADDING_TOP ;
125131
126132 // Create clip path for the plot area
@@ -338,9 +344,10 @@ const CHART_JS: &str = include_str!("../static/chart.js");
338344///
339345/// Takes the output of `load_all_benchmarks`: a list of BenchmarkData.
340346pub fn generate_svg ( benchmarks : & [ BenchmarkData ] ) -> String {
341- // Calculate total dimensions
342- let total_height = benchmarks. len ( ) as f64 * ( CHART_HEIGHT + CHART_SPACING ) ;
343- let total_width = CHART_WIDTH + 120.0 ; // Extra space for legend
347+ // Calculate total dimensions (charts laid out horizontally)
348+ let chart_total_width = CHART_WIDTH + LEGEND_WIDTH ;
349+ let total_width = benchmarks. len ( ) as f64 * ( chart_total_width + CHART_SPACING ) ;
350+ let total_height = CHART_HEIGHT ;
344351
345352 // Create document
346353 let mut document =
@@ -357,11 +364,12 @@ pub fn generate_svg(benchmarks: &[BenchmarkData]) -> String {
357364 . set ( "fill" , "#fafafa" ) ;
358365 document = document. add ( background) ;
359366
360- // Generate each chart
367+ // Generate each chart (laid out horizontally)
361368 for ( i, benchmark) in benchmarks. iter ( ) . enumerate ( ) {
362- let y_offset = i as f64 * ( CHART_HEIGHT + CHART_SPACING ) ;
369+ let x_offset = i as f64 * ( chart_total_width + CHART_SPACING ) ;
370+ let y_offset = 0.0 ;
363371 let base_hue = BASE_HUES [ i % BASE_HUES . len ( ) ] ;
364- let chart_group = generate_benchmark_chart ( benchmark, base_hue, y_offset) ;
372+ let chart_group = generate_benchmark_chart ( benchmark, base_hue, x_offset , y_offset) ;
365373 document = document. add ( chart_group) ;
366374 }
367375
0 commit comments