Skip to content

Commit 584081a

Browse files
committed
Calculate self-times not total times
1 parent a568e7e commit 584081a

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

src/librustc/util/profiling.rs

+18-7
Original file line numberDiff line numberDiff line change
@@ -243,50 +243,61 @@ impl SelfProfiler {
243243

244244
let mut results = CalculatedResults::new();
245245

246+
//(event, child time to subtract)
246247
let mut query_stack = Vec::new();
247248

248249
for event in events {
249250
match event {
250251
QueryStart { .. } | GenericActivityStart { .. } => {
251-
query_stack.push(event);
252+
query_stack.push((event, 0));
252253
},
253254
QueryEnd { query_name, category, time: end_time } => {
254255
let previous_query = query_stack.pop();
255-
if let Some(QueryStart {
256+
if let Some((QueryStart {
256257
query_name: p_query_name,
257258
time: start_time,
258-
category: _ }) = previous_query {
259+
category: _ }, child_time_to_subtract)) = previous_query {
259260
assert_eq!(
260261
p_query_name,
261262
query_name,
262263
"Saw a query end but the previous query wasn't the corresponding start"
263264
);
264265

265266
let time_ns = time_between_ns(*start_time, *end_time);
267+
let self_time_ns = time_ns - child_time_to_subtract;
266268
let result_data = results.categories.entry(*category).or_default();
267269

268-
*result_data.query_times.entry(query_name).or_default() += time_ns;
270+
*result_data.query_times.entry(query_name).or_default() += self_time_ns;
271+
272+
if let Some((_, child_time_to_subtract)) = query_stack.last_mut() {
273+
*child_time_to_subtract += time_ns;
274+
}
269275
} else {
270276
bug!("Saw a query end but the previous event wasn't a query start");
271277
}
272278
}
273279
GenericActivityEnd { category, time: end_time } => {
274280
let previous_event = query_stack.pop();
275-
if let Some(GenericActivityStart {
281+
if let Some((GenericActivityStart {
276282
category: previous_category,
277-
time: start_time }) = previous_event {
283+
time: start_time }, child_time_to_subtract)) = previous_event {
278284
assert_eq!(
279285
previous_category,
280286
category,
281287
"Saw an end but the previous event wasn't the corresponding start"
282288
);
283289

284290
let time_ns = time_between_ns(*start_time, *end_time);
291+
let self_time_ns = time_ns - child_time_to_subtract;
285292
let result_data = results.categories.entry(*category).or_default();
286293

287294
*result_data.query_times
288295
.entry("{time spent not running queries}")
289-
.or_default() += time_ns;
296+
.or_default() += self_time_ns;
297+
298+
if let Some((_, child_time_to_subtract)) = query_stack.last_mut() {
299+
*child_time_to_subtract += time_ns;
300+
}
290301
} else {
291302
bug!("Saw an activity end but the previous event wasn't an activity start");
292303
}

0 commit comments

Comments
 (0)