File: clock_ids.rb

package info (click to toggle)
ruby-hitimes 3.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 372 kB
  • sloc: ruby: 1,385; makefile: 7
file content (52 lines) | stat: -rw-r--r-- 1,114 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
def potential_clock_ids
  [].tap do |clock_ids|
    %i[
      CLOCK_MONOTONIC_RAW
      CLOCK_UPTIME_RAW
      CLOCK_UPTIME
      CLOCK_MONOTONIC
      CLOCK_MONOTONIC_FAST
      CLOCK_BOOTTIME
      CLOCK_REALTIME
    ].each do |c|
      clock_ids << { name: c, value: Process.const_get(c)} if Process.const_defined?(c)
    end
  end
end

clock_ids = potential_clock_ids
puts "Using the following clock ids: #{clock_ids.join(', ')}"

def resolutions_of(clock_id)
  counts = Hash.new(0)
  1_000_000.times do
    val = Process.clock_gettime(clock_id, :nanosecond)
    res = if (val % 1_000_000_000).zero?
            1
          elsif (val % 1_000_000).zero?
            1e-3
          elsif (val % 1_000).zero?
            1e-6
          else
            1e-9
          end
    counts[res] += 1
  end
  counts
end

data = { platform: RUBY_PLATFORM, clock_ids: {} }

clock_ids.each do |clock_info|

  name        = clock_info[:name]
  clock_id    = clock_info[:value]
  resolutions = resolutions_of(clock_id)

  data[:clock_ids][name] = resolutions.transform_keys(&:to_s)
end

require 'yaml'
puts YAML.dump(data)