lib/ztk/profiler/timer/class_methods.rb
module ZTK
class Profiler
class Timer
# Profiler Timer Class Functionality
module ClassMethods
@@timers ||= Array.new
@@timers_by_name ||= Hash.new { |hash, key| hash[key] = Array.new }
@@timers_by_parent ||= Hash.new { |hash, key| hash[key] = Array.new }
@@benchmark_total ||= nil
@@benchmark_nested_total ||= nil
def timers
@@timers
end
def timers_by_parent
@@timers_by_parent
end
def timers_by_name
@@timers_by_name
end
def add(timer)
@@timers << timer
@@timers_by_parent[timer.parent] << timer
@@timers_by_name[timer.name] << timer
true
end
def reset
@@timers = Array.new
@@timers_by_name = Hash.new { |hash, key| hash[key] = Array.new }
@@timers_by_parent = Hash.new { |hash, key| hash[key] = Array.new }
true
end
def nested_time(name=nil, parent=nil)
result = 0.0
child_timers = @@timers_by_parent[parent]
child_timers.each do |child_timer|
if (child_timer.name == name)
result += child_timer.benchmark_nested
end
result += nested_time(name, child_timer)
end
result
end
def count
@@timers.count
end
def benchmark_total
@@benchmark_total ||= @@timers.map(&:benchmark).reduce(&:+)
@@benchmark_total
end
def benchmark_nested_total
@@benchmark_nested_total ||= @@timers.map(&:benchmark_nested).reduce(&:+)
@@benchmark_nested_total
end
def total_time
@@total_time ||= @@timers_by_parent[nil].map(&:benchmark).reduce(&:+)
@@total_time
end
end
end
end
end