@@ -62,14 +62,19 @@ fn generate_thread_to_collapsed_thread_mapping(
6262 // collect start and end times for all threads
6363 let mut thread_start_and_end: HashMap < u32 , ( SystemTime , SystemTime ) > = HashMap :: default ( ) ;
6464 for event in data. iter ( ) {
65+ let timestamp = if let Some ( t) = event. timestamp ( ) {
66+ t
67+ } else {
68+ continue ;
69+ } ;
6570 thread_start_and_end
6671 . entry ( event. thread_id )
6772 . and_modify ( |( thread_start, thread_end) | {
68- let ( event_min, event_max) = timestamp_to_min_max ( event . timestamp ) ;
73+ let ( event_min, event_max) = timestamp_to_min_max ( timestamp) ;
6974 * thread_start = cmp:: min ( * thread_start, event_min) ;
7075 * thread_end = cmp:: max ( * thread_end, event_max) ;
7176 } )
72- . or_insert_with ( || timestamp_to_min_max ( event . timestamp ) ) ;
77+ . or_insert_with ( || timestamp_to_min_max ( timestamp) ) ;
7378 }
7479 // collect the the threads in order of the end time
7580 let mut end_and_thread = thread_start_and_end
@@ -130,29 +135,37 @@ pub fn generate(self_profile_data: Vec<u8>, opt: Opt) -> anyhow::Result<Vec<u8>>
130135
131136 let mut seq = serializer. serialize_seq ( None ) ?;
132137
133- let data = ProfilingData :: from_paged_buffer ( self_profile_data)
138+ let data = ProfilingData :: from_paged_buffer ( self_profile_data, None )
134139 . map_err ( |e| anyhow:: format_err!( "{:?}" , e) ) ?;
135140
136141 let thread_to_collapsed_thread =
137142 generate_thread_to_collapsed_thread_mapping ( opt. collapse_threads , & data) ;
138143
139144 // Chrome does not seem to like how many QueryCacheHit events we generate
140145 // only handle Interval events for now
141- for event in data. iter ( ) . filter ( |e| !e. timestamp . is_instant ( ) ) {
146+ for event in data
147+ . iter ( )
148+ . filter ( |e| e. timestamp ( ) . map_or ( false , |t| !t. is_instant ( ) ) )
149+ {
142150 let duration = event. duration ( ) . unwrap ( ) ;
143151 if let Some ( minimum_duration) = opt. minimum_duration {
144152 if duration. as_micros ( ) < minimum_duration {
145153 continue ;
146154 }
147155 }
148- let full_event = event . to_event ( ) ;
156+ let full_event = data . to_full_event ( & event ) ;
149157 let crox_event = Event {
150158 name : full_event. label . clone ( ) . into_owned ( ) ,
151159 category : full_event. event_kind . clone ( ) . into_owned ( ) ,
152160 event_type : EventType :: Complete ,
153- timestamp : event. timestamp . start ( ) . duration_since ( UNIX_EPOCH ) . unwrap ( ) ,
161+ timestamp : event
162+ . timestamp ( )
163+ . unwrap ( )
164+ . start ( )
165+ . duration_since ( UNIX_EPOCH )
166+ . unwrap ( ) ,
154167 duration,
155- process_id : data. metadata . process_id ,
168+ process_id : data. metadata ( ) . process_id ,
156169 thread_id : * thread_to_collapsed_thread
157170 . get ( & event. thread_id )
158171 . unwrap_or ( & event. thread_id ) ,
@@ -162,12 +175,12 @@ pub fn generate(self_profile_data: Vec<u8>, opt: Opt) -> anyhow::Result<Vec<u8>>
162175 }
163176 // add crate name for the process_id
164177 let index_of_crate_name = data
165- . metadata
178+ . metadata ( )
166179 . cmd
167180 . find ( " --crate-name " )
168181 . map ( |index| index + 14 ) ;
169182 if let Some ( index) = index_of_crate_name {
170- let ( _, last) = data. metadata . cmd . split_at ( index) ;
183+ let ( _, last) = data. metadata ( ) . cmd . split_at ( index) ;
171184 let ( crate_name, _) = last. split_at ( last. find ( " " ) . unwrap_or ( last. len ( ) ) ) ;
172185
173186 let process_name = json ! ( {
@@ -176,7 +189,7 @@ pub fn generate(self_profile_data: Vec<u8>, opt: Opt) -> anyhow::Result<Vec<u8>>
176189 "ts" : 0 ,
177190 "tid" : 0 ,
178191 "cat" : "" ,
179- "pid" : data. metadata. process_id,
192+ "pid" : data. metadata( ) . process_id,
180193 "args" : {
181194 "name" : crate_name
182195 }
@@ -190,9 +203,9 @@ pub fn generate(self_profile_data: Vec<u8>, opt: Opt) -> anyhow::Result<Vec<u8>>
190203 "ts" : 0 ,
191204 "tid" : 0 ,
192205 "cat" : "" ,
193- "pid" : data. metadata. process_id,
206+ "pid" : data. metadata( ) . process_id,
194207 "args" : {
195- "sort_index" : data. metadata. start_time. duration_since( UNIX_EPOCH ) . unwrap( ) . as_micros( ) as u64
208+ "sort_index" : data. metadata( ) . start_time. duration_since( UNIX_EPOCH ) . unwrap( ) . as_micros( ) as u64
196209 }
197210 } ) ;
198211 seq. serialize_element ( & process_name) ?;
0 commit comments