diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-04-03 14:27:36 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-04-06 00:19:03 +0900 |
commit | 533423ebe46ebfe3005198c12aa0d2c899c695ea (patch) | |
tree | 1f2cef2c670b59fa65f267d6457c91cf939e5c89 /tool | |
parent | f9eb2515a3221cced611b4de971b72a78a7a566f (diff) | |
download | ruby-533423ebe46ebfe3005198c12aa0d2c899c695ea.tar.gz |
core_assertions.rb: Prefer CPU time clocks
To prevent influence from other processes.
Diffstat (limited to 'tool')
-rw-r--r-- | tool/lib/core_assertions.rb | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/tool/lib/core_assertions.rb b/tool/lib/core_assertions.rb index 81faac1e4b..7625412e67 100644 --- a/tool/lib/core_assertions.rb +++ b/tool/lib/core_assertions.rb @@ -738,18 +738,36 @@ eom end alias all_assertions_foreach assert_all_assertions_foreach + %w[ + CLOCK_THREAD_CPUTIME_ID CLOCK_PROCESS_CPUTIME_ID + CLOCK_MONOTONIC + ].find do |clk| + if Process.const_defined?(clk) + clk = clk.to_sym + begin + Process.clock_gettime(clk) + rescue + # Constants may be defined but not implemented, e.g., mingw. + else + PERFORMANCE_CLOCK = clk + end + end + end + # Expect +seq+ to respond to +first+ and +each+ methods, e.g., # Array, Range, Enumerator::ArithmeticSequence and other # Enumerable-s, and each elements should be size factors. # # :yield: each elements of +seq+. def assert_linear_performance(seq, rehearsal: nil, pre: ->(n) {n}) + pend "No PERFORMANCE_CLOCK found" unless defined?(PERFORMANCE_CLOCK) + # Timeout testing generally doesn't work when RJIT compilation happens. rjit_enabled = defined?(RubyVM::RJIT) && RubyVM::RJIT.enabled? measure = proc do |arg, message| - st = Process.clock_gettime(Process::CLOCK_MONOTONIC) + st = Process.clock_gettime(PERFORMANCE_CLOCK) yield(*arg) - t = (Process.clock_gettime(Process::CLOCK_MONOTONIC) - st) + t = (Process.clock_gettime(PERFORMANCE_CLOCK) - st) assert_operator 0, :<=, t, message unless rjit_enabled t end |