diff options
author | Nobuyoshi Nakada <[email protected]> | 2023-04-03 14:27:36 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <[email protected]> | 2023-04-06 00:19:03 +0900 |
commit | 533423ebe46ebfe3005198c12aa0d2c899c695ea (patch) | |
tree | 1f2cef2c670b59fa65f267d6457c91cf939e5c89 /tool/lib | |
parent | f9eb2515a3221cced611b4de971b72a78a7a566f (diff) |
core_assertions.rb: Prefer CPU time clocks
To prevent influence from other processes.
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/7661
Diffstat (limited to 'tool/lib')
-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 |