mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
added support for profiling under rubinius
This commit is contained in:
@@ -6,9 +6,10 @@ require 'action_view/helpers/number_helper'
|
||||
|
||||
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 ActiveSupport
|
||||
{ :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 @@ require 'rubinius/agent'
|
||||
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 @@ end
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user