Skip to content

Commit eebb68d

Browse files
committed
Refactor the analysis code
1 parent 4118fcd commit eebb68d

File tree

1 file changed

+19
-25
lines changed

1 file changed

+19
-25
lines changed

summarize/src/analysis.rs

Lines changed: 19 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use std::borrow::Cow;
12
use std::collections::HashMap;
23
use std::time::Duration;
34
use measureme::{ProfilingData, TimestampKind, Event};
@@ -32,6 +33,16 @@ pub fn perform_analysis(data: ProfilingData) -> Results {
3233
let mut threads = HashMap::<_, Vec<Event>>::new();
3334
let mut total_time = Duration::from_nanos(0);
3435

36+
let mut record_event_data = |label: &Cow<'_, str>, f: &Fn(&mut QueryData)| {
37+
if let Some(data) = query_data.get_mut(&label[..]) {
38+
f(data);
39+
} else {
40+
let mut data = QueryData::new(label.clone().into_owned());
41+
f(&mut data);
42+
query_data.insert(label.clone().into_owned(), data);
43+
}
44+
};
45+
3546
for event in data.iter() {
3647
match event.timestamp_kind {
3748
TimestampKind::Start => {
@@ -44,13 +55,9 @@ pub fn perform_analysis(data: ProfilingData) -> Results {
4455
event.timestamp.duration_since(prev_event.timestamp)
4556
.unwrap_or(Duration::from_nanos(0));
4657

47-
if let Some(data) = query_data.get_mut(&prev_event.label[..]) {
58+
record_event_data(&prev_event.label, &|data| {
4859
data.self_time += duration;
49-
} else {
50-
let mut data = QueryData::new(prev_event.label.clone().into_owned());
51-
data.self_time = duration;
52-
query_data.insert(prev_event.label.clone().into_owned(), data);
53-
}
60+
});
5461

5562
//record the total time
5663
total_time += duration;
@@ -64,13 +71,9 @@ pub fn perform_analysis(data: ProfilingData) -> Results {
6471
},
6572
TimestampKind::Instant => {
6673
if &event.event_kind[..] == "QueryCacheHit" {
67-
if let Some(data) = query_data.get_mut(&event.label[..]) {
74+
record_event_data(&event.label, &|data| {
6875
data.number_of_cache_hits += 1;
69-
} else {
70-
let mut data = QueryData::new(event.label.clone().into_owned());
71-
data.number_of_cache_hits = 1;
72-
query_data.insert(event.label.clone().into_owned(), data);
73-
}
76+
});
7477
}
7578
},
7679
TimestampKind::End => {
@@ -88,15 +91,10 @@ pub fn perform_analysis(data: ProfilingData) -> Results {
8891
.unwrap_or(Duration::from_nanos(0));
8992

9093
if &event.event_kind[..] == "Query" || &event.event_kind[..] == "GenericActivity" {
91-
if let Some(data) = query_data.get_mut(&start_event.label[..]) {
94+
record_event_data(&event.label, &|data| {
9295
data.self_time += duration;
9396
data.number_of_cache_misses += 1;
94-
} else {
95-
let mut data = QueryData::new(start_event.label.clone().into_owned());
96-
data.self_time = duration;
97-
data.number_of_cache_misses = 1;
98-
query_data.insert(start_event.label.clone().into_owned(), data);
99-
}
97+
});
10098

10199
//now adjust the previous event's start time so that it "started" right now
102100
if let Some(previous_event) = thread_stack.last_mut() {
@@ -107,13 +105,9 @@ pub fn perform_analysis(data: ProfilingData) -> Results {
107105
//record the total time
108106
total_time += duration;
109107
} else if &event.event_kind[..] == "QueryBlocked" {
110-
if let Some(data) = query_data.get_mut(&start_event.label[..]) {
108+
record_event_data(&event.label, &|data| {
111109
data.blocked_time += duration;
112-
} else {
113-
let mut data = QueryData::new(start_event.label.clone().into_owned());
114-
data.blocked_time = duration;
115-
query_data.insert(start_event.label.clone().into_owned(), data);
116-
}
110+
});
117111
}
118112
}
119113
}

0 commit comments

Comments
 (0)