@@ -7,6 +7,7 @@ pub struct QueryData {
7
7
pub self_time : Duration ,
8
8
pub number_of_cache_misses : usize ,
9
9
pub number_of_cache_hits : usize ,
10
+ pub blocked_time : Duration ,
10
11
}
11
12
12
13
impl QueryData {
@@ -16,6 +17,7 @@ impl QueryData {
16
17
self_time : Duration :: from_nanos ( 0 ) ,
17
18
number_of_cache_misses : 0 ,
18
19
number_of_cache_hits : 0 ,
20
+ blocked_time : Duration :: from_nanos ( 0 ) ,
19
21
}
20
22
}
21
23
}
@@ -35,25 +37,30 @@ pub fn perform_analysis(data: ProfilingData) -> Results {
35
37
TimestampKind :: Start => {
36
38
let thread_stack = threads. entry ( event. thread_id ) . or_default ( ) ;
37
39
38
- if let Some ( prev_event) = thread_stack. last ( ) {
39
- //count the time run so far for this event
40
- let duration =
41
- event. timestamp . duration_since ( prev_event. timestamp )
42
- . unwrap_or ( Duration :: from_nanos ( 0 ) ) ;
40
+ if & event. event_kind [ ..] == "Query" || & event. event_kind [ ..] == "GenericActivity" {
41
+ if let Some ( prev_event) = thread_stack. last ( ) {
42
+ //count the time run so far for this event
43
+ let duration =
44
+ event. timestamp . duration_since ( prev_event. timestamp )
45
+ . unwrap_or ( Duration :: from_nanos ( 0 ) ) ;
43
46
44
- if let Some ( data) = query_data. get_mut ( & prev_event. label [ ..] ) {
45
- data. self_time += duration;
46
- } else {
47
- let mut data = QueryData :: new ( prev_event. label . clone ( ) . into_owned ( ) ) ;
48
- data. self_time = duration;
49
- query_data. insert ( prev_event. label . clone ( ) . into_owned ( ) , data) ;
47
+ if let Some ( data) = query_data. get_mut ( & prev_event. label [ ..] ) {
48
+ data. self_time += duration;
49
+ } else {
50
+ let mut data = QueryData :: new ( prev_event. label . clone ( ) . into_owned ( ) ) ;
51
+ data. self_time = duration;
52
+ query_data. insert ( prev_event. label . clone ( ) . into_owned ( ) , data) ;
53
+ }
54
+
55
+ //record the total time
56
+ total_time += duration;
50
57
}
51
58
52
- //record the total time
53
- total_time += duration;
59
+ thread_stack. push ( event) ;
60
+ } else if & event. event_kind [ ..] == "QueryBlocked" ||
61
+ & event. event_kind [ ..] == "IncrementalLoadResult" {
62
+ thread_stack. push ( event) ;
54
63
}
55
-
56
- thread_stack. push ( event) ;
57
64
} ,
58
65
TimestampKind :: Instant => {
59
66
if & event. event_kind [ ..] == "QueryCacheHit" {
@@ -69,6 +76,7 @@ pub fn perform_analysis(data: ProfilingData) -> Results {
69
76
TimestampKind :: End => {
70
77
let thread_stack = threads. get_mut ( & event. thread_id ) . unwrap ( ) ;
71
78
let start_event = thread_stack. pop ( ) . unwrap ( ) ;
79
+
72
80
assert_eq ! ( start_event. event_kind, event. event_kind) ;
73
81
assert_eq ! ( start_event. label, event. label) ;
74
82
assert_eq ! ( start_event. timestamp_kind, TimestampKind :: Start ) ;
@@ -79,24 +87,34 @@ pub fn perform_analysis(data: ProfilingData) -> Results {
79
87
. duration_since ( start_event. timestamp )
80
88
. unwrap_or ( Duration :: from_nanos ( 0 ) ) ;
81
89
82
- if let Some ( data) = query_data. get_mut ( & start_event. label [ ..] ) {
83
- data. self_time += duration;
84
- data. number_of_cache_misses += 1 ;
85
- } else {
86
- let mut data = QueryData :: new ( start_event. label . clone ( ) . into_owned ( ) ) ;
87
- data. self_time = duration;
88
- data. number_of_cache_misses = 1 ;
89
- query_data. insert ( start_event. label . into_owned ( ) , data) ;
90
- }
90
+ if & event. event_kind [ ..] == "Query" || & event. event_kind [ ..] == "GenericActivity" {
91
+ if let Some ( data) = query_data. get_mut ( & start_event. label [ ..] ) {
92
+ data. self_time += duration;
93
+ data. number_of_cache_misses += 1 ;
94
+ } else {
95
+ let mut data = QueryData :: new ( start_event. label . clone ( ) . into_owned ( ) ) ;
96
+ data. self_time = duration;
97
+ data. number_of_cache_misses = 1 ;
98
+ query_data. insert ( start_event. label . clone ( ) . into_owned ( ) , data) ;
99
+ }
91
100
92
- //now adjust the previous event's start time so that it "started" right now
93
- if let Some ( previous_event) = thread_stack. last_mut ( ) {
94
- assert_eq ! ( TimestampKind :: Start , previous_event. timestamp_kind) ;
95
- previous_event. timestamp = event. timestamp ;
96
- }
101
+ //now adjust the previous event's start time so that it "started" right now
102
+ if let Some ( previous_event) = thread_stack. last_mut ( ) {
103
+ assert_eq ! ( TimestampKind :: Start , previous_event. timestamp_kind) ;
104
+ previous_event. timestamp = event. timestamp ;
105
+ }
97
106
98
- //record the total time
99
- total_time += duration;
107
+ //record the total time
108
+ total_time += duration;
109
+ } else if & event. event_kind [ ..] == "QueryBlocked" {
110
+ if let Some ( data) = query_data. get_mut ( & start_event. label [ ..] ) {
111
+ data. blocked_time += duration;
112
+ } else {
113
+ let mut data = QueryData :: new ( start_event. label . clone ( ) . into_owned ( ) ) ;
114
+ data. blocked_time = duration;
115
+ query_data. insert ( start_event. label . clone ( ) . into_owned ( ) , data) ;
116
+ }
117
+ }
100
118
}
101
119
}
102
120
}
0 commit comments