Skip to content

Commit d9a055d

Browse files
authored
Merge pull request #59 from andjo403/complete_events
use complete events in crox
2 parents 8aa6331 + 0b8a852 commit d9a055d

File tree

1 file changed

+28
-28
lines changed

1 file changed

+28
-28
lines changed

crox/src/main.rs

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use std::path::PathBuf;
55
use std::time::Duration;
66
use std::time::SystemTime;
77

8-
use measureme::{ProfilingData, TimestampKind};
8+
use measureme::{MatchingEvent, ProfilingData};
99

1010
use serde::{Serialize, Serializer};
1111
use structopt::StructOpt;
@@ -17,10 +17,8 @@ fn as_micros<S: Serializer>(d: &Duration, s: S) -> Result<S::Ok, S::Error> {
1717

1818
#[derive(Clone, Copy, Eq, PartialEq, Serialize)]
1919
enum EventType {
20-
#[serde(rename = "B")]
21-
Begin,
22-
#[serde(rename = "E")]
23-
End,
20+
#[serde(rename = "X")]
21+
Complete,
2422
}
2523

2624
#[derive(Serialize)]
@@ -33,6 +31,8 @@ struct Event {
3331
#[serde(rename = "ts", serialize_with = "as_micros")]
3432
#[serde()]
3533
timestamp: Duration,
34+
#[serde(rename = "dur", serialize_with = "as_micros")]
35+
duration: Duration,
3636
#[serde(rename = "pid")]
3737
process_id: u32,
3838
#[serde(rename = "tid")]
@@ -79,7 +79,7 @@ fn generate_thread_to_collapsed_thread_mapping(
7979
end_and_thread.sort_unstable_by_key(|&(end, _thread_id)| end);
8080
let mut next_end_iter = end_and_thread.iter().peekable();
8181

82-
// collect the the threads in order of the start time
82+
// collect the the threads in order of the start time
8383
let mut start_and_thread = thread_start_and_end
8484
.iter()
8585
.map(|(&thread_id, &(start, _end))| (start, thread_id))
@@ -121,32 +121,32 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
121121

122122
let mut serializer = serde_json::Serializer::new(chrome_file);
123123
let thread_to_collapsed_thread = generate_thread_to_collapsed_thread_mapping(&opt, &data);
124-
let mut event_iterator = data.iter();
124+
let mut event_iterator = data.iter_matching_events();
125125

126126
//create an iterator so we can avoid allocating a Vec with every Event for serialization
127127
let json_event_iterator = std::iter::from_fn(|| {
128128
while let Some(event) = event_iterator.next() {
129-
let event_type = match event.timestamp_kind {
130-
TimestampKind::Start => EventType::Begin,
131-
TimestampKind::End => EventType::End,
132-
// Chrome does not seem to like how many QueryCacheHit events we generate
133-
TimestampKind::Instant => continue,
134-
};
135-
136-
return Some(Event {
137-
name: event.label.clone().into_owned(),
138-
category: event.event_kind.clone().into_owned(),
139-
event_type,
140-
timestamp: event
141-
.timestamp
142-
.duration_since(first_event_timestamp)
143-
.unwrap(),
144-
process_id: 0,
145-
thread_id: *thread_to_collapsed_thread
146-
.get(&event.thread_id)
147-
.unwrap_or(&event.thread_id),
148-
args: None,
149-
});
129+
// Chrome does not seem to like how many QueryCacheHit events we generate
130+
// only handle startStop events for now
131+
if let MatchingEvent::StartStop(start, stop) = event {
132+
let duration = stop.timestamp.duration_since(start.timestamp).unwrap();
133+
134+
return Some(Event {
135+
name: start.label.clone().into_owned(),
136+
category: start.event_kind.clone().into_owned(),
137+
event_type: EventType::Complete,
138+
timestamp: start
139+
.timestamp
140+
.duration_since(first_event_timestamp)
141+
.unwrap(),
142+
duration,
143+
process_id: 0,
144+
thread_id: *thread_to_collapsed_thread
145+
.get(&start.thread_id)
146+
.unwrap_or(&start.thread_id),
147+
args: None,
148+
});
149+
}
150150
}
151151

152152
None

0 commit comments

Comments
 (0)