1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

mjit.c: disable compaction on empty queue w/ --jit-wait

When --jit-wait is specified, `unit_queue.length` is always 0 and it's
not a good metric.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64097 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
k0kubun 2018-07-29 02:05:08 +00:00
parent c5a5563dbe
commit 82bd2a9cc0
2 changed files with 8 additions and 4 deletions

3
mjit.c
View file

@ -1219,7 +1219,8 @@ worker(void)
#ifndef _MSC_VER
/* Combine .o files to one .so and reload all jit_func to improve memory locality */
if ((unit_queue.length == 0 && active_units.length > 1) || active_units.length == mjit_opts.max_cache_size) {
if ((!mjit_opts.wait && unit_queue.length == 0 && active_units.length > 1)
|| active_units.length == mjit_opts.max_cache_size) {
compact_all_jit_code();
}
#endif

View file

@ -9,7 +9,6 @@ class TestJIT < Test::Unit::TestCase
IGNORABLE_PATTERNS = [
/\ASuccessful MJIT finish\n\z/,
/\AJIT compaction \(\d+\.\dms\): Compacted \d+ methods ->/,
]
# trace_* insns are not compiled for now...
@ -549,8 +548,8 @@ class TestJIT < Test::Unit::TestCase
end
end;
assert_equal('0123456789', out)
errs = err.lines.reject do |l|
IGNORABLE_PATTERNS.any? { |pat| pat.match?(l) }
compactions, errs = err.lines.partition do |l|
l.match?(/\AJIT compaction \(\d+\.\dms\): Compacted \d+ methods ->/)
end
assert_match(/\A#{JIT_SUCCESS_PREFIX}: block in <main>@-e:/, errs[0])
9.times do |i|
@ -559,6 +558,10 @@ class TestJIT < Test::Unit::TestCase
assert_equal("Too many JIT code -- 1 units unloaded\n", errs[10])
assert_match(/\A#{JIT_SUCCESS_PREFIX}: mjit9@\(eval\):/, errs[11])
# On --jit-wait, when the number of JIT-ed code reaches --jit-max-cache,
# it should trigger compaction.
assert_equal(2, compactions.size)
# verify .o files are deleted on unload_units
assert_send([Dir, :empty?, dir])
end