@@ -5,7 +5,7 @@ use std::path::PathBuf;
5
5
use std:: time:: Duration ;
6
6
use std:: time:: SystemTime ;
7
7
8
- use measureme:: { ProfilingData , TimestampKind } ;
8
+ use measureme:: { MatchingEvent , ProfilingData } ;
9
9
10
10
use serde:: { Serialize , Serializer } ;
11
11
use structopt:: StructOpt ;
@@ -17,10 +17,8 @@ fn as_micros<S: Serializer>(d: &Duration, s: S) -> Result<S::Ok, S::Error> {
17
17
18
18
#[ derive( Clone , Copy , Eq , PartialEq , Serialize ) ]
19
19
enum EventType {
20
- #[ serde( rename = "B" ) ]
21
- Begin ,
22
- #[ serde( rename = "E" ) ]
23
- End ,
20
+ #[ serde( rename = "X" ) ]
21
+ Complete ,
24
22
}
25
23
26
24
#[ derive( Serialize ) ]
@@ -33,6 +31,8 @@ struct Event {
33
31
#[ serde( rename = "ts" , serialize_with = "as_micros" ) ]
34
32
#[ serde( ) ]
35
33
timestamp : Duration ,
34
+ #[ serde( rename = "dur" , serialize_with = "as_micros" ) ]
35
+ duration : Duration ,
36
36
#[ serde( rename = "pid" ) ]
37
37
process_id : u32 ,
38
38
#[ serde( rename = "tid" ) ]
@@ -79,7 +79,7 @@ fn generate_thread_to_collapsed_thread_mapping(
79
79
end_and_thread. sort_unstable_by_key ( |& ( end, _thread_id) | end) ;
80
80
let mut next_end_iter = end_and_thread. iter ( ) . peekable ( ) ;
81
81
82
- // collect the the threads in order of the start time
82
+ // collect the the threads in order of the start time
83
83
let mut start_and_thread = thread_start_and_end
84
84
. iter ( )
85
85
. map ( |( & thread_id, & ( start, _end) ) | ( start, thread_id) )
@@ -121,32 +121,32 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
121
121
122
122
let mut serializer = serde_json:: Serializer :: new ( chrome_file) ;
123
123
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 ( ) ;
125
125
126
126
//create an iterator so we can avoid allocating a Vec with every Event for serialization
127
127
let json_event_iterator = std:: iter:: from_fn ( || {
128
128
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
+ }
150
150
}
151
151
152
152
None
0 commit comments