@@ -115,41 +115,44 @@ function format_bytes(bytes) # also used by InteractiveUtils
115115 end
116116end
117117
118- function time_print (elapsedtime, bytes= 0 , gctime= 0 , allocs= 0 , compile_time= 0 )
118+ function time_print (elapsedtime, bytes= 0 , gctime= 0 , allocs= 0 , compile_time= 0 , newline = false )
119119 timestr = Ryu. writefixed (Float64 (elapsedtime/ 1e9 ), 6 )
120- length (timestr) < 10 && print (" " ^ (10 - length (timestr)))
121- print (timestr, " seconds" )
122- parens = bytes != 0 || allocs != 0 || gctime > 0 || compile_time > 0
123- parens && print (" (" )
124- if bytes != 0 || allocs != 0
125- allocs, ma = prettyprint_getunits (allocs, length (_cnt_units), Int64 (1000 ))
126- if ma == 1
127- print (Int (allocs), _cnt_units[ma], allocs== 1 ? " allocation: " : " allocations: " )
128- else
129- print (Ryu. writefixed (Float64 (allocs), 2 ), _cnt_units[ma], " allocations: " )
130- end
131- print (format_bytes (bytes))
132- end
133- if gctime > 0
120+ str = sprint () do io
121+ print (io, length (timestr) < 10 ? (" " ^ (10 - length (timestr))) : " " )
122+ print (io, timestr, " seconds" )
123+ parens = bytes != 0 || allocs != 0 || gctime > 0 || compile_time > 0
124+ parens && print (io, " (" )
134125 if bytes != 0 || allocs != 0
135- print (" , " )
126+ allocs, ma = prettyprint_getunits (allocs, length (_cnt_units), Int64 (1000 ))
127+ if ma == 1
128+ print (io, Int (allocs), _cnt_units[ma], allocs== 1 ? " allocation: " : " allocations: " )
129+ else
130+ print (io, Ryu. writefixed (Float64 (allocs), 2 ), _cnt_units[ma], " allocations: " )
131+ end
132+ print (io, format_bytes (bytes))
136133 end
137- print (Ryu . writefixed ( Float64 ( 100 * gctime/ elapsedtime), 2 ), " % gc time " )
138- end
139- if compile_time > 0
140- if bytes != 0 || allocs != 0 || gctime > 0
141- print (" , " )
134+ if gctime > 0
135+ if bytes != 0 || allocs != 0
136+ print (io, " , " )
137+ end
138+ print (io, Ryu . writefixed ( Float64 ( 100 * gctime / elapsedtime), 2 ), " % gc time " )
142139 end
143- print (Ryu. writefixed (Float64 (100 * compile_time/ elapsedtime), 2 ), " % compilation time" )
140+ if compile_time > 0
141+ if bytes != 0 || allocs != 0 || gctime > 0
142+ print (io, " , " )
143+ end
144+ print (io, Ryu. writefixed (Float64 (100 * compile_time/ elapsedtime), 2 ), " % compilation time" )
145+ end
146+ parens && print (io, " )" )
144147 end
145- parens && print ( " ) " )
148+ newline ? println (str) : print (str )
146149 nothing
147150end
148151
149152function timev_print (elapsedtime, diff:: GC_Diff , compile_time)
150153 allocs = gc_alloc_count (diff)
151- time_print (elapsedtime, diff. allocd, diff. total_time, allocs, compile_time)
152- print (" \n elapsed time (ns): $elapsedtime \n " )
154+ time_print (elapsedtime, diff. allocd, diff. total_time, allocs, compile_time, true )
155+ print (" elapsed time (ns): $elapsedtime \n " )
153156 padded_nonzero_print (diff. total_time, " gc time (ns)" )
154157 padded_nonzero_print (diff. allocd, " bytes allocated" )
155158 padded_nonzero_print (diff. poolalloc, " pool allocs" )
@@ -200,13 +203,14 @@ macro time(ex)
200203 local stats = gc_num ()
201204 local compile_elapsedtime = cumulative_compile_time_ns_before ()
202205 local elapsedtime = time_ns ()
203- local val = $ (esc (ex))
204- elapsedtime = time_ns () - elapsedtime
205- compile_elapsedtime = cumulative_compile_time_ns_after () - compile_elapsedtime
206+ local val = try
207+ $ (esc (ex))
208+ finally
209+ elapsedtime = time_ns () - elapsedtime
210+ compile_elapsedtime = cumulative_compile_time_ns_after () - compile_elapsedtime
211+ end
206212 local diff = GC_Diff (gc_num (), stats)
207- time_print (elapsedtime, diff. allocd, diff. total_time,
208- gc_alloc_count (diff), compile_elapsedtime)
209- println ()
213+ time_print (elapsedtime, diff. allocd, diff. total_time, gc_alloc_count (diff), compile_elapsedtime, true )
210214 val
211215 end
212216end
@@ -248,10 +252,14 @@ macro timev(ex)
248252 local stats = gc_num ()
249253 local compile_elapsedtime = cumulative_compile_time_ns_before ()
250254 local elapsedtime = time_ns ()
251- local val = $ (esc (ex))
252- elapsedtime = time_ns () - elapsedtime
253- compile_elapsedtime = cumulative_compile_time_ns_after () - compile_elapsedtime
254- timev_print (elapsedtime, GC_Diff (gc_num (), stats), compile_elapsedtime)
255+ local val = try
256+ $ (esc (ex))
257+ finally
258+ elapsedtime = time_ns () - elapsedtime
259+ compile_elapsedtime = cumulative_compile_time_ns_after () - compile_elapsedtime
260+ end
261+ local diff = GC_Diff (gc_num (), stats)
262+ timev_print (elapsedtime, diff, compile_elapsedtime)
255263 val
256264 end
257265end
0 commit comments