@@ -127,8 +127,9 @@ def return_results(warmup_iterations, bench_iterations)
127127 "bench" => bench_iterations ,
128128 }
129129
130- # Collect yjit stats before loading any additional code.
130+ # Collect JIT stats before loading any additional code.
131131 yjit_stats = RubyVM ::YJIT . runtime_stats if defined? ( RubyVM ::YJIT ) && RubyVM ::YJIT . enabled?
132+ zjit_stats = RubyVM ::ZJIT . stats if defined? ( RubyVM ::ZJIT ) && RubyVM ::ZJIT . enabled?
132133
133134 # Collect our own peak mem usage as soon as reasonable after finishing the last iteration.
134135 rss = get_rss
@@ -137,24 +138,40 @@ def return_results(warmup_iterations, bench_iterations)
137138 yjit_bench_results [ "maxrss" ] = maxrss
138139 end
139140
141+ # If YJIT or ZJIT is enabled, show some of their stats at the end.
140142 if yjit_stats
141143 yjit_bench_results [ "yjit_stats" ] = yjit_stats
142-
143- formatted_stats = proc { |key | "%10s" % format_number ( yjit_stats [ key ] ) }
144- yjit_stats_keys = [
144+ stats_keys = [
145145 *ENV . fetch ( "YJIT_BENCH_STATS" , "" ) . split ( "," ) . map ( &:to_sym ) ,
146146 :inline_code_size ,
147147 :outlined_code_size ,
148148 :code_region_size ,
149149 :yjit_alloc_size ,
150150 :compile_time_ns ,
151151 ] . uniq
152- yjit_stats_pads = yjit_stats_keys . map ( &:size ) . max + 1
153- yjit_stats_keys . each do |key |
154- if key == :compile_time_ns
155- puts "#{ "yjit_compile_time:" . ljust ( yjit_stats_pads ) } %8.2fms" % ( yjit_stats [ :compile_time_ns ] / 1_000_000.0 ) . round ( 2 )
152+ puts "YJIT stats:"
153+ elsif zjit_stats
154+ yjit_bench_results [ "zjit_stats" ] = zjit_stats
155+ stats_keys = [
156+ :compile_time_ns ,
157+ :profile_time_ns ,
158+ :gc_time_ns ,
159+ :invalidation_time_ns ,
160+ ] . uniq
161+ puts "ZJIT stats:"
162+ end
163+ if stats_keys
164+ jit_stats = yjit_stats || zjit_stats
165+ formatted_stats = proc { |key | "%11s" % format_number ( jit_stats [ key ] ) }
166+
167+ stats_pads = stats_keys . map ( &:size ) . max + 1
168+ stats_keys . each do |key |
169+ case key
170+ when /_time_ns\z /
171+ key_name = key . to_s . sub ( /_time_ns\z / , '_time' )
172+ puts "#{ key_name . ljust ( stats_pads ) } %9.2fms" % ( jit_stats [ key ] / 1_000_000.0 ) . round ( 2 )
156173 else
157- puts "#{ "#{ key } :" . ljust ( yjit_stats_pads ) } #{ formatted_stats [ key ] } "
174+ puts "#{ "#{ key } :" . ljust ( stats_pads ) } #{ formatted_stats [ key ] } "
158175 end
159176 end
160177 end
0 commit comments