@@ -64,9 +64,7 @@ struct StackFrame {
6464}
6565
6666fn total_duration ( traces : & [ trace:: Rec ] ) -> Duration {
67- let mut sum : Duration = Duration :: new ( 0 , 0 ) ;
68- for t in traces. iter ( ) { sum += t. dur_total ; }
69- return sum
67+ Duration :: new ( 0 , 0 ) + traces. iter ( ) . map ( |t| t. dur_total ) . sum ( )
7068}
7169
7270// profiling thread; retains state (in local variables) and dump traces, upon request.
@@ -93,50 +91,48 @@ fn profile_queries_thread(r: Receiver<ProfileQueriesMsg>) {
9391 ProfileQueriesMsg :: Dump ( params) => {
9492 assert ! ( stack. is_empty( ) ) ;
9593 assert ! ( frame. parse_st == ParseState :: Clear ) ;
96- {
97- // write log of all messages
98- if params. dump_profq_msg_log {
99- let mut log_file =
100- File :: create ( format ! ( "{}.log.txt" , params. path) ) . unwrap ( ) ;
101- for m in profq_msgs. iter ( ) {
102- writeln ! ( & mut log_file, "{:?}" , m) . unwrap ( )
103- } ;
104- }
10594
106- // write HTML file, and counts file
107- let html_path = format ! ( "{}.html" , params. path) ;
108- let mut html_file = File :: create ( & html_path) . unwrap ( ) ;
95+ // write log of all messages
96+ if params. dump_profq_msg_log {
97+ let mut log_file =
98+ File :: create ( format ! ( "{}.log.txt" , params. path) ) . unwrap ( ) ;
99+ for m in profq_msgs. iter ( ) {
100+ writeln ! ( & mut log_file, "{:?}" , m) . unwrap ( )
101+ } ;
102+ }
109103
110- let counts_path = format ! ( "{}.counts.txt" , params. path) ;
111- let mut counts_file = File :: create ( & counts_path) . unwrap ( ) ;
104+ // write HTML file, and counts file
105+ let html_path = format ! ( "{}.html" , params. path) ;
106+ let mut html_file = File :: create ( & html_path) . unwrap ( ) ;
112107
113- writeln ! ( html_file,
114- "<html>\n <head>\n <link rel=\" stylesheet\" type=\" text/css\" href=\" {}\" >" ,
115- "profile_queries.css" ) . unwrap ( ) ;
116- writeln ! ( html_file, "<style>" ) . unwrap ( ) ;
117- trace:: write_style ( & mut html_file) ;
118- writeln ! ( html_file, "</style>\n </head>\n <body>" ) . unwrap ( ) ;
119- trace:: write_traces ( & mut html_file, & mut counts_file, & frame. traces ) ;
120- writeln ! ( html_file, "</body>\n </html>" ) . unwrap ( ) ;
108+ let counts_path = format ! ( "{}.counts.txt" , params. path) ;
109+ let mut counts_file = File :: create ( & counts_path) . unwrap ( ) ;
121110
122- let ack_path = format ! ( "{}.ack" , params. path) ;
123- let ack_file = File :: create ( & ack_path) . unwrap ( ) ;
124- drop ( ack_file) ;
111+ writeln ! ( html_file,
112+ "<html>\n <head>\n <link rel=\" stylesheet\" type=\" text/css\" href=\" {}\" >" ,
113+ "profile_queries.css" ) . unwrap ( ) ;
114+ writeln ! ( html_file, "<style>" ) . unwrap ( ) ;
115+ trace:: write_style ( & mut html_file) ;
116+ writeln ! ( html_file, "</style>\n </head>\n <body>" ) . unwrap ( ) ;
117+ trace:: write_traces ( & mut html_file, & mut counts_file, & frame. traces ) ;
118+ writeln ! ( html_file, "</body>\n </html>" ) . unwrap ( ) ;
125119
126- // Tell main thread that we are done, e.g., so it can exit
127- params. ack . send ( ( ) ) . unwrap ( ) ;
128- }
129- continue
120+ let ack_path = format ! ( "{}.ack" , params. path) ;
121+ let ack_file = File :: create ( & ack_path) . unwrap ( ) ;
122+ drop ( ack_file) ;
123+
124+ // Tell main thread that we are done, e.g., so it can exit
125+ params. ack . send ( ( ) ) . unwrap ( ) ;
130126 }
131127 // Actual query message:
132128 msg => {
133129 // Record msg in our log
134130 profq_msgs. push ( msg. clone ( ) ) ;
135131 // Respond to the message, knowing that we've already handled Halt and Dump, above.
136132 match ( frame. parse_st . clone ( ) , msg) {
137- ( _, ProfileQueriesMsg :: Halt ) => unreachable ! ( ) ,
138- ( _ , ProfileQueriesMsg :: Dump ( _ ) ) => unreachable ! ( ) ,
139-
133+ ( _, ProfileQueriesMsg :: Halt ) | ( _ , ProfileQueriesMsg :: Dump ( _ ) ) => {
134+ unreachable ! ( ) ;
135+ } ,
140136 // Parse State: Clear
141137 ( ParseState :: Clear ,
142138 ProfileQueriesMsg :: QueryBegin ( span, querymsg) ) => {
@@ -163,8 +159,8 @@ fn profile_queries_thread(r: Receiver<ProfileQueriesMsg>) {
163159 ParseState :: HaveQuery ( q, start) => {
164160 let duration = start. elapsed ( ) ;
165161 frame = StackFrame {
166- parse_st : ParseState :: Clear ,
167- traces : old_frame. traces
162+ parse_st : ParseState :: Clear ,
163+ traces : old_frame. traces
168164 } ;
169165 let dur_extent = total_duration ( & provider_extent) ;
170166 let trace = Rec {
@@ -181,18 +177,16 @@ fn profile_queries_thread(r: Receiver<ProfileQueriesMsg>) {
181177 }
182178 }
183179 } ,
184-
185-
186180 ( ParseState :: Clear ,
187181 ProfileQueriesMsg :: TimeBegin ( msg) ) => {
188182 let start = Instant :: now ( ) ;
189183 frame. parse_st = ParseState :: HaveTimeBegin ( msg, start) ;
190184 stack. push ( frame) ;
191- frame = StackFrame { parse_st : ParseState :: Clear , traces : vec ! [ ] } ;
185+ frame = StackFrame { parse_st : ParseState :: Clear , traces : vec ! [ ] } ;
186+ } ,
187+ ( _, ProfileQueriesMsg :: TimeBegin ( _) ) => {
188+ panic ! ( "parse error; did not expect time begin here" ) ;
192189 } ,
193- ( _, ProfileQueriesMsg :: TimeBegin ( _) ) =>
194- panic ! ( "parse error; did not expect time begin here" ) ,
195-
196190 ( ParseState :: Clear ,
197191 ProfileQueriesMsg :: TimeEnd ) => {
198192 let provider_extent = frame. traces ;
@@ -204,8 +198,8 @@ fn profile_queries_thread(r: Receiver<ProfileQueriesMsg>) {
204198 ParseState :: HaveTimeBegin ( msg, start) => {
205199 let duration = start. elapsed ( ) ;
206200 frame = StackFrame {
207- parse_st : ParseState :: Clear ,
208- traces : old_frame. traces
201+ parse_st : ParseState :: Clear ,
202+ traces : old_frame. traces
209203 } ;
210204 let dur_extent = total_duration ( & provider_extent) ;
211205 let trace = Rec {
@@ -222,18 +216,19 @@ fn profile_queries_thread(r: Receiver<ProfileQueriesMsg>) {
222216 }
223217 }
224218 } ,
225- ( _, ProfileQueriesMsg :: TimeEnd ) => { panic ! ( "parse error" ) }
226-
219+ ( _, ProfileQueriesMsg :: TimeEnd ) => {
220+ panic ! ( "parse error" )
221+ } ,
227222 ( ParseState :: Clear ,
228223 ProfileQueriesMsg :: TaskBegin ( key) ) => {
229224 let start = Instant :: now ( ) ;
230225 frame. parse_st = ParseState :: HaveTaskBegin ( key, start) ;
231226 stack. push ( frame) ;
232- frame = StackFrame { parse_st : ParseState :: Clear , traces : vec ! [ ] } ;
227+ frame = StackFrame { parse_st : ParseState :: Clear , traces : vec ! [ ] } ;
228+ } ,
229+ ( _, ProfileQueriesMsg :: TaskBegin ( _) ) => {
230+ panic ! ( "parse error; did not expect time begin here" ) ;
233231 } ,
234- ( _, ProfileQueriesMsg :: TaskBegin ( _) ) =>
235- panic ! ( "parse error; did not expect time begin here" ) ,
236-
237232 ( ParseState :: Clear ,
238233 ProfileQueriesMsg :: TaskEnd ) => {
239234 let provider_extent = frame. traces ;
@@ -245,8 +240,8 @@ fn profile_queries_thread(r: Receiver<ProfileQueriesMsg>) {
245240 ParseState :: HaveTaskBegin ( key, start) => {
246241 let duration = start. elapsed ( ) ;
247242 frame = StackFrame {
248- parse_st : ParseState :: Clear ,
249- traces : old_frame. traces
243+ parse_st : ParseState :: Clear ,
244+ traces : old_frame. traces
250245 } ;
251246 let dur_extent = total_duration ( & provider_extent) ;
252247 let trace = Rec {
@@ -263,8 +258,9 @@ fn profile_queries_thread(r: Receiver<ProfileQueriesMsg>) {
263258 }
264259 }
265260 } ,
266- ( _, ProfileQueriesMsg :: TaskEnd ) => { panic ! ( "parse error" ) }
267-
261+ ( _, ProfileQueriesMsg :: TaskEnd ) => {
262+ panic ! ( "parse error" )
263+ } ,
268264 // Parse State: HaveQuery
269265 ( ParseState :: HaveQuery ( q, start) ,
270266 ProfileQueriesMsg :: CacheHit ) => {
@@ -279,26 +275,25 @@ fn profile_queries_thread(r: Receiver<ProfileQueriesMsg>) {
279275 frame. traces . push ( trace ) ;
280276 frame. parse_st = ParseState :: Clear ;
281277 } ,
282- ( ParseState :: HaveQuery ( _, _) ,
278+ ( ParseState :: HaveQuery ( _, _) ,
283279 ProfileQueriesMsg :: ProviderBegin ) => {
284280 stack. push ( frame) ;
285- frame = StackFrame { parse_st : ParseState :: Clear , traces : vec ! [ ] } ;
281+ frame = StackFrame { parse_st : ParseState :: Clear , traces : vec ! [ ] } ;
286282 } ,
287283
288284 // Parse errors:
289285
290- ( ParseState :: HaveQuery ( q, _) ,
286+ ( ParseState :: HaveQuery ( q, _) ,
291287 ProfileQueriesMsg :: ProviderEnd ) => {
292288 panic ! ( "parse error: unexpected ProviderEnd; \
293289 expected something else to follow BeginQuery for {:?}", q)
294290 } ,
295- ( ParseState :: HaveQuery ( q1, _) ,
296- ProfileQueriesMsg :: QueryBegin ( span2, querymsg2) ) => {
291+ ( ParseState :: HaveQuery ( q1, _) ,
292+ ProfileQueriesMsg :: QueryBegin ( span2, querymsg2) ) => {
297293 panic ! ( "parse error: unexpected QueryBegin; \
298294 earlier query is unfinished: {:?} and now {:?}",
299- q1, Query { span: span2, msg: querymsg2} )
295+ q1, Query { span: span2, msg: querymsg2} )
300296 } ,
301-
302297 ( ParseState :: HaveTimeBegin ( _, _) , _) => {
303298 unreachable ! ( )
304299 } ,
0 commit comments