@@ -17,6 +17,7 @@ import {
1717} from " ./common" ;
1818import {BenchmarkInfo } from " ../../../api" ;
1919import {importantCompileMetrics } from " ../metrics" ;
20+ import {getBoolOrDefault } from " ../shared" ;
2021
2122const props = defineProps <{
2223 data: CompareResponse ;
@@ -28,45 +29,65 @@ function loadFilterFromUrl(
2829 urlParams : Dict <string >,
2930 defaultFilter : CompileBenchmarkFilter
3031): CompileBenchmarkFilter {
31- function getBoolOrDefault(name : string , defaultValue : boolean ): boolean {
32- if (urlParams .hasOwnProperty (name )) {
33- return urlParams [name ] === " true" ;
34- }
35- return defaultValue ;
36- }
37-
3832 return {
3933 name: urlParams [" name" ] ?? defaultFilter .name ,
40- nonRelevant: getBoolOrDefault (" nonRelevant" , defaultFilter .nonRelevant ),
41- showRawData: getBoolOrDefault (" showRawData" , defaultFilter .showRawData ),
34+ nonRelevant: getBoolOrDefault (
35+ urlParams ,
36+ " nonRelevant" ,
37+ defaultFilter .nonRelevant
38+ ),
39+ showRawData: getBoolOrDefault (
40+ urlParams ,
41+ " showRawData" ,
42+ defaultFilter .showRawData
43+ ),
4244 profile: {
43- check: getBoolOrDefault (" check" , defaultFilter .profile .check ),
44- debug: getBoolOrDefault (" debug" , defaultFilter .profile .debug ),
45- opt: getBoolOrDefault (" opt" , defaultFilter .profile .opt ),
46- doc: getBoolOrDefault (" doc" , defaultFilter .profile .doc ),
45+ check: getBoolOrDefault (urlParams , " check" , defaultFilter .profile .check ),
46+ debug: getBoolOrDefault (urlParams , " debug" , defaultFilter .profile .debug ),
47+ opt: getBoolOrDefault (urlParams , " opt" , defaultFilter .profile .opt ),
48+ doc: getBoolOrDefault (urlParams , " doc" , defaultFilter .profile .doc ),
4749 },
4850 scenario: {
49- full: getBoolOrDefault (" full" , defaultFilter .scenario .full ),
50- incrFull: getBoolOrDefault (" incrFull" , defaultFilter .scenario .incrFull ),
51+ full: getBoolOrDefault (urlParams , " full" , defaultFilter .scenario .full ),
52+ incrFull: getBoolOrDefault (
53+ urlParams ,
54+ " incrFull" ,
55+ defaultFilter .scenario .incrFull
56+ ),
5157 incrUnchanged: getBoolOrDefault (
58+ urlParams ,
5259 " incrUnchanged" ,
5360 defaultFilter .scenario .incrUnchanged
5461 ),
5562 incrPatched: getBoolOrDefault (
63+ urlParams ,
5664 " incrPatched" ,
5765 defaultFilter .scenario .incrPatched
5866 ),
5967 },
6068 category: {
61- primary: getBoolOrDefault (" primary" , defaultFilter .category .primary ),
69+ primary: getBoolOrDefault (
70+ urlParams ,
71+ " primary" ,
72+ defaultFilter .category .primary
73+ ),
6274 secondary: getBoolOrDefault (
75+ urlParams ,
6376 " secondary" ,
6477 defaultFilter .category .secondary
6578 ),
6679 },
6780 artifact: {
68- binary: getBoolOrDefault (" binary" , defaultFilter .artifact .binary ),
69- library: getBoolOrDefault (" library" , defaultFilter .artifact .library ),
81+ binary: getBoolOrDefault (
82+ urlParams ,
83+ " binary" ,
84+ defaultFilter .artifact .binary
85+ ),
86+ library: getBoolOrDefault (
87+ urlParams ,
88+ " library" ,
89+ defaultFilter .artifact .library
90+ ),
7091 },
7192 };
7293}
@@ -140,6 +161,17 @@ function storeFilterToUrl(
140161function updateFilter(newFilter : CompileBenchmarkFilter ) {
141162 storeFilterToUrl (newFilter , defaultCompileFilter , getUrlParams ());
142163 filter .value = newFilter ;
164+ refreshQuickLinks ();
165+ }
166+
167+ /**
168+ * When the filter changes, the URL is updated.
169+ * After that happens, we want to re-render the quick links component, because
170+ * it contains links that are "relative" to the current URL. Changing this
171+ * key ref will cause it to be re-rendered.
172+ */
173+ function refreshQuickLinks() {
174+ quickLinksKey .value += 1 ;
143175}
144176
145177function exportData() {
@@ -148,6 +180,7 @@ function exportData() {
148180
149181const urlParams = getUrlParams ();
150182
183+ const quickLinksKey = ref (0 );
151184const filter = ref (loadFilterFromUrl (urlParams , defaultCompileFilter ));
152185
153186const benchmarkMap = createCompileBenchmarkMap (props .data );
@@ -166,9 +199,10 @@ const filteredSummary = computed(() => computeSummary(comparisons.value));
166199
167200<template >
168201 <MetricSelector
202+ :key =" quickLinksKey"
169203 :quick-links =" importantCompileMetrics"
170204 :selected-metric =" selector.stat"
171- :benchmark-info =" benchmarkInfo"
205+ :metrics =" benchmarkInfo.compile_metrics "
172206 />
173207 <Filters
174208 :defaultFilter =" defaultCompileFilter"
0 commit comments