Async SourceAsyncClock

class Clock

A convenient wrapper around the internal monotonic clock.

Signature

public

Since stable-v1.

Definitions

def self.now

Get the current elapsed monotonic time.

Implementation

def self.now
	::Process.clock_gettime(::Process::CLOCK_MONOTONIC)
end

def self.measure

Measure the execution of a block of code.

Signature

yields {...}

The block to execute.

returns Numeric

The total execution time.

Implementation

def self.measure
	start_time = self.now
	
	yield
	
	return self.now - start_time
end

def self.start

Start measuring elapsed time from now.

Signature

returns Clock

Implementation

def self.start
	self.new.tap(&:start!)
end

def initialize(total = 0)

Create a new clock with the initial total time.

Signature

parameter total Numeric

The initial clock duration.

Implementation

def initialize(total = 0)
	@total = total
	@started = nil
end

def start!

Start measuring a duration.

Implementation

def start!
	@started ||= Clock.now
end

def stop!

Stop measuring a duration and append the duration to the current total.

Implementation

def stop!
	if @started
		@total += (Clock.now - @started)
		@started = nil
	end
	
	return @total
end

def total

The total elapsed time including any current duration.

Implementation

def total
	total = @total
	
	if @started
		total += (Clock.now - @started)
	end
	
	return total
end

Discussion