@@ -62,14 +62,19 @@ fn generate_thread_to_collapsed_thread_mapping(
62
62
// collect start and end times for all threads
63
63
let mut thread_start_and_end: HashMap < u32 , ( SystemTime , SystemTime ) > = HashMap :: default ( ) ;
64
64
for event in data. iter ( ) {
65
+ let timestamp = if let Some ( t) = event. timestamp ( ) {
66
+ t
67
+ } else {
68
+ continue ;
69
+ } ;
65
70
thread_start_and_end
66
71
. entry ( event. thread_id )
67
72
. 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) ;
69
74
* thread_start = cmp:: min ( * thread_start, event_min) ;
70
75
* thread_end = cmp:: max ( * thread_end, event_max) ;
71
76
} )
72
- . or_insert_with ( || timestamp_to_min_max ( event . timestamp ) ) ;
77
+ . or_insert_with ( || timestamp_to_min_max ( timestamp) ) ;
73
78
}
74
79
// collect the the threads in order of the end time
75
80
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>>
130
135
131
136
let mut seq = serializer. serialize_seq ( None ) ?;
132
137
133
- let data = ProfilingData :: from_paged_buffer ( self_profile_data)
138
+ let data = ProfilingData :: from_paged_buffer ( self_profile_data, None )
134
139
. map_err ( |e| anyhow:: format_err!( "{:?}" , e) ) ?;
135
140
136
141
let thread_to_collapsed_thread =
137
142
generate_thread_to_collapsed_thread_mapping ( opt. collapse_threads , & data) ;
138
143
139
144
// Chrome does not seem to like how many QueryCacheHit events we generate
140
145
// 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
+ {
142
150
let duration = event. duration ( ) . unwrap ( ) ;
143
151
if let Some ( minimum_duration) = opt. minimum_duration {
144
152
if duration. as_micros ( ) < minimum_duration {
145
153
continue ;
146
154
}
147
155
}
148
- let full_event = event . to_event ( ) ;
156
+ let full_event = data . to_full_event ( & event ) ;
149
157
let crox_event = Event {
150
158
name : full_event. label . clone ( ) . into_owned ( ) ,
151
159
category : full_event. event_kind . clone ( ) . into_owned ( ) ,
152
160
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 ( ) ,
154
167
duration,
155
- process_id : data. metadata . process_id ,
168
+ process_id : data. metadata ( ) . process_id ,
156
169
thread_id : * thread_to_collapsed_thread
157
170
. get ( & event. thread_id )
158
171
. unwrap_or ( & event. thread_id ) ,
@@ -162,12 +175,12 @@ pub fn generate(self_profile_data: Vec<u8>, opt: Opt) -> anyhow::Result<Vec<u8>>
162
175
}
163
176
// add crate name for the process_id
164
177
let index_of_crate_name = data
165
- . metadata
178
+ . metadata ( )
166
179
. cmd
167
180
. find ( " --crate-name " )
168
181
. map ( |index| index + 14 ) ;
169
182
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) ;
171
184
let ( crate_name, _) = last. split_at ( last. find ( " " ) . unwrap_or ( last. len ( ) ) ) ;
172
185
173
186
let process_name = json ! ( {
@@ -176,7 +189,7 @@ pub fn generate(self_profile_data: Vec<u8>, opt: Opt) -> anyhow::Result<Vec<u8>>
176
189
"ts" : 0 ,
177
190
"tid" : 0 ,
178
191
"cat" : "" ,
179
- "pid" : data. metadata. process_id,
192
+ "pid" : data. metadata( ) . process_id,
180
193
"args" : {
181
194
"name" : crate_name
182
195
}
@@ -190,9 +203,9 @@ pub fn generate(self_profile_data: Vec<u8>, opt: Opt) -> anyhow::Result<Vec<u8>>
190
203
"ts" : 0 ,
191
204
"tid" : 0 ,
192
205
"cat" : "" ,
193
- "pid" : data. metadata. process_id,
206
+ "pid" : data. metadata( ) . process_id,
194
207
"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
196
209
}
197
210
} ) ;
198
211
seq. serialize_element ( & process_name) ?;
0 commit comments