From 08c7eca6cccb40f1b4dd5cfda3b2a4e441f735c0 Mon Sep 17 00:00:00 2001 From: Randy Stauner Date: Wed, 11 Feb 2026 17:25:04 -0700 Subject: [PATCH] Update zjit_diff to report on stat keys from all rubies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Useful for showing stats that changed name or if a count moved completely from one stat to another. Excerpt: CALLS TO C FUNCTIONS FROM JIT CODE (showing differences > 5.0%) -------------------------------------------------------------------------------- lobsters: ##object_id 133 → 0 ▼ -100.0% ##object_id 0 → 133 ▲ new --- misc/zjit_diff.rb | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/misc/zjit_diff.rb b/misc/zjit_diff.rb index 3ee4d8cb..eacbfc06 100755 --- a/misc/zjit_diff.rb +++ b/misc/zjit_diff.rb @@ -122,8 +122,9 @@ def print_uncategorized_stats stats_by_ruby = @ruby_names.map { |r| [@raw_data.dig(r, bench_name, 'zjit_stats'), r] } next if stats_by_ruby.any? { |s, _| s.nil? } - unknown_keys = stats_by_ruby.first[0].keys.select do |k| - stats_by_ruby.first[0][k].is_a?(Numeric) && !known_stat?(k) + all_keys = stats_by_ruby.flat_map { |s, _| s.keys }.uniq + unknown_keys = all_keys.select do |k| + stats_by_ruby.any? { |s, _| s[k].is_a?(Numeric) } && !known_stat?(k) end significant = filter_significant_keys(stats_by_ruby, unknown_keys) @@ -230,7 +231,7 @@ def print_send_counters stats_by_ruby = @ruby_names.map { |r| [@raw_data.dig(r, bench_name, 'zjit_stats'), r] } next if stats_by_ruby.any? { |s, _| s.nil? } - keys = SEND_COUNTERS.map(&:to_s).select { |k| stats_by_ruby.first[0].key?(k) } + keys = SEND_COUNTERS.map(&:to_s).select { |k| stats_by_ruby.any? { |s, _| s.key?(k) } } significant = filter_significant_keys(stats_by_ruby, keys) next if significant.empty? @@ -253,7 +254,7 @@ def print_summary_counters stats_by_ruby = @ruby_names.map { |r| [@raw_data.dig(r, bench_name, 'zjit_stats'), r] } next if stats_by_ruby.any? { |s, _| s.nil? } - keys = SUMMARY_COUNTERS.map(&:to_s).select { |k| stats_by_ruby.first[0].key?(k) } + keys = SUMMARY_COUNTERS.map(&:to_s).select { |k| stats_by_ruby.any? { |s, _| s.key?(k) } } significant = filter_significant_keys(stats_by_ruby, keys) next if significant.empty? @@ -283,7 +284,7 @@ def print_category_diff(prefix, prompt, limit = nil) stats_by_ruby = @ruby_names.map { |r| [@raw_data.dig(r, bench_name, 'zjit_stats'), r] } next if stats_by_ruby.any? { |s, _| s.nil? } - keys = stats_by_ruby.first[0].keys.select { |k| k.start_with?(prefix) } + keys = stats_by_ruby.flat_map { |s, _| s.keys }.uniq.select { |k| k.start_with?(prefix) } significant = filter_significant_keys(stats_by_ruby, keys) next if significant.empty?