@@ -8,9 +8,9 @@ use std::time::{Duration, Instant};
88
99use serde_json:: json;
1010use vm:: {
11- CallOutcome , CompiledProgram , HostFunction , HostFunctionRegistry , JitConfig , Program ,
12- SourceFlavor , Value , Vm , VmError , VmStatus , compile_source, compile_source_file ,
13- compile_source_with_flavor,
11+ CallOutcome , CompiledProgram , HostFunction , HostFunctionRegistry , JitConfig , JitSnapshot ,
12+ JitTraceTerminal , Program , SourceFlavor , Value , Vm , VmError , VmStatus , compile_source,
13+ compile_source_file , compile_source_with_flavor,
1414} ;
1515
1616const DEFAULT_COMPILE_ITERS : usize = 20 ;
@@ -767,7 +767,6 @@ fn measure_pd_vm_lua_compare_mode(
767767 hot_loop_threshold : 1 ,
768768 max_trace_len : 16_384 ,
769769 } ) ;
770- vm. set_jit_runtime_diagnostics_enabled ( jit_enabled) ;
771770 vm. set_jit_native_bridge_stats_enabled ( jit_enabled) ;
772771 vm. set_interpreter_opcode_profiling_enabled ( !jit_enabled) ;
773772
@@ -777,12 +776,12 @@ fn measure_pd_vm_lua_compare_mode(
777776 . map_err ( |err| format ! ( "warmup {} run failed: {err}" , mode. label( ) ) ) ?;
778777 ensure_expected_completion ( & vm, warm_status, & expected_stack, mode. label ( ) ) ?;
779778 vm. reset_for_reuse ( ) ;
780- vm. clear_jit_runtime_diagnostics ( ) ;
781779 vm. clear_jit_native_bridge_stats ( ) ;
782780 vm. clear_interpreter_opcode_profile ( ) ;
783781
784782 let native_trace_count_before = vm. jit_native_trace_count ( ) ;
785783 let native_exec_before = vm. jit_native_exec_count ( ) ;
784+ let jit_snapshot_before = vm. jit_snapshot ( ) ;
786785 let started = Instant :: now ( ) ;
787786 let total_program_runs = timed_runs. saturating_mul ( outer as usize ) ;
788787 for run_index in 0 ..total_program_runs {
@@ -798,6 +797,7 @@ fn measure_pd_vm_lua_compare_mode(
798797 }
799798 }
800799 let total_elapsed = started. elapsed ( ) ;
800+ let jit_snapshot_after = vm. jit_snapshot ( ) ;
801801
802802 Ok ( LuaCompareSample {
803803 mode,
@@ -817,7 +817,10 @@ fn measure_pd_vm_lua_compare_mode(
817817 native_trace_count_before : Some ( native_trace_count_before) ,
818818 native_trace_count_after : Some ( vm. jit_native_trace_count ( ) ) ,
819819 native_exec_delta : Some ( vm. jit_native_exec_count ( ) . saturating_sub ( native_exec_before) ) ,
820- jit_runtime_diagnostics : vm. jit_runtime_diagnostics_snapshot ( ) ,
820+ jit_runtime_diagnostics : trace_execution_diagnostics (
821+ & jit_snapshot_before,
822+ & jit_snapshot_after,
823+ ) ,
821824 native_bridge_stats : vm
822825 . jit_native_bridge_stats_snapshot ( )
823826 . into_iter ( )
@@ -997,6 +1000,40 @@ fn normalized_ns_per_inner_iter(
9971000 elapsed. as_nanos ( ) as f64 / ( inner as f64 * outer as f64 * timed_runs as f64 )
9981001}
9991002
1003+ fn trace_execution_diagnostics (
1004+ before : & JitSnapshot ,
1005+ after : & JitSnapshot ,
1006+ ) -> Vec < ( String , u64 ) > {
1007+ let mut before_execs = before
1008+ . traces
1009+ . iter ( )
1010+ . map ( |trace| ( trace. id , trace. executions ) )
1011+ . collect :: < std:: collections:: HashMap < _ , _ > > ( ) ;
1012+ let mut loop_back = 0_u64 ;
1013+ let mut branch_exit = 0_u64 ;
1014+ let mut halt = 0_u64 ;
1015+ for trace in & after. traces {
1016+ let before_exec = before_execs. remove ( & trace. id ) . unwrap_or ( 0 ) ;
1017+ let delta = trace. executions . saturating_sub ( before_exec) ;
1018+ match trace. terminal {
1019+ JitTraceTerminal :: LoopBack => loop_back = loop_back. saturating_add ( delta) ,
1020+ JitTraceTerminal :: BranchExit => branch_exit = branch_exit. saturating_add ( delta) ,
1021+ JitTraceTerminal :: Halt => halt = halt. saturating_add ( delta) ,
1022+ }
1023+ }
1024+ let mut entries = Vec :: new ( ) ;
1025+ for ( name, count) in [
1026+ ( "loop_back_trace_exec_delta" , loop_back) ,
1027+ ( "branch_exit_trace_exec_delta" , branch_exit) ,
1028+ ( "halt_trace_exec_delta" , halt) ,
1029+ ] {
1030+ if count > 0 {
1031+ entries. push ( ( name. to_string ( ) , count) ) ;
1032+ }
1033+ }
1034+ entries
1035+ }
1036+
10001037fn write_lua_compare_artifacts (
10011038 config : & BenchConfig ,
10021039 shared_source : & str ,
0 commit comments