diff --git a/lib/benchmark.rb b/lib/benchmark.rb index 0d1b8df..00de7e2 100644 --- a/lib/benchmark.rb +++ b/lib/benchmark.rb @@ -325,7 +325,20 @@ def realtime # :yield: Process.clock_gettime(Process::CLOCK_MONOTONIC) - r0 end - module_function :benchmark, :measure, :realtime, :bm, :bmbm + # + # Returns the elapsed real time used to execute the given block. + # The unit of time is milliseconds. + # + # Benchmark.ms { "a" * 1_000_000_000 } + # #=> 509.8029999935534 + # + def ms # :yield: + r0 = Process.clock_gettime(Process::CLOCK_MONOTONIC, :float_millisecond) + yield + Process.clock_gettime(Process::CLOCK_MONOTONIC, :float_millisecond) - r0 + end + + module_function :benchmark, :measure, :realtime, :ms, :bm, :bmbm # # A Job is a sequence of labelled blocks to be processed by the diff --git a/test/benchmark/test_benchmark.rb b/test/benchmark/test_benchmark.rb index 2e0c47a..182e0b9 100644 --- a/test/benchmark/test_benchmark.rb +++ b/test/benchmark/test_benchmark.rb @@ -156,6 +156,12 @@ def test_realtime_output assert_operator sleeptime, :<, realtime end + def test_ms_output + sleeptime = 1.0 + ms_time = Benchmark.ms { sleep sleeptime } + assert_operator sleeptime * 1000, :<, ms_time + end + # Test that `to_h` returns a hash with the expected data. def test_tms_to_h tms = Benchmark::Tms.new(1.1, 2.2, 3.3, 4.4, 5.5, 'my label')