aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--railties/CHANGELOG14
-rw-r--r--railties/Rakefile2
-rw-r--r--railties/bin/benchmarker16
-rw-r--r--railties/bin/console_sandbox (renamed from railties/bin/console_sandbox.rb)0
-rw-r--r--railties/bin/profiler14
-rw-r--r--railties/lib/rails_generator/generators/applications/app/app_generator.rb2
6 files changed, 46 insertions, 2 deletions
diff --git a/railties/CHANGELOG b/railties/CHANGELOG
index 7a0d0ad1cc..0ff8f05b95 100644
--- a/railties/CHANGELOG
+++ b/railties/CHANGELOG
@@ -1,5 +1,19 @@
*SVN*
+* Added script/benchmarker to easily benchmark one or more statement a number of times from within the environment. Examples:
+
+ # runs the one statement 10 times
+ script/benchmarker 10 'Person.expensive_method(10)'
+
+ # pits the two statements against each other with 50 runs each
+ script/benchmarker 50 'Person.expensive_method(10)' 'Person.cheap_method(10)'
+
+
+* Added script/profiler to easily profile a single statement from within the environment. Examples:
+
+ script/profiler 'Person.expensive_method(10)'
+ script/profiler 'Person.expensive_method(10)' 10 # runs the statement 10 times
+
* Added Rake target clear_logs that'll truncate all the *.log files in log/ to zero #1079 [Lucas Carlson]
* Added lazy typing for generate, such that ./script/generate cn == ./script/generate controller and the likes #1051 [k@v2studio.com]
diff --git a/railties/Rakefile b/railties/Rakefile
index 6b0bd8c7c1..b18d5e20ea 100644
--- a/railties/Rakefile
+++ b/railties/Rakefile
@@ -26,7 +26,7 @@ TEST_DIRS = %w( fixtures unit functional mocks mocks/development mocks/test )
LOG_FILES = %w( server.log development.log test.log production.log )
HTML_FILES = %w( 404.html 500.html index.html favicon.ico javascripts/prototype.js )
-BIN_FILES = %w( generate destroy breakpointer console server update runner )
+BIN_FILES = %w( generate destroy breakpointer console console_sandbox server update runner profiler benchmarker )
VENDOR_LIBS = %w( actionpack activerecord actionmailer activesupport actionwebservice railties )
diff --git a/railties/bin/benchmarker b/railties/bin/benchmarker
new file mode 100644
index 0000000000..a5814d98a6
--- /dev/null
+++ b/railties/bin/benchmarker
@@ -0,0 +1,16 @@
+#!/usr/local/bin/ruby
+
+if ARGV.empty?
+ puts "Usage: benchmarker times 'Person.expensive_way' 'Person.another_expensive_way' ..."
+ exit
+end
+
+require File.dirname(__FILE__) + '/../config/environment'
+require 'benchmark'
+include Benchmark
+
+bm(6) do |x|
+ ARGV[1..-1].each_with_index do |expression, idx|
+ x.report("##{idx + 1}") { ARGV[0].to_i.times { eval(expression) } }
+ end
+end \ No newline at end of file
diff --git a/railties/bin/console_sandbox.rb b/railties/bin/console_sandbox
index 80f3dbc223..80f3dbc223 100644
--- a/railties/bin/console_sandbox.rb
+++ b/railties/bin/console_sandbox
diff --git a/railties/bin/profiler b/railties/bin/profiler
new file mode 100644
index 0000000000..aca84055c2
--- /dev/null
+++ b/railties/bin/profiler
@@ -0,0 +1,14 @@
+#!/usr/local/bin/ruby
+
+if ARGV.empty?
+ puts "Usage: profiler 'Person.expensive_method(10)' [times]"
+ exit
+end
+
+require File.dirname(__FILE__) + '/../config/environment'
+require "profiler"
+
+Profiler__::start_profile
+(ARGV[1] || 1).to_i.times { eval(ARGV.first) }
+Profiler__::stop_profile
+Profiler__::print_profile($stdout) \ No newline at end of file
diff --git a/railties/lib/rails_generator/generators/applications/app/app_generator.rb b/railties/lib/rails_generator/generators/applications/app/app_generator.rb
index 118dc0858a..765c91e406 100644
--- a/railties/lib/rails_generator/generators/applications/app/app_generator.rb
+++ b/railties/lib/rails_generator/generators/applications/app/app_generator.rb
@@ -43,7 +43,7 @@ class AppGenerator < Rails::Generator::Base
m.file "environments/test.rb", "config/environments/test.rb"
# Scripts
- %w(console console_sandbox.rb destroy generate server runner).each do |file|
+ %w(console console_sandbox destroy generate server runner benchmarker profiler).each do |file|
m.file "bin/#{file}", "script/#{file}", script_options
end
if options[:gem]