0.0
No commit activity in last 3 years
No release in over 3 years
instruments methods with hitimes
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0

Runtime

>= 1.0.0
 Project Readme

focal_point¶ ↑

An unobtrusive profiling utility, for ruby, based on hitimes.

  • hitimes provides excellent timers (low overhead, high resolution)

  • focal_point helps you use them, without polluting the code you’re interested in.

Usage¶ ↑

  1. Tell FocalPoint to watch one or more methods

  2. Execute the methods you’re interested in

  3. Ask FocalPoint for a report

  4. Enjoy

Usage Example¶ ↑

Given a contrived implementation:

class Foo
  def self.bar
    rand(10).times { sleep(1) }
  end
  def bin
    Foo.bar
  end
end

You’re wondering how much time you spend executing Foo.bar and Foo#bin.

# 1. Tell FocalPoint to watch one or more methods
require 'foo'
require 'focal_point'
FocalPoint.watch('Foo.bar') # eg: class method
FocalPoint.watch('Foo#bin') # eg: instance method

# 2. Execute the methods you're interested in
rand(10).times { Foo.bar }
rand(10).times { Foo.new.bin }

# 3. Ask FocalPoint to report what happened
FocalPoint.report  ## report accepts an IO object, if you want to send it somewhere else.

# 4. Enjoy.
#
# You should see something like this in your stdout.
#
# --------------------------------------------------------------------------------
# sum: 7.003960149
# name: Foo.bar
# sampling_stop_time: 1.26255541894458e+15
# sumsq: 25.03019390208
# sampling_start_time: 1.26255541194084e+15
# rate: 0.285552738372669
# max: 4.003211068
# mean: 3.5019800745
# count: 2
# stddev: 0.708847668889441
# min: 3.000749081
#
# --------------------------------------------------------------------------------
# sum: 25.003881843
# name: Foo#bin
# sampling_stop_time: 1.26255621470907e+15
# sumsq: 151.046337138512
# sampling_start_time: 1.26255618970493e+15
# rate: 0.199968950077237
# max: 7.001084262
# mean: 5.0007763686
# count: 5
# stddev: 2.54987821742389
# min: 1.000180239
# additional_data:

Motivation¶ ↑

This, or variations of it were happening way to often:

Foo.class_eval do
  def self.bar_timer
    @bar_timer ||= Hitimes::TimedMetric.new("Foo#bar")
  end
  alias_method :real_bar, :bar
  def bar *args
    self.class.bar_timer.start
    result = real_bar(*args)
    self.class.bar_timer.stop
    result
  end
end

Note on Patches/Pull Requests¶ ↑

  • Fork the project.

  • Make your feature addition or bug fix.

  • Add tests for it. This is important so I don’t break it in a future version unintentionally.

  • Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)

  • Send me a pull request. Bonus points for topic branches.

Copyright © 2010 levicook@gmail.com. See LICENSE for details.