Permalink
Browse files

added support for profiling under rubinius

  • Loading branch information...
1 parent 278344b commit 3872cc4a739db7e0fb5b4a910be371c048667ca7 @goncalossilva goncalossilva committed Mar 26, 2011
@@ -6,9 +6,10 @@
module ActiveSupport
module Testing
- module Performance
+ module Performance
+ # modified by each implementation
DEFAULTS =
- if benchmark = ARGV.include?('--benchmark') # HAX for rake test
+ if ARGV.include?('--benchmark') # HAX for rake test
{ :benchmark => true,
:runs => 4,
:metrics => [:wall_time, :memory, :objects, :gc_runs, :gc_time],
@@ -17,10 +18,8 @@ module Performance
{ :benchmark => false,
:runs => 1,
:min_percent => 0.01,
- :metrics => [:process_time, :memory, :objects],
- :formats => [:flat, :graph_html, :call_tree],
:output => 'tmp/performance' }
- end.freeze
+ end
def self.included(base)
base.superclass_delegating_accessor :profile_options
@@ -3,16 +3,70 @@
module ActiveSupport
module Testing
module Performance
+ if !ARGV.include?('--benchmark')
+ DEFAULTS.merge!(
+ { :metrics => [:wall_time],
+ :formats => [:flat, :graph] })
+ end
+
protected
def run_gc
GC.run(true)
end
+
+ class Performer; end
+
+ class Profiler < Performer
+ def initialize(*args)
+ super
+ end
+
+ def run
+ @profiler = Rubinius::Profiler::Instrumenter.new
+
+ @profiler.profile(false) do
+ profile_options[:runs].to_i.times { run_test(@metric, :profile) }
+ end
+
+ @total = @profiler.info[:runtime] / 1000 / 1000 / 1000.0 # seconds
+ end
+
+ def report
+ super
+ end
+
+ def record
+ if(profile_options[:formats].include?(:flat))
+ File.open(output_filename('FlatPrinter'), 'wb') do |file|
+ @profiler.show(file)
+ end
+ end
+
+ if(profile_options[:formats].include?(:graph))
+ @profiler.set_options({:graph => true})
+ File.open(output_filename('GraphPrinter'), 'wb') do |file|
+ @profiler.show(file)
+ end
+ end
+ end
+
+ protected
+ def output_filename(printer)
+ suffix =
+ case printer
+ when 'FlatPrinter'; 'flat.txt'
+ when 'GraphPrinter'; 'graph.txt'
+ else printer.sub(/Printer$/, '').underscore
+ end
+
+ "#{super()}_#{suffix}"
+ end
+ end
module Metrics
class Base
attr_reader :loopback
-
- # TODO
+
def profile
yield
end
@@ -8,6 +8,12 @@
module ActiveSupport
module Testing
module Performance
+ if !ARGV.include?('--benchmark')
+ DEFAULTS.merge!(
+ { :metrics => [:process_time, :memory, :objects],
+ :formats => [:flat, :graph_html, :call_tree] })
+ end
+
protected
def run_gc
GC.start

0 comments on commit 3872cc4

Please sign in to comment.