Skip to content

Commit 89db057

Browse files
authored
Merge pull request #2365 from Kobzol/detailed-graphs-selector
Correctly pass backend and target to self-profile query
2 parents 873b066 + 8b9e260 commit 89db057

File tree

5 files changed

+36
-7
lines changed

5 files changed

+36
-7
lines changed

site/frontend/src/pages/compare/compile/table/benchmark-detail.vue

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@ function detailedQueryLink(
5252
commit: ArtifactDescription,
5353
baseCommit?: ArtifactDescription
5454
): string {
55-
const {benchmark, profile, scenario} = props.testCase;
56-
let link = `/detailed-query.html?commit=${commit.commit}&benchmark=${benchmark}-${profile}&scenario=${scenario}`;
55+
const {benchmark, profile, scenario, backend, target} = props.testCase;
56+
let link = `/detailed-query.html?commit=${commit.commit}&benchmark=${benchmark}-${profile}&scenario=${scenario}&backend=${backend}&target=${target}`;
5757
if (baseCommit !== undefined) {
5858
link += `&base_commit=${baseCommit.commit}`;
5959
}

site/frontend/src/pages/detailed-query/page.vue

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ function storeSortToUrl() {
189189
190190
async function loadData() {
191191
const params = getUrlParams();
192-
const {commit, base_commit, benchmark, scenario} = params;
192+
const {commit, base_commit, benchmark, scenario, backend, target} = params;
193193
194194
// Load sort state from URL
195195
loadSortFromUrl(params);
@@ -199,6 +199,8 @@ async function loadData() {
199199
base_commit: base_commit ?? null,
200200
benchmark,
201201
scenario,
202+
backend,
203+
target,
202204
};
203205
selector.value = currentSelector;
204206

site/frontend/src/pages/detailed-query/utils.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ export interface Selector {
99
base_commit: string | null;
1010
benchmark: string;
1111
scenario: string;
12+
backend: string;
13+
target: string;
1214
}
1315

1416
export interface ProfileElement {
@@ -100,8 +102,9 @@ export function createTitleData(selector: Selector | null): {
100102
let selfHref = "";
101103

102104
if (state.base_commit) {
103-
selfHref = `/detailed-query.html?commit=${state.commit}&scenario=${state.scenario}&benchmark=${state.benchmark}`;
104-
baseHref = `/detailed-query.html?commit=${state.base_commit}&scenario=${state.scenario}&benchmark=${state.benchmark}`;
105+
const args = `&scenario=${state.scenario}&benchmark=${state.benchmark}&backend=${state.backend}&target=${state.target}`;
106+
selfHref = `/detailed-query.html?commit=${state.commit}${args}`;
107+
baseHref = `/detailed-query.html?commit=${state.base_commit}${args}`;
105108
}
106109

107110
return {text, baseHref, selfHref};

site/src/api.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,12 @@ pub mod self_profile {
490490
pub benchmark: String,
491491
#[serde(alias = "run_name")]
492492
pub scenario: String,
493+
// These fields are kept optional for backwards compatibility
494+
// They can be make required e.g. in 2027
495+
#[serde(default)]
496+
pub backend: Option<String>,
497+
#[serde(default)]
498+
pub target: Option<String>,
493499
}
494500

495501
#[derive(Debug, Clone, Serialize)]

site/src/request_handlers/self_profile.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ use std::time::Instant;
55

66
use brotli::enc::BrotliEncoderParams;
77
use bytes::Buf;
8-
use database::selector;
98
use database::ArtifactId;
109
use database::{metric::Metric, CommitType};
10+
use database::{selector, CodegenBackend, Target};
1111
use headers::{ContentType, Header};
1212
use hyper::StatusCode;
1313

@@ -461,10 +461,23 @@ pub async fn handle_self_profile(
461461
.map_err(|e| format!("invalid run name: {e:?}"))?;
462462
let index = ctxt.index.load();
463463

464+
let backend: CodegenBackend = if let Some(backend) = body.backend {
465+
backend.parse()?
466+
} else {
467+
CodegenBackend::Llvm
468+
};
469+
let target: Target = if let Some(target) = body.target {
470+
target.parse()?
471+
} else {
472+
Target::X86_64UnknownLinuxGnu
473+
};
474+
464475
let query = selector::CompileBenchmarkQuery::default()
465476
.benchmark(selector::Selector::One(bench_name.to_string()))
466477
.profile(selector::Selector::One(profile.parse().unwrap()))
467478
.scenario(selector::Selector::One(scenario))
479+
.backend(selector::Selector::One(backend))
480+
.target(selector::Selector::One(target))
468481
.metric(selector::Selector::One(Metric::CpuClock));
469482

470483
// Helper for finding an `ArtifactId` based on a commit sha
@@ -481,7 +494,12 @@ pub async fn handle_self_profile(
481494
let commits = Arc::new(commits);
482495

483496
let mut cpu_responses = ctxt.statistic_series(query, commits.clone()).await?;
484-
assert_eq!(cpu_responses.len(), 1, "all selectors are exact");
497+
if cpu_responses.len() != 1 {
498+
return Err(
499+
"The database query returned multiple results for the given commit. This is a bug."
500+
.to_string(),
501+
);
502+
}
485503
let mut cpu_response = cpu_responses.remove(0).series;
486504

487505
let mut self_profile = get_or_download_self_profile(

0 commit comments

Comments
 (0)