diff options
author | Aaron Patterson <[email protected]> | 2024-06-10 16:05:03 -0700 |
---|---|---|
committer | Aaron Patterson <[email protected]> | 2024-06-11 14:54:15 -0700 |
commit | 1271ff72d5b627854c6812baefe796a2976cd793 (patch) | |
tree | 1884040dcae54c82f72a8b4141c50b781bdc1854 /error.c | |
parent | 0a6b1a4d9de583ebfd305ab1b297be1cea7bdc2f (diff) |
Don't call `Warning.warn` unless the category is enabled
The warning category should be enabled if we want to call
`Warning.warn`.
This commit speeds up the following benchmark:
```ruby
eval "def test; " +
1000.times.map { "' '.chomp!" }.join(";") + "; end"
def run_benchmark count
i = 0
while i < count
start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
yield
ms = Process.clock_gettime(Process::CLOCK_MONOTONIC) - start
puts "itr ##{i}: #{(ms * 1000).to_i}ms"
i += 1
end
end
run_benchmark(25) do
250.times do
test
end
end
```
On `master` this runs at about 92ms per iteration. With this patch, it
is 7ms per iteration.
[Bug #20573]
Diffstat (limited to 'error.c')
-rw-r--r-- | error.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -475,7 +475,7 @@ rb_warn(const char *fmt, ...) void rb_category_warn(rb_warning_category_t category, const char *fmt, ...) { - if (!NIL_P(ruby_verbose)) { + if (!NIL_P(ruby_verbose) && rb_warning_category_enabled_p(category)) { with_warning_string(mesg, 0, fmt) { rb_warn_category(mesg, rb_warning_category_to_name(category)); } @@ -507,7 +507,7 @@ rb_warning(const char *fmt, ...) void rb_category_warning(rb_warning_category_t category, const char *fmt, ...) { - if (RTEST(ruby_verbose)) { + if (RTEST(ruby_verbose) && rb_warning_category_enabled_p(category)) { with_warning_string(mesg, 0, fmt) { rb_warn_category(mesg, rb_warning_category_to_name(category)); } |