class Sqreen::Graft::Timer

Attributes

size[RW]
tag[R]
tally[RW]

Public Class Methods

new(tag, &block) click to toggle source
# File lib/sqreen/graft/call.rb, line 105
def initialize(tag, &block)
  @tag = tag
  @block = block
  @tally = 0
  @size = 0
end
read() click to toggle source
# File lib/sqreen/graft/call.rb, line 99
def self.read
  Process.clock_gettime(Process::CLOCK_MONOTONIC)
end

Public Instance Methods

duration() click to toggle source
# File lib/sqreen/graft/call.rb, line 118
def duration
  raise(TimerError, 'Timer#duration when running') if @size.odd?

  @tally
end
elapsed() click to toggle source
# File lib/sqreen/graft/call.rb, line 112
def elapsed
  raise(TimerError, 'Timer#elapsed when paused') if @size.even?

  @tally + Timer.read
end
ignore() { |self| ... } click to toggle source
# File lib/sqreen/graft/call.rb, line 124
def ignore
  raise(TimerError, 'Timer#ignore when paused') if @size.even?

  @size += 1
  @tally += Timer.read
  yield(self)
ensure
  @size += 1
  @tally -= Timer.read
end
include_measurements(another_timer) click to toggle source
# File lib/sqreen/graft/call.rb, line 198
def include_measurements(another_timer)
  @blips += another_timer.instance_variable_get(:@blips)
end
measure(opts = nil) { |self| ... } click to toggle source
# File lib/sqreen/graft/call.rb, line 135
def measure(opts = nil)
  raise(TimerError, 'Timer#measure when running') if @size.odd?

  now = Timer.read

  ignore = opts[:ignore] if opts
  if ignore
    ignore.size += 1
    ignore.tally += now
  end

  @size += 1
  @tally -= now

  yield(self)
ensure
  now = Timer.read

  if ignore
    ignore.size += 1
    ignore.tally -= now
  end

  @size += 1
  @tally += now

  @block.call(self) if @block
end
paused?() click to toggle source
# File lib/sqreen/graft/call.rb, line 194
def paused?
  @size.even?
end
running?() click to toggle source
# File lib/sqreen/graft/call.rb, line 190
def running?
  @size.odd?
end
start(at = Timer.read) click to toggle source
# File lib/sqreen/graft/call.rb, line 164
def start(at = Timer.read)
  raise(TimerError, 'Timer#start when started') unless @size.even?

  @size += 1
  @tally -= at

  at
end
start_and_end() click to toggle source
# File lib/sqreen/graft/call.rb, line 202
def start_and_end
  raise 'Not exactly two measurements recorded' unless size == 2
  @blips
end
started?() click to toggle source
# File lib/sqreen/graft/call.rb, line 182
def started?
  @size != 0 && @size.odd?
end
stop(at = Timer.read) click to toggle source
# File lib/sqreen/graft/call.rb, line 173
def stop(at = Timer.read)
  raise(TimerError, 'Timer#stop when unstarted') unless @size.odd?

  @size += 1
  @tally += at

  at
end
stopped?() click to toggle source
# File lib/sqreen/graft/call.rb, line 186
def stopped?
  @size != 0 && @size.even?
end
to_s() click to toggle source
# File lib/sqreen/graft/call.rb, line 207
def to_s
  "#{@tag}: time=%.03fus" % (duration * 1_000_000)
end