aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/commands/perform/profiler
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2005-10-14 02:28:56 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2005-10-14 02:28:56 +0000
commit2bb72134b57e92109809ed80d725001d5db0a8cf (patch)
tree3a232c17e37fda4b557300ba50cb47064bf277a4 /railties/lib/commands/perform/profiler
parent59709d9188b7afff3ee53a4a20b9e40a7699e298 (diff)
downloadrails-2bb72134b57e92109809ed80d725001d5db0a8cf.tar.gz
rails-2bb72134b57e92109809ed80d725001d5db0a8cf.tar.bz2
rails-2bb72134b57e92109809ed80d725001d5db0a8cf.zip
Fix spelling
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2574 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'railties/lib/commands/perform/profiler')
-rw-r--r--railties/lib/commands/perform/profiler35
1 files changed, 35 insertions, 0 deletions
diff --git a/railties/lib/commands/perform/profiler b/railties/lib/commands/perform/profiler
new file mode 100644
index 0000000000..d84c8b739f
--- /dev/null
+++ b/railties/lib/commands/perform/profiler
@@ -0,0 +1,35 @@
+#!/usr/local/bin/ruby
+if ARGV.empty?
+ $stderr.puts "Usage: profiler 'Person.expensive_method(10)' [times]"
+ exit(1)
+end
+
+# Keep the expensive require out of the profile.
+$stderr.puts 'Loading Rails...'
+require File.dirname(__FILE__) + '/../config/environment'
+
+# Define a method to profile.
+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
+
+# 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
+ require 'profiler'
+ $stderr.puts 'Using the standard Ruby profiler.'
+ Profiler__.start_profile
+ profile_me
+ Profiler__.stop_profile
+ Profiler__.print_profile($stderr)
+end