diff --git a/Gemfile b/Gemfile index 01dfefc57..d776e70e8 100644 --- a/Gemfile +++ b/Gemfile @@ -17,6 +17,8 @@ group :development do gem 'pry-debugger', :platforms => [:mri_19, :mri_20] gem 'pry-byebug', :platforms => [:mri_21] gem 'rb-fsevent' + gem 'benchmark-ips' + gem 'memory_profiler' end group :test do diff --git a/Rakefile b/Rakefile index 127a31c6c..c95c4eb77 100644 --- a/Rakefile +++ b/Rakefile @@ -15,3 +15,39 @@ rescue LoadError end task :default => [:spec, :rubocop] + + +namespace :perf do + task :setup do + require 'omniauth' + require 'rack/test' + app = Rack::Builder.new do |b| + b.use Rack::Session::Cookie, :secret => 'abc123' + b.use OmniAuth::Strategies::Developer + b.run lambda { |_env| [200, {}, ['Not Found']] } + end.to_app + @app = Rack::MockRequest.new(app) + + def call_app(path = ENV['GET_PATH'] || "/") + result = @app.get(path) + raise "Did not succeed #{result.body}" unless result.status == 200 + result + end + end + + task :ips => :setup do + require 'benchmark/ips' + Benchmark.ips do |x| + x.report("ips") { call_app } + end + end + + task :mem => :setup do + require 'memory_profiler' + num = Integer(ENV["CNT"] || 1) + report = MemoryProfiler.report do + num.times { call_app } + end + report.pretty_print + end +end