diff --git a/site/frontend/src/pages/compare/compile/common.ts b/site/frontend/src/pages/compare/compile/common.ts index f0cb036e2..f11211e48 100644 --- a/site/frontend/src/pages/compare/compile/common.ts +++ b/site/frontend/src/pages/compare/compile/common.ts @@ -19,6 +19,9 @@ export type CompileBenchmarkFilter = { llvm: boolean; cranelift: boolean; }; + target: { + x86_64_unknown_linux_gnu: boolean; + }; category: { primary: boolean; secondary: boolean; @@ -54,6 +57,9 @@ export const defaultCompileFilter: CompileBenchmarkFilter = { llvm: true, cranelift: true, }, + target: { + x86_64_unknown_linux_gnu: true, + }, category: { primary: true, secondary: true, @@ -72,6 +78,7 @@ export const defaultCompileFilter: CompileBenchmarkFilter = { export type Profile = "check" | "debug" | "opt" | "doc"; export type CodegenBackend = "llvm" | "cranelift"; export type Category = "primary" | "secondary"; +export type Target = "x86_64-unknown-linux-gnu"; export type CompileBenchmarkMap = Dict; @@ -95,6 +102,7 @@ export interface CompileBenchmarkComparison { profile: Profile; scenario: string; backend: CodegenBackend; + target: Target; comparison: StatComparison; } @@ -103,6 +111,7 @@ export interface CompileTestCase { profile: Profile; scenario: string; backend: CodegenBackend; + target: Target; category: Category; } @@ -151,6 +160,15 @@ export function computeCompileComparisonsWithNonRelevant( } } + function targetFilter(target: Target): boolean { + if (target === "x86_64-unknown-linux-gnu") { + return filter.target.x86_64_unknown_linux_gnu; + } else { + // Unknown, but by default we should show things + return true; + } + } + function artifactFilter(metadata: CompileBenchmarkMetadata | null): boolean { if (metadata?.binary === null) return true; @@ -183,6 +201,7 @@ export function computeCompileComparisonsWithNonRelevant( profileFilter(comparison.testCase.profile) && scenarioFilter(comparison.testCase.scenario) && backendFilter(comparison.testCase.backend) && + targetFilter(comparison.testCase.target) && categoryFilter(comparison.testCase.category) && artifactFilter(benchmarkMap[comparison.testCase.benchmark] ?? null) && changeFilter(comparison) && @@ -198,6 +217,7 @@ export function computeCompileComparisonsWithNonRelevant( profile: c.profile, scenario: c.scenario, backend: c.backend, + target: c.target, category: (benchmarkMap[c.benchmark] || {}).category || "secondary", }; return calculateComparison(c.comparison, testCase); @@ -242,11 +262,12 @@ export function transformDataForBackendComparison( cranelift: number | null; benchmark: string; profile: Profile; + target: Target; scenario: string; } > = new Map(); for (const comparison of comparisons) { - const key = `${comparison.benchmark};${comparison.profile};${comparison.scenario}`; + const key = `${comparison.benchmark};${comparison.profile};${comparison.scenario};${comparison.target}`; if (!benchmarkMap.has(key)) { benchmarkMap.set(key, { llvm: null, @@ -254,6 +275,7 @@ export function transformDataForBackendComparison( benchmark: comparison.benchmark, profile: comparison.profile, scenario: comparison.scenario, + target: comparison.target, }); } const record = benchmarkMap.get(key); @@ -271,6 +293,7 @@ export function transformDataForBackendComparison( scenario: entry.scenario, // Treat LLVM as the baseline backend: "llvm", + target: entry.target, comparison: { statistics: [entry.llvm, entry.cranelift], is_relevant: true, diff --git a/site/frontend/src/pages/compare/compile/compile-page.vue b/site/frontend/src/pages/compare/compile/compile-page.vue index b87450ccb..b63a234ee 100644 --- a/site/frontend/src/pages/compare/compile/compile-page.vue +++ b/site/frontend/src/pages/compare/compile/compile-page.vue @@ -78,6 +78,13 @@ function loadFilterFromUrl( defaultFilter.backend.cranelift ), }, + target: { + x86_64_unknown_linux_gnu: getBoolOrDefault( + urlParams, + "target-x86_64-unknown-linux-gnu", + defaultFilter.target.x86_64_unknown_linux_gnu + ), + }, category: { primary: getBoolOrDefault( urlParams, @@ -174,6 +181,11 @@ function storeFilterToUrl( filter.backend.cranelift, defaultFilter.backend.cranelift ); + storeOrReset( + "target-x86_64-unknown-linux-gnu", + filter.target.x86_64_unknown_linux_gnu, + defaultFilter.target.x86_64_unknown_linux_gnu + ); storeOrReset( "primary", filter.category.primary, diff --git a/site/frontend/src/pages/compare/compile/filters.vue b/site/frontend/src/pages/compare/compile/filters.vue index 5e29382a6..202cab3f2 100644 --- a/site/frontend/src/pages/compare/compile/filters.vue +++ b/site/frontend/src/pages/compare/compile/filters.vue @@ -207,6 +207,26 @@ const opened = createPersistedRef(PREF_FILTERS_OPENED); +
+
+
+ Targets + The host target of the benchmarked compiler. +
+
+ +
diff --git a/site/frontend/src/pages/compare/compile/table/comparisons-table.vue b/site/frontend/src/pages/compare/compile/table/comparisons-table.vue index df078a24a..bc9a17931 100644 --- a/site/frontend/src/pages/compare/compile/table/comparisons-table.vue +++ b/site/frontend/src/pages/compare/compile/table/comparisons-table.vue @@ -2,7 +2,7 @@ import {TestCaseComparison} from "../../data"; import Tooltip from "../../tooltip.vue"; import {ArtifactDescription} from "../../types"; -import {percentClass} from "../../shared"; +import {formatTarget, percentClass} from "../../shared"; import {CompileBenchmarkMap, CompileTestCase} from "../common"; import {computed} from "vue"; import {testCaseKey} from "../common"; @@ -62,6 +62,7 @@ const unit = computed(() => { Profile Scenario Backend + Target % Change Significance Threshold @@ -101,6 +102,9 @@ const unit = computed(() => { {{ comparison.testCase.scenario }} {{ comparison.testCase.backend }} + + {{ formatTarget(comparison.testCase.target) }} +
diff --git a/site/frontend/src/pages/compare/shared.ts b/site/frontend/src/pages/compare/shared.ts index 44ae0e379..b6890a027 100644 --- a/site/frontend/src/pages/compare/shared.ts +++ b/site/frontend/src/pages/compare/shared.ts @@ -1,3 +1,5 @@ +import {Target} from "./compile/common"; + export function formatDate(dateString: string): string { const date = new Date(dateString); function padStr(i) { @@ -93,3 +95,11 @@ export function benchmarkNameMatchesFilter( return benchmarkName.includes(trimmedFilterName); } } + +const TARGET_SHORTCUTS: {[target in Target]: string} = { + "x86_64-unknown-linux-gnu": "x64", +}; + +export function formatTarget(target: Target): string { + return TARGET_SHORTCUTS[target] ?? target; +} diff --git a/site/src/api.rs b/site/src/api.rs index 3940bfa97..a97aba339 100644 --- a/site/src/api.rs +++ b/site/src/api.rs @@ -332,6 +332,7 @@ pub mod comparison { pub profile: String, pub scenario: String, pub backend: String, + pub target: String, pub comparison: StatComparison, } diff --git a/site/src/comparison.rs b/site/src/comparison.rs index 88667e2ff..010f2c7c0 100644 --- a/site/src/comparison.rs +++ b/site/src/comparison.rs @@ -11,6 +11,7 @@ use collector::Bound; use database::{ metric::Metric, selector::{self, BenchmarkQuery, CompileBenchmarkQuery, RuntimeBenchmarkQuery, TestCase}, + Target, }; use database::{ArtifactId, Benchmark, Lookup, Profile, Scenario}; use serde::Serialize; @@ -152,6 +153,7 @@ pub async fn handle_compare( profile: comparison.profile.to_string(), scenario: comparison.scenario.to_string(), backend: comparison.backend.to_string(), + target: comparison.target.to_string(), comparison: comparison.comparison.into(), }) .collect(); @@ -742,6 +744,7 @@ async fn compare_given_commits( scenario: test_case.scenario, benchmark: test_case.benchmark, backend: test_case.backend, + target: test_case.target, comparison, }, ) @@ -1315,6 +1318,7 @@ pub struct CompileTestResultComparison { profile: Profile, scenario: Scenario, backend: CodegenBackend, + target: Target, comparison: TestResultComparison, }