@@ -95,6 +95,7 @@ async fn handle_graph_impl(
95
95
let range = ctxt. data_range ( body. start . clone ( ) ..=body. end . clone ( ) ) ;
96
96
let commits: Arc < Vec < _ > > = Arc :: new ( range. iter ( ) . map ( |c| c. clone ( ) . into ( ) ) . collect ( ) ) ;
97
97
98
+ let metric: database:: Metric = body. stat . parse ( ) . unwrap ( ) ;
98
99
let metric_selector = Selector :: One ( body. stat . clone ( ) ) ;
99
100
100
101
let series = ctxt
@@ -117,47 +118,30 @@ async fn handle_graph_impl(
117
118
. collect :: < Vec < _ > > ( ) ;
118
119
119
120
let mut baselines = HashMap :: new ( ) ;
120
- let c = commits. clone ( ) ;
121
- let baselines = & mut baselines;
122
121
123
- let summary_queries = iproduct ! (
122
+ let summary_query_cases = iproduct ! (
124
123
ctxt. summary_scenarios( ) ,
125
- vec![ Profile :: Check , Profile :: Debug , Profile :: Opt ] ,
126
- vec! [ body . stat . clone ( ) ]
127
- )
128
- . map ( | ( scenario, profile, metric ) | {
129
- Query :: new ( )
124
+ vec![ Profile :: Check , Profile :: Debug , Profile :: Opt ]
125
+ ) ;
126
+
127
+ for ( scenario, profile) in summary_query_cases {
128
+ let query = Query :: new ( )
130
129
. set :: < String > ( Tag :: Benchmark , Selector :: All )
131
130
. set ( Tag :: Profile , Selector :: One ( profile) )
132
131
. set ( Tag :: Scenario , Selector :: One ( scenario) )
133
- . set :: < String > ( Tag :: Metric , Selector :: One ( metric) )
134
- } ) ;
132
+ . set ( Tag :: Metric , metric_selector. clone ( ) ) ;
135
133
136
- for query in summary_queries {
137
- let profile = query
138
- . get ( Tag :: Profile )
139
- . unwrap ( )
140
- . raw
141
- . assert_one ( )
142
- . parse :: < Profile > ( )
143
- . unwrap ( ) ;
144
- let scenario = query
145
- . get ( Tag :: Scenario )
146
- . unwrap ( )
147
- . raw
148
- . assert_one ( )
149
- . parse :: < Scenario > ( )
150
- . unwrap ( ) ;
151
- let q = Query :: new ( )
134
+ let baseline_query = Query :: new ( )
152
135
. set :: < String > ( Tag :: Benchmark , Selector :: All )
153
136
. set ( Tag :: Profile , Selector :: One ( profile) )
154
137
. set ( Tag :: Scenario , Selector :: One ( Scenario :: Empty ) )
155
- . set ( Tag :: Metric , query. get ( Tag :: Metric ) . unwrap ( ) . raw . clone ( ) ) ;
156
- let against = match baselines. entry ( q. clone ( ) ) {
138
+ . set ( Tag :: Metric , metric_selector. clone ( ) ) ;
139
+
140
+ let baseline = match baselines. entry ( baseline_query. clone ( ) ) {
157
141
std:: collections:: hash_map:: Entry :: Occupied ( o) => * o. get ( ) ,
158
142
std:: collections:: hash_map:: Entry :: Vacant ( v) => {
159
143
let value = db:: average (
160
- ctxt. statistic_series ( q , c . clone ( ) )
144
+ ctxt. statistic_series ( baseline_query , commits . clone ( ) )
161
145
. await ?
162
146
. into_iter ( )
163
147
. map ( |sr| sr. interpolate ( ) . series )
@@ -168,29 +152,24 @@ async fn handle_graph_impl(
168
152
* v. insert ( value)
169
153
}
170
154
} ;
171
- let averaged = db:: average (
155
+
156
+ let avg_vs_baseline = db:: average (
172
157
ctxt. statistic_series ( query. clone ( ) , commits. clone ( ) )
173
158
. await ?
174
159
. into_iter ( )
175
160
. map ( |sr| sr. interpolate ( ) . series )
176
161
. collect ( ) ,
177
162
)
178
- . map ( |( ( c, d) , i) | ( ( c, Some ( d. expect ( "interpolated" ) / against) ) , i) ) ;
179
- let graph_data = to_graph_points ( body. kind , averaged) . collect :: < Vec < _ > > ( ) ;
163
+ . map ( |( ( c, d) , i) | ( ( c, Some ( d. expect ( "interpolated" ) / baseline) ) , i) ) ;
164
+
165
+ let graph_data = to_graph_points ( body. kind , avg_vs_baseline) . collect :: < Vec < _ > > ( ) ;
166
+
180
167
series. push ( SeriesResponse {
181
168
path : Path :: new ( )
182
169
. set ( PathComponent :: Benchmark ( "Summary" . into ( ) ) )
183
170
. set ( PathComponent :: Profile ( profile) )
184
171
. set ( PathComponent :: Scenario ( scenario) )
185
- . set ( PathComponent :: Metric (
186
- query
187
- . get ( Tag :: Metric )
188
- . unwrap ( )
189
- . raw
190
- . assert_one ( )
191
- . parse ( )
192
- . unwrap ( ) ,
193
- ) ) ,
172
+ . set ( PathComponent :: Metric ( metric) ) ,
194
173
series : graph_data,
195
174
} )
196
175
}
0 commit comments