@@ -21,6 +21,9 @@ macro_rules! make_counters {
2121 dynamic_send {
2222 $( $dynamic_send_counter_name: ident, ) +
2323 }
24+ optimized_send {
25+ $( $optimized_send_counter_name: ident, ) +
26+ }
2427 $( $counter_name: ident, ) +
2528 ) => {
2629 /// Struct containing the counter values
@@ -29,6 +32,7 @@ macro_rules! make_counters {
2932 $( pub $default_counter_name: u64 , ) +
3033 $( pub $exit_counter_name: u64 , ) +
3134 $( pub $dynamic_send_counter_name: u64 , ) +
35+ $( pub $optimized_send_counter_name: u64 , ) +
3236 $( pub $counter_name: u64 , ) +
3337 }
3438
@@ -39,6 +43,7 @@ macro_rules! make_counters {
3943 $( $default_counter_name, ) +
4044 $( $exit_counter_name, ) +
4145 $( $dynamic_send_counter_name, ) +
46+ $( $optimized_send_counter_name, ) +
4247 $( $counter_name, ) +
4348 }
4449
@@ -48,6 +53,7 @@ macro_rules! make_counters {
4853 $( Counter :: $default_counter_name => stringify!( $default_counter_name) . to_string( ) , ) +
4954 $( Counter :: $exit_counter_name => stringify!( $exit_counter_name) . to_string( ) , ) +
5055 $( Counter :: $dynamic_send_counter_name => stringify!( $dynamic_send_counter_name) . to_string( ) , ) +
56+ $( Counter :: $optimized_send_counter_name => stringify!( $optimized_send_counter_name) . to_string( ) , ) +
5157 $( Counter :: $counter_name => stringify!( $counter_name) . to_string( ) , ) +
5258 }
5359 }
@@ -60,6 +66,7 @@ macro_rules! make_counters {
6066 $( Counter :: $default_counter_name => std:: ptr:: addr_of_mut!( counters. $default_counter_name) , ) +
6167 $( Counter :: $exit_counter_name => std:: ptr:: addr_of_mut!( counters. $exit_counter_name) , ) +
6268 $( Counter :: $dynamic_send_counter_name => std:: ptr:: addr_of_mut!( counters. $dynamic_send_counter_name) , ) +
69+ $( Counter :: $optimized_send_counter_name => std:: ptr:: addr_of_mut!( counters. $optimized_send_counter_name) , ) +
6370 $( Counter :: $counter_name => std:: ptr:: addr_of_mut!( counters. $counter_name) , ) +
6471 }
6572 }
@@ -80,6 +87,11 @@ macro_rules! make_counters {
8087 $( Counter :: $dynamic_send_counter_name, ) +
8188 ] ;
8289
90+ /// List of other counters that are summed as optimized_send_count.
91+ pub const OPTIMIZED_SEND_COUNTERS : & ' static [ Counter ] = & [
92+ $( Counter :: $optimized_send_counter_name, ) +
93+ ] ;
94+
8395 /// List of other counters that are available only for --zjit-stats.
8496 pub const OTHER_COUNTERS : & ' static [ Counter ] = & [
8597 $( Counter :: $counter_name, ) +
@@ -140,6 +152,13 @@ make_counters! {
140152 send_fallback_not_optimized_instruction,
141153 }
142154
155+ // Optimized send counters that are summed as optimized_send_count
156+ optimized_send {
157+ iseq_optimized_send_count,
158+ inline_cfunc_optimized_send_count,
159+ variadic_cfunc_optimized_send_count,
160+ }
161+
143162 // compile_error_: Compile error reasons
144163 compile_error_iseq_stack_too_large,
145164 compile_error_exception_handler,
@@ -421,6 +440,16 @@ pub extern "C" fn rb_zjit_stats(_ec: EcPtr, _self: VALUE, target_key: VALUE) ->
421440 }
422441 set_stat_usize ! ( hash, "dynamic_send_count" , dynamic_send_count) ;
423442
443+ // Set optimized send counters
444+ let mut optimized_send_count = 0 ;
445+ for & counter in OPTIMIZED_SEND_COUNTERS {
446+ let count = unsafe { * counter_ptr ( counter) } ;
447+ optimized_send_count += count;
448+ set_stat_usize ! ( hash, & counter. name( ) , count) ;
449+ }
450+ set_stat_usize ! ( hash, "optimized_send_count" , optimized_send_count) ;
451+ set_stat_usize ! ( hash, "send_count" , dynamic_send_count + optimized_send_count) ;
452+
424453 // Set send fallback counters for NotOptimizedInstruction
425454 let send_fallback_counters = ZJITState :: get_send_fallback_counters ( ) ;
426455 for ( op_idx, count) in send_fallback_counters. iter ( ) . enumerate ( ) . take ( VM_INSTRUCTION_SIZE as usize ) {
0 commit comments