@@ -33,12 +33,14 @@ pub enum CacheCase {
33
33
pub struct Rec {
34
34
pub effect : Effect ,
35
35
pub start : Instant ,
36
- pub duration : Duration ,
36
+ pub dur_self : Duration ,
37
+ pub dur_total : Duration ,
37
38
pub extent : Box < Vec < Rec > > ,
38
39
}
39
40
pub struct QueryMetric {
40
41
pub count : usize ,
41
- pub duration : Duration ,
42
+ pub dur_self : Duration ,
43
+ pub dur_total : Duration ,
42
44
}
43
45
44
46
pub fn cons_of_query_msg ( q : & trace:: Query ) -> String {
@@ -108,7 +110,7 @@ fn html_of_fraction(frac: f64) -> (String, String) {
108
110
fn total_duration ( traces : & Vec < Rec > ) -> Duration {
109
111
let mut sum : Duration = Duration :: new ( 0 , 0 ) ;
110
112
for t in traces. iter ( ) {
111
- sum += t. duration ;
113
+ sum += t. dur_total ;
112
114
}
113
115
return sum
114
116
}
@@ -124,8 +126,8 @@ fn duration_div(nom: Duration, den: Duration) -> f64 {
124
126
fn write_traces_rec ( file : & mut File , traces : & Vec < Rec > , total : Duration , depth : usize ) {
125
127
for t in traces {
126
128
let ( eff_text, eff_css_classes) = html_of_effect ( & t. effect ) ;
127
- let ( dur_text, dur_css_classes) = html_of_duration ( & t. start , & t. duration ) ;
128
- let fraction = duration_div ( t. duration , total) ;
129
+ let ( dur_text, dur_css_classes) = html_of_duration ( & t. start , & t. dur_total ) ;
130
+ let fraction = duration_div ( t. dur_total , total) ;
129
131
let percent = fraction * 100.0 ;
130
132
let ( frc_text, frc_css_classes) = html_of_fraction ( fraction) ;
131
133
write ! ( file, "<div class=\" trace depth-{} extent-{}{} {} {} {}\" >\n " ,
@@ -155,7 +157,8 @@ fn compute_counts_rec(counts: &mut HashMap<String,QueryMetric>, traces: &Vec<Rec
155
157
Some ( _qm) => { panic ! ( "TimeBegin with non-unique, repeat message" ) }
156
158
None => QueryMetric {
157
159
count : 1 ,
158
- duration : t. duration
160
+ dur_self : t. dur_self ,
161
+ dur_total : t. dur_total ,
159
162
} } ;
160
163
counts. insert ( msg. clone ( ) , qm) ;
161
164
} ,
@@ -165,11 +168,13 @@ fn compute_counts_rec(counts: &mut HashMap<String,QueryMetric>, traces: &Vec<Rec
165
168
Some ( qm) =>
166
169
QueryMetric {
167
170
count : qm. count + 1 ,
168
- duration : qm. duration + t. duration
171
+ dur_self : qm. dur_self + t. dur_self ,
172
+ dur_total : qm. dur_total + t. dur_total ,
169
173
} ,
170
174
None => QueryMetric {
171
175
count : 1 ,
172
- duration : t. duration
176
+ dur_self : t. dur_self ,
177
+ dur_total : t. dur_total ,
173
178
} } ;
174
179
counts. insert ( cons, qm) ;
175
180
} ,
@@ -179,11 +184,13 @@ fn compute_counts_rec(counts: &mut HashMap<String,QueryMetric>, traces: &Vec<Rec
179
184
Some ( qm) =>
180
185
QueryMetric {
181
186
count : qm. count + 1 ,
182
- duration : qm. duration + t. duration
187
+ dur_total : qm. dur_total + t. dur_total ,
188
+ dur_self : qm. dur_self + t. dur_self
183
189
} ,
184
190
None => QueryMetric {
185
191
count : 1 ,
186
- duration : t. duration
192
+ dur_total : t. dur_total ,
193
+ dur_self : t. dur_self ,
187
194
}
188
195
} ;
189
196
counts. insert ( qcons, qm) ;
@@ -199,13 +206,15 @@ pub fn write_counts(count_file: &mut File, counts: &mut HashMap<String,QueryMetr
199
206
200
207
let mut data = vec ! [ ] ;
201
208
for ( ref cons, ref qm) in counts. iter ( ) {
202
- data. push ( ( cons. clone ( ) , qm. count . clone ( ) , qm. duration . clone ( ) ) ) ;
209
+ data. push ( ( cons. clone ( ) , qm. count . clone ( ) , qm. dur_total . clone ( ) , qm . dur_self . clone ( ) ) ) ;
203
210
} ;
204
- data. sort_by ( |& ( _, _, d1) , & ( _, _, d2) |
205
- if d1 > d2 { Ordering :: Less } else { Ordering :: Greater } ) ;
206
- for ( cons, count, duration) in data {
207
- write ! ( count_file, "{},{},{}\n " ,
208
- cons, count, duration_to_secs_str( duration)
211
+ data. sort_by ( |& ( _, _, _, self1) , & ( _, _, _, self2) |
212
+ if self1 > self2 { Ordering :: Less } else { Ordering :: Greater } ) ;
213
+ for ( cons, count, dur_total, dur_self) in data {
214
+ write ! ( count_file, "{}, {}, {}, {}\n " ,
215
+ cons, count,
216
+ duration_to_secs_str( dur_total) ,
217
+ duration_to_secs_str( dur_self)
209
218
) . unwrap ( ) ;
210
219
}
211
220
}
0 commit comments