From f58942d2a238128d850384d16067811f8415d43f Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Sun, 17 May 2015 01:26:35 +0000 Subject: use monotonic clock on Ruby 2.1+ The monotonic clock is immune to stepping adjustments so it is more suitable for tracking elapsed time differences. Process.clock_gettime also generates less garbage on 64-bit systems due to the use of Flonum. --- lib/dtas.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'lib/dtas.rb') diff --git a/lib/dtas.rb b/lib/dtas.rb index 9fc7253..f11d549 100644 --- a/lib/dtas.rb +++ b/lib/dtas.rb @@ -1,6 +1,18 @@ # Copyright (C) 2013-2015 all contributors # License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt) module DTAS # :nodoc: + # try to use the monotonic clock in Ruby >= 2.1, it is immune to clock + # offset adjustments and generates less garbage (Float vs Time object) + begin + ::Process.clock_gettime(::Process::CLOCK_MONOTONIC) + def self.now + ::Process.clock_gettime(::Process::CLOCK_MONOTONIC) + end + rescue NameError, NoMethodError + def self.now # Ruby <= 2.0 + Time.now.to_f + end + end end require_relative 'dtas/compat_onenine' -- cgit v1.2.3-24-ge0c7