Class: FocalPoint
Instance Attribute Summary collapse
-
#timer ⇒ Object
Returns the value of attribute timer.
Class Method Summary collapse
- .report(io = $stdout) ⇒ Object
-
.watch(*targets) ⇒ Object
FocalPoint.watch(“ClassName#instance_method”) FocalPoint.watch(“ClassName.class_method”).
Instance Method Summary collapse
-
#initialize(target) ⇒ FocalPoint
constructor
A new instance of FocalPoint.
Methods included from Multiton
Constructor Details
#initialize(target) ⇒ FocalPoint
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 |
# File 'lib/focal_point.rb', line 10 def initialize(target) @target = String(target) @timer = Hitimes::TimedMetric.new(@target) if @target =~ /^([^#.]+)(#|\.)(.*)$/ @method_name = $3 @scope = case $2 when '#' ## we're instrumenting an instance method eval($1) when '.' ## we're instrumenting a module method (class << eval($1); self; end) end else $stdout.puts "FocalPoint::Error: Not sure how to instrument #{@target}" end # make timer and unbound available to the lambda timer = @timer unbound = @scope.instance_method(@method_name) @scope.send(:undef_method , @method_name) @scope.send(:define_method, @method_name) do |*args, &block| lambda { bound = unbound.bind(self) timer.measure { bound.call(*args, &block) } }.call end end |
Instance Attribute Details
#timer ⇒ Object
Returns the value of attribute timer.
8 9 10 |
# File 'lib/focal_point.rb', line 8 def timer @timer end |
Class Method Details
.report(io = $stdout) ⇒ Object
46 47 48 49 50 51 52 53 54 |
# File 'lib/focal_point.rb', line 46 def report(io=$stdout) timers = [] ObjectSpace.each_object(FocalPoint) { |fp| timers << fp.timer } timers.compact.sort_by(&:sum).each do |timer| io.puts '-'*80 timer.to_hash.each { |k,v| io.puts "#{k}: #{v}" } io.puts end end |
.watch(*targets) ⇒ Object
FocalPoint.watch(“ClassName#instance_method”) FocalPoint.watch(“ClassName.class_method”)
42 43 44 |
# File 'lib/focal_point.rb', line 42 def watch(*targets) targets.each { |t| FocalPoint.new(t) } end |