1
- use analyzeme:: ProfilingData ;
1
+ use analyzeme:: { Event , ProfilingData , Timestamp } ;
2
2
use std:: error:: Error ;
3
3
use std:: path:: PathBuf ;
4
-
4
+ use std :: time :: { Duration , SystemTime } ;
5
5
use structopt:: StructOpt ;
6
6
7
7
#[ derive( StructOpt , Debug ) ]
@@ -18,15 +18,49 @@ fn main() -> Result<(), Box<dyn Error>> {
18
18
19
19
let data = ProfilingData :: new ( & opt. file_prefix ) ?;
20
20
21
+ let global_start_time = data. iter ( ) . map ( |e| e. timestamp . start ( ) ) . min ( ) . unwrap ( ) ;
22
+
21
23
for event in data. iter ( ) {
22
24
if let Some ( thread_id) = opt. thread_id {
23
25
if event. thread_id != thread_id {
24
26
continue ;
25
27
}
26
28
}
27
29
28
- println ! ( "{:?}" , event ) ;
30
+ print_event ( & event . to_event ( ) , global_start_time ) ;
29
31
}
30
32
31
33
Ok ( ( ) )
32
34
}
35
+
36
+ fn system_time_to_micros_since ( t : SystemTime , since : SystemTime ) -> u128 {
37
+ t. duration_since ( since)
38
+ . unwrap_or ( Duration :: from_nanos ( 0 ) )
39
+ . as_micros ( )
40
+ }
41
+
42
+ fn print_event ( event : & Event < ' _ > , global_start_time : SystemTime ) {
43
+ let additional_data = event. additional_data . join ( "," ) ;
44
+
45
+ let timestamp = match event. timestamp {
46
+ Timestamp :: Instant ( t) => {
47
+ format ! ( "{} μs" , system_time_to_micros_since( t, global_start_time) )
48
+ }
49
+ Timestamp :: Interval { start, end } => format ! (
50
+ "{} μs - {} μs" ,
51
+ system_time_to_micros_since( start, global_start_time) ,
52
+ system_time_to_micros_since( end, global_start_time)
53
+ ) ,
54
+ } ;
55
+
56
+ println ! (
57
+ r#"{{
58
+ kind: {},
59
+ label: {},
60
+ additional_data: [{}],
61
+ timestamp: {},
62
+ thread_id: {},
63
+ }}"# ,
64
+ event. event_kind, event. label, additional_data, timestamp, event. thread_id
65
+ ) ;
66
+ }
0 commit comments