diff options
| author | Jean Boussier <byroot@ruby-lang.org> | 2023-02-21 12:38:25 +0100 |
|---|---|---|
| committer | Jean Boussier <jean.boussier@gmail.com> | 2023-07-26 11:41:23 +0200 |
| commit | 9b405a18bea7825cba794e42a1fef58a48451ec3 (patch) | |
| tree | ebe4d86d88df1a9dad5ea0e19e39d1b47ce6ca2f /test/ruby | |
| parent | 283b2fdab4be77d8721d7cf298168eb6e3798490 (diff) | |
Process.warmup: precompute strings coderange
This both save time for when it will be eventually needed,
and avoid mutating heap pages after a potential fork.
Instrumenting some large Rails app, I've witnessed up to
58% of String instances having their coderange still unknown.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/8112
Diffstat (limited to 'test/ruby')
| -rw-r--r-- | test/ruby/test_process.rb | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/test/ruby/test_process.rb b/test/ruby/test_process.rb index 6ca16733bb..9846f5e2db 100644 --- a/test/ruby/test_process.rb +++ b/test/ruby/test_process.rb @@ -2709,4 +2709,16 @@ EOS assert_equal compact_count + 1, GC.stat(:compact_count) end; end + + def test_warmup_precompute_string_coderange + assert_separately([], "#{<<~"begin;"}\n#{<<~'end;'}") + require 'objspace' + begin; + obj = "a" * 12 + obj.force_encoding(Encoding::BINARY) + assert_include(ObjectSpace.dump(obj), '"coderange":"unknown"') + Process.warmup + assert_include(ObjectSpace.dump(obj), '"coderange":"7bit"') + end; + end end |
