aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--lib/benchmark.rb12
-rw-r--r--test/benchmark/test_benchmark.rb5
3 files changed, 23 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 6e1738124e..07ac44755a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Sun Aug 24 10:35:54 2014 Pete Higgins <pete@peterhiggins.org>
+
+ * lib/benchmark.rb (module Benchmark): define BENCHMARK_CLOCK
+ (realtime): use Process.clock_gettime(BENCHMARK_CLOCK)
+ Reduces allocations to improve performance [Feature #10165]
+
+ * test/benchmark/test_benchmark.rb (test_realtime_output): new test
+
Fri Aug 22 20:23:54 2014 Koichi Sasada <ko1@atdot.net>
* string.c (rb_fstring): fix condition (easy to cause infinite loop!).
diff --git a/lib/benchmark.rb b/lib/benchmark.rb
index bd3b07284f..eff6cb12ef 100644
--- a/lib/benchmark.rb
+++ b/lib/benchmark.rb
@@ -286,13 +286,21 @@ module Benchmark
label)
end
+ # :stopdoc:
+ if defined?(Process::CLOCK_MONOTONIC)
+ BENCHMARK_CLOCK = Process::CLOCK_MONOTONIC
+ else
+ BENCHMARK_CLOCK = Process::CLOCK_REALTIME
+ end
+ # :startdoc:
+
#
# Returns the elapsed real time used to execute the given block.
#
def realtime # :yield:
- r0 = Time.now
+ r0 = Process.clock_gettime(BENCHMARK_CLOCK)
yield
- Time.now - r0
+ Process.clock_gettime(BENCHMARK_CLOCK) - r0
end
module_function :benchmark, :measure, :realtime, :bm, :bmbm
diff --git a/test/benchmark/test_benchmark.rb b/test/benchmark/test_benchmark.rb
index b2239d486a..7e9653de05 100644
--- a/test/benchmark/test_benchmark.rb
+++ b/test/benchmark/test_benchmark.rb
@@ -152,4 +152,9 @@ BENCH
t.add! { sleep 0.1 }
assert_not_equal(0, t.real)
end
+
+ def test_realtime_output
+ realtime = Benchmark.realtime { sleep 0.001 }
+ assert_in_delta 0.001, realtime
+ end
end