diff options
author | Eric Wong <e@80x24.org> | 2015-05-17 01:26:35 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2015-05-17 01:36:20 +0000 |
commit | f58942d2a238128d850384d16067811f8415d43f (patch) | |
tree | 66090578ff49a8f0050628c24e0e2fa9b465636d | |
parent | 544243e0a14d0d507d0bd0fa34c41861486788e4 (diff) | |
download | dtas-f58942d2a238128d850384d16067811f8415d43f.tar.gz |
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.
-rwxr-xr-x | bin/dtas-console | 3 | ||||
-rw-r--r-- | lib/dtas.rb | 12 | ||||
-rw-r--r-- | lib/dtas/process.rb | 2 |
3 files changed, 15 insertions, 2 deletions
diff --git a/bin/dtas-console b/bin/dtas-console index 18fe7d2..9fa4d09 100755 --- a/bin/dtas-console +++ b/bin/dtas-console @@ -3,6 +3,7 @@ # License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt) # # Note: no idea what I'm doing, especially w.r.t. curses +require 'dtas' require 'dtas/unix_client' require 'dtas/rg_state' require 'dtas/sigevent' @@ -135,7 +136,7 @@ begin Curses.addstr(current['command']) end - elapsed = Time.now.to_f - current['spawn_at'] + elapsed = DTAS.now - current['spawn_at'] if (nr = cur['current_initial']) && (current_format = current['format']) rate = current_format['rate'].to_f elapsed += nr / rate 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 <dtas-all@nongnu.org> # 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' diff --git a/lib/dtas/process.rb b/lib/dtas/process.rb index 5be107f..8c5e8e9 100644 --- a/lib/dtas/process.rb +++ b/lib/dtas/process.rb @@ -51,7 +51,7 @@ module DTAS::Process # :nodoc: pid = spawn(env, cmd, opts) warn [ :spawn, pid, cmd ].inspect if $DEBUG - @spawn_at = Time.now.to_f + @spawn_at = DTAS.now PIDS[pid] = self pid end |