Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Made the console and profiler work with the default 1.8.2 profiler #1325
 [bitsweat]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@1339 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
  • Loading branch information
dhh committed May 21, 2005
1 parent 997eb90 commit 2bccdba
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 34 deletions.
4 changes: 1 addition & 3 deletions railties/bin/console
Expand Up @@ -2,18 +2,16 @@
irb = RUBY_PLATFORM =~ /mswin32/ ? 'irb.bat' : 'irb'

require 'optparse'
options = { :sandbox => false, :profile => false, :irb => irb }
options = { :sandbox => false, :irb => irb }
OptionParser.new do |opt|
opt.on('-s', '--sandbox', 'Rollback database modifications on exit.') { |options[:sandbox]| }
opt.on('--profile', 'Profile the session and print results on exit.') { |options[:profile]| }
opt.on("--irb=[#{irb}]", 'Invoke a different irb.') { |options[:irb]| }
opt.parse!(ARGV)
end

libs = " -r irb/completion"
libs << " -r #{File.dirname(__FILE__)}/../config/environment"
libs << " -r console_sandbox" if options[:sandbox]
libs << " -r console_profile" if options[:profile]

ENV['RAILS_ENV'] = ARGV.first || 'development'
if options[:sandbox]
Expand Down
40 changes: 23 additions & 17 deletions railties/bin/profiler
@@ -1,28 +1,34 @@
#!/usr/local/bin/ruby

if ARGV.empty?
$stderr.puts "Usage: profiler 'Person.expensive_method(10)' [times]"
exit
exit(1)
end

# Keep the expensive require out of the profile.
puts 'Loading Rails...'
$stderr.puts 'Loading Rails...'
require File.dirname(__FILE__) + '/../config/environment'

# Default to a single execution.
N = (ARGV[1] || 1).to_i

# Define a method to profile.
eval <<end_eval
def profile_me
for i in 1..#{N}
#{ARGV[0]}
end
if ARGV[1] and ARGV[1].to_i > 1
eval "def profile_me() #{ARGV[1]}.times { #{ARGV[0]} } end"
else
eval "def profile_me() #{ARGV[0]} end"
end
end_eval

# Require the profiler at_exit wrapper from railties/lib.
require 'console_profile'

# Blast off!
profile_me
# Use the ruby-prof extension if available. Fall back to stdlib profiler.
begin
require 'prof'
$stderr.puts 'Using the ruby-prof extension.'
Prof.clock_mode = Prof::GETTIMEOFDAY
Prof.start
profile_me
results = Prof.stop
require 'rubyprof_ext'
Prof.print_profile(results, $stderr)
rescue LoadError
$stderr.puts 'Using the standard Ruby profiler.'
Profiler__.start_profile
profile_me
Profiler__.stop_profile
Profiler__.print_profile($stderr)
end
14 changes: 0 additions & 14 deletions railties/lib/console_profile.rb
@@ -1,14 +0,0 @@
# No GC nonsense.
GC.disable

# Try to load the ruby-prof extension; fail back to the pure-Ruby
# profiler included in the standard library.
begin
require 'prof'
Prof.clock_mode = Prof::CPU
puts 'Using the fast ruby-prof extension'
require 'unprof'
rescue LoadError
puts 'Using the slow pure-Ruby profiler'
require 'profile'
end

0 comments on commit 2bccdba

Please sign in to comment.