aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-08-24 02:03:06 +0000
committernormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-08-24 02:03:06 +0000
commit249bd1ed2a00c9c3defdd09224b22a6691f73789 (patch)
treed27e5f87525fcb6e333766b4bdeb25ee5b31b13c
parentccbeb0d6dce7e38d98232f91fc0b4bbdc499674f (diff)
downloadruby-249bd1ed2a00c9c3defdd09224b22a6691f73789.tar.gz
lib/benchmark.rb: speedup by reducing allocations
* lib/benchmark.rb (module Benchmark): define BENCHMARK_CLOCK (realtime): use Process.clock_gettime(BENCHMARK_CLOCK) [Feature #10165] * test/benchmark/test_benchmark.rb (test_realtime_output): new test git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47260 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-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