@@ -33,12 +33,14 @@ pub enum CacheCase {
3333pub struct Rec {
3434 pub effect : Effect ,
3535 pub start : Instant ,
36- pub duration : Duration ,
36+ pub dur_self : Duration ,
37+ pub dur_total : Duration ,
3738 pub extent : Box < Vec < Rec > > ,
3839}
3940pub struct QueryMetric {
4041 pub count : usize ,
41- pub duration : Duration ,
42+ pub dur_self : Duration ,
43+ pub dur_total : Duration ,
4244}
4345
4446pub fn cons_of_query_msg ( q : & trace:: Query ) -> String {
@@ -108,7 +110,7 @@ fn html_of_fraction(frac: f64) -> (String, String) {
108110fn total_duration ( traces : & Vec < Rec > ) -> Duration {
109111 let mut sum : Duration = Duration :: new ( 0 , 0 ) ;
110112 for t in traces. iter ( ) {
111- sum += t. duration ;
113+ sum += t. dur_total ;
112114 }
113115 return sum
114116}
@@ -124,8 +126,8 @@ fn duration_div(nom: Duration, den: Duration) -> f64 {
124126fn write_traces_rec ( file : & mut File , traces : & Vec < Rec > , total : Duration , depth : usize ) {
125127 for t in traces {
126128 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) ;
129131 let percent = fraction * 100.0 ;
130132 let ( frc_text, frc_css_classes) = html_of_fraction ( fraction) ;
131133 write ! ( file, "<div class=\" trace depth-{} extent-{}{} {} {} {}\" >\n " ,
@@ -155,7 +157,8 @@ fn compute_counts_rec(counts: &mut HashMap<String,QueryMetric>, traces: &Vec<Rec
155157 Some ( _qm) => { panic ! ( "TimeBegin with non-unique, repeat message" ) }
156158 None => QueryMetric {
157159 count : 1 ,
158- duration : t. duration
160+ dur_self : t. dur_self ,
161+ dur_total : t. dur_total ,
159162 } } ;
160163 counts. insert ( msg. clone ( ) , qm) ;
161164 } ,
@@ -165,11 +168,13 @@ fn compute_counts_rec(counts: &mut HashMap<String,QueryMetric>, traces: &Vec<Rec
165168 Some ( qm) =>
166169 QueryMetric {
167170 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 ,
169173 } ,
170174 None => QueryMetric {
171175 count : 1 ,
172- duration : t. duration
176+ dur_self : t. dur_self ,
177+ dur_total : t. dur_total ,
173178 } } ;
174179 counts. insert ( cons, qm) ;
175180 } ,
@@ -179,11 +184,13 @@ fn compute_counts_rec(counts: &mut HashMap<String,QueryMetric>, traces: &Vec<Rec
179184 Some ( qm) =>
180185 QueryMetric {
181186 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
183189 } ,
184190 None => QueryMetric {
185191 count : 1 ,
186- duration : t. duration
192+ dur_total : t. dur_total ,
193+ dur_self : t. dur_self ,
187194 }
188195 } ;
189196 counts. insert ( qcons, qm) ;
@@ -199,13 +206,15 @@ pub fn write_counts(count_file: &mut File, counts: &mut HashMap<String,QueryMetr
199206
200207 let mut data = vec ! [ ] ;
201208 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 ( ) ) ) ;
203210 } ;
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)
209218 ) . unwrap ( ) ;
210219 }
211220}
0 commit comments