Skip to Content Skip to Search
Namespace
Methods
N
P

Constants

Error = Class.new(StandardError)
 

Attributes

[R] mode
[R] path

Class Public methods

new(path, mode = nil)

# File rails/tools/profile, line 17
def initialize(path, mode = nil)
  assert_ruby_file_exists(path)
  @path, @mode = path, mode
  require "benchmark"
end

Instance Public methods

profile_requires()

# File rails/tools/profile, line 23
def profile_requires
  GC.start
  before_rss = `ps -o rss= -p #{Process.pid}`.to_i

  if mode
    require "ruby-prof"
    RubyProf.measure_mode = RubyProf.const_get(mode.upcase)
    RubyProf.start
  else
    Object.instance_eval { include RequireProfiler }
  end

  elapsed = Benchmark.realtime { require path }
  results = RubyProf.stop if mode

  GC.start
  after_rss = `ps -o rss= -p #{Process.pid}`.to_i

  if mode
    if printer = ARGV.shift
      puts "RubyProf outputting to stderr with printer #{printer}"
      RubyProf.const_get("#{printer.to_s.classify}Printer").new(results).print($stdout)
    elsif RubyProf.const_defined?(:CallStackPrinter)
      filename = "#{File.basename(path, '.rb')}.#{mode}.html"
      puts "RubyProf outputting to #{filename}"
      File.open(filename, "w") do |out|
        RubyProf::CallStackPrinter.new(results).print(out)
      end
    else
      filename = "#{File.basename(path, '.rb')}.#{mode}.callgrind"
      puts "RubyProf outputting to #{filename}"
      File.open(filename, "w") do |out|
        RubyProf::CallTreePrinter.new(results).print(out)
      end
    end
  end

  RequireProfiler.stats.each do |file, depth, sec|
    if sec
      puts "%8.1f ms  %s%s" % [sec * 1000, " " * depth, file]
    else
      puts "#{' ' * (13 + depth)}#{file}"
    end
  end
  puts "%8.1f ms  %d KB RSS" % [elapsed * 1000, after_rss - before_rss]
end