# Start timer (nanoseconds)
start = Process.clock_gettime(Process::CLOCK_MONOTONIC, :nanosecond)
# Do some work
1_000_000.times do
# simple loop
end
# Stop timer
end_time = Process.clock_gettime(Process::CLOCK_MONOTONIC, :nanosecond)
# Raw ticks (nanoseconds)
ticks = end_time - start
# Convert to time units
nanoseconds = ticks.to_f
microseconds = nanoseconds / 1_000.0
milliseconds = nanoseconds / 1_000_000.0
seconds = nanoseconds / 1_000_000_000.0
# Frequency (ticks per second)
frequency = 1_000_000_000 # 1 tick = 1 nanosecond
# Print results
puts "Elapsed ticks (ns): #{ticks}"
puts "Elapsed ms: #{milliseconds}"
puts "Elapsed us: #{microseconds}"
puts "Elapsed seconds: #{seconds}"
puts "Timer frequency: #{frequency} Hz"
# run:
#
# Elapsed ticks (ns): 36717780
# Elapsed ms: 36.71778
# Elapsed us: 36717.78
# Elapsed seconds: 0.03671778
# Timer frequency: 1000000000 Hz
#