Class ActionController::RequestProfiler
In: vendor/rails/actionpack/lib/action_controller/request_profiler.rb
Parent: Object

Methods

Classes and Modules

Class ActionController::RequestProfiler::Sandbox

Attributes

options  [R] 

Public Class methods

[Source]

    # File vendor/rails/actionpack/lib/action_controller/request_profiler.rb, line 76
76:     def initialize(options = {})
77:       @options = default_options.merge(options)
78:     end

[Source]

    # File vendor/rails/actionpack/lib/action_controller/request_profiler.rb, line 81
81:     def self.run(args = nil, options = {})
82:       profiler = new(options)
83:       profiler.parse_options(args) if args
84:       profiler.run
85:     end

Public Instance methods

[Source]

     # File vendor/rails/actionpack/lib/action_controller/request_profiler.rb, line 109
109:     def benchmark(sandbox, profiling = false)
110:       sandbox.request_count = 0
111:       elapsed = sandbox.benchmark(options[:n], profiling).to_f
112:       count = sandbox.request_count.to_i
113:       puts '%.2f sec, %d requests, %d req/sec' % [elapsed, count, count / elapsed]
114:     end

[Source]

     # File vendor/rails/actionpack/lib/action_controller/request_profiler.rb, line 120
120:     def default_options
121:       { :n => 100, :open => 'open %s &' }
122:     end

Parse command-line options

[Source]

     # File vendor/rails/actionpack/lib/action_controller/request_profiler.rb, line 125
125:     def parse_options(args)
126:       OptionParser.new do |opt|
127:         opt.banner = "USAGE: #{$0} [options] [session script path]"
128: 
129:         opt.on('-n', '--times [100]', 'How many requests to process. Defaults to 100.') { |v| options[:n] = v.to_i if v }
130:         opt.on('-b', '--benchmark', 'Benchmark instead of profiling') { |v| options[:benchmark] = v }
131:         opt.on('-m', '--measure [mode]', 'Which ruby-prof measure mode to use: process_time, wall_time, cpu_time, allocations, or memory. Defaults to process_time.') { |v| options[:measure] = v }
132:         opt.on('--open [CMD]', 'Command to open profile results. Defaults to "open %s &"') { |v| options[:open] = v }
133:         opt.on('-h', '--help', 'Show this help') { puts opt; exit }
134: 
135:         opt.parse args
136: 
137:         if args.empty?
138:           puts opt
139:           exit
140:         end
141:         options[:script] = args.pop
142:       end
143:     end

[Source]

     # File vendor/rails/actionpack/lib/action_controller/request_profiler.rb, line 99
 99:     def profile(sandbox)
100:       load_ruby_prof
101: 
102:       benchmark(sandbox, true)
103:       results = RubyProf.stop
104: 
105:       show_profile_results results
106:       results
107:     end

[Source]

    # File vendor/rails/actionpack/lib/action_controller/request_profiler.rb, line 87
87:     def run
88:       sandbox = Sandbox.new(options[:script])
89: 
90:       puts 'Warming up once'
91: 
92:       elapsed = warmup(sandbox)
93:       puts '%.2f sec, %d requests, %d req/sec' % [elapsed, sandbox.request_count, sandbox.request_count / elapsed]
94:       puts "\n#{options[:benchmark] ? 'Benchmarking' : 'Profiling'} #{options[:n]}x"
95: 
96:       options[:benchmark] ? benchmark(sandbox) : profile(sandbox)
97:     end

[Source]

     # File vendor/rails/actionpack/lib/action_controller/request_profiler.rb, line 116
116:     def warmup(sandbox)
117:       Benchmark.realtime { sandbox.run(false) }
118:     end

Protected Instance methods

[Source]

     # File vendor/rails/actionpack/lib/action_controller/request_profiler.rb, line 146
146:       def load_ruby_prof
147:         begin
148:           gem 'ruby-prof', '>= 0.6.1'
149:           require 'ruby-prof'
150:           if mode = options[:measure]
151:             RubyProf.measure_mode = RubyProf.const_get(mode.upcase)
152:           end
153:         rescue LoadError
154:           abort '`gem install ruby-prof` to use the profiler'
155:         end
156:       end

[Source]

     # File vendor/rails/actionpack/lib/action_controller/request_profiler.rb, line 158
158:       def show_profile_results(results)
159:         File.open "#{RAILS_ROOT}/tmp/profile-graph.html", 'w' do |file|
160:           RubyProf::GraphHtmlPrinter.new(results).print(file)
161:           `#{options[:open] % file.path}` if options[:open]
162:         end
163: 
164:         File.open "#{RAILS_ROOT}/tmp/profile-flat.txt", 'w' do |file|
165:           RubyProf::FlatPrinter.new(results).print(file)
166:           `#{options[:open] % file.path}` if options[:open]
167:         end
168:       end

[Validate]