summaryrefslogtreecommitdiff
path: root/yjit
diff options
context:
space:
mode:
Diffstat (limited to 'yjit')
-rw-r--r--yjit/bindgen/src/main.rs4
-rw-r--r--yjit/src/cruby_bindings.inc.rs2
-rw-r--r--yjit/src/stats.rs14
3 files changed, 13 insertions, 7 deletions
diff --git a/yjit/bindgen/src/main.rs b/yjit/bindgen/src/main.rs
index b6f4c4b7c4..e8f88cef64 100644
--- a/yjit/bindgen/src/main.rs
+++ b/yjit/bindgen/src/main.rs
@@ -317,7 +317,6 @@ fn main() {
.allowlist_function("rb_yjit_get_page_size")
.allowlist_function("rb_yjit_iseq_builtin_attrs")
.allowlist_function("rb_yjit_iseq_inspect")
- .allowlist_function("rb_yjit_vm_insns_count")
.allowlist_function("rb_yjit_builtin_function")
.allowlist_function("rb_set_cfp_(pc|sp)")
.allowlist_function("rb_yjit_multi_ractor_p")
@@ -381,6 +380,9 @@ fn main() {
.allowlist_function("rb_ivar_get")
.allowlist_function("rb_mod_name")
+ // From internal/vm.h
+ .allowlist_var("rb_vm_insns_count")
+
// From include/ruby/internal/intern/vm.h
.allowlist_function("rb_get_alloc_func")
diff --git a/yjit/src/cruby_bindings.inc.rs b/yjit/src/cruby_bindings.inc.rs
index b8d115b488..4213a20452 100644
--- a/yjit/src/cruby_bindings.inc.rs
+++ b/yjit/src/cruby_bindings.inc.rs
@@ -1060,6 +1060,7 @@ extern "C" {
elts: *const VALUE,
) -> VALUE;
pub fn rb_vm_top_self() -> VALUE;
+ pub static mut rb_vm_insns_count: u64;
pub fn rb_method_entry_at(obj: VALUE, id: ID) -> *const rb_method_entry_t;
pub fn rb_callable_method_entry(klass: VALUE, id: ID) -> *const rb_callable_method_entry_t;
pub fn rb_callable_method_entry_or_negative(
@@ -1139,7 +1140,6 @@ extern "C" {
pub fn rb_jit_cont_each_iseq(callback: rb_iseq_callback, data: *mut ::std::os::raw::c_void);
pub fn rb_yjit_mark_writable(mem_block: *mut ::std::os::raw::c_void, mem_size: u32) -> bool;
pub fn rb_yjit_mark_executable(mem_block: *mut ::std::os::raw::c_void, mem_size: u32);
- pub fn rb_yjit_vm_insns_count() -> u64;
pub fn rb_yjit_mark_unused(mem_block: *mut ::std::os::raw::c_void, mem_size: u32) -> bool;
pub fn rb_yjit_array_len(a: VALUE) -> ::std::os::raw::c_long;
pub fn rb_yjit_icache_invalidate(
diff --git a/yjit/src/stats.rs b/yjit/src/stats.rs
index d04f2836ef..b737153062 100644
--- a/yjit/src/stats.rs
+++ b/yjit/src/stats.rs
@@ -789,7 +789,9 @@ fn rb_yjit_gen_stats_dict(key: VALUE) -> VALUE {
set_stat_usize!(hash, "context_cache_bytes", crate::core::CTX_ENCODE_CACHE_BYTES + crate::core::CTX_DECODE_CACHE_BYTES);
// VM instructions count
- set_stat_usize!(hash, "vm_insns_count", rb_yjit_vm_insns_count() as usize);
+ if rb_vm_insns_count > 0 {
+ set_stat_usize!(hash, "vm_insns_count", rb_vm_insns_count as usize);
+ }
set_stat_usize!(hash, "live_iseq_count", rb_yjit_live_iseq_count as usize);
set_stat_usize!(hash, "iseq_alloc_count", rb_yjit_iseq_alloc_count as usize);
@@ -859,11 +861,13 @@ fn rb_yjit_gen_stats_dict(key: VALUE) -> VALUE {
set_stat_double!(hash, "avg_len_in_yjit", avg_len_in_yjit);
// Proportion of instructions that retire in YJIT
- let total_insns_count = retired_in_yjit + rb_yjit_vm_insns_count();
- set_stat_usize!(hash, "total_insns_count", total_insns_count as usize);
+ if rb_vm_insns_count > 0 {
+ let total_insns_count = retired_in_yjit + rb_vm_insns_count;
+ set_stat_usize!(hash, "total_insns_count", total_insns_count as usize);
- let ratio_in_yjit: f64 = 100.0 * retired_in_yjit as f64 / total_insns_count as f64;
- set_stat_double!(hash, "ratio_in_yjit", ratio_in_yjit);
+ let ratio_in_yjit: f64 = 100.0 * retired_in_yjit as f64 / total_insns_count as f64;
+ set_stat_double!(hash, "ratio_in_yjit", ratio_in_yjit);
+ }
// Set method call counts in a Ruby dict
fn set_call_counts(