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 49
49:     def initialize(options = {})
50:       @options = default_options.merge(options)
51:     end

[Source]

    # File vendor/rails/actionpack/lib/action_controller/request_profiler.rb, line 54
54:     def self.run(args = nil, options = {})
55:       profiler = new(options)
56:       profiler.parse_options(args) if args
57:       profiler.run
58:     end

Public Instance methods

[Source]

    # File vendor/rails/actionpack/lib/action_controller/request_profiler.rb, line 81
81:     def benchmark(sandbox)
82:       sandbox.request_count = 0
83:       elapsed = sandbox.benchmark(options[:n]).to_f
84:       count = sandbox.request_count.to_i
85:       puts '%.2f sec, %d requests, %d req/sec' % [elapsed, count, count / elapsed]
86:     end

[Source]

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

Parse command-line options

[Source]

     # File vendor/rails/actionpack/lib/action_controller/request_profiler.rb, line 97
 97:     def parse_options(args)
 98:       OptionParser.new do |opt|
 99:         opt.banner = "USAGE: #{$0} [options] [session script path]"
100: 
101:         opt.on('-n', '--times [0000]', 'How many requests to process. Defaults to 100.') { |v| options[:n] = v.to_i }
102:         opt.on('-b', '--benchmark', 'Benchmark instead of profiling') { |v| options[:benchmark] = v }
103:         opt.on('--open [CMD]', 'Command to open profile results. Defaults to "open %s &"') { |v| options[:open] = v }
104:         opt.on('-h', '--help', 'Show this help') { puts opt; exit }
105: 
106:         opt.parse args
107: 
108:         if args.empty?
109:           puts opt
110:           exit
111:         end
112:         options[:script] = args.pop
113:       end
114:     end

[Source]

    # File vendor/rails/actionpack/lib/action_controller/request_profiler.rb, line 72
72:     def profile(sandbox)
73:       load_ruby_prof
74: 
75:       results = RubyProf.profile { benchmark(sandbox) }
76: 
77:       show_profile_results results
78:       results
79:     end

[Source]

    # File vendor/rails/actionpack/lib/action_controller/request_profiler.rb, line 60
60:     def run
61:       sandbox = Sandbox.new(options[:script])
62: 
63:       puts 'Warming up once'
64: 
65:       elapsed = warmup(sandbox)
66:       puts '%.2f sec, %d requests, %d req/sec' % [elapsed, sandbox.request_count, sandbox.request_count / elapsed]
67:       puts "\n#{options[:benchmark] ? 'Benchmarking' : 'Profiling'} #{options[:n]}x"
68: 
69:       options[:benchmark] ? benchmark(sandbox) : profile(sandbox)
70:     end

[Source]

    # File vendor/rails/actionpack/lib/action_controller/request_profiler.rb, line 88
88:     def warmup(sandbox)
89:       Benchmark.realtime { sandbox.run }
90:     end

Protected Instance methods

[Source]

     # File vendor/rails/actionpack/lib/action_controller/request_profiler.rb, line 117
117:       def load_ruby_prof
118:         begin
119:           require 'ruby-prof'
120:           #RubyProf.measure_mode = RubyProf::ALLOCATED_OBJECTS
121:         rescue LoadError
122:           abort '`gem install ruby-prof` to use the profiler'
123:         end
124:       end

[Source]

     # File vendor/rails/actionpack/lib/action_controller/request_profiler.rb, line 126
126:       def show_profile_results(results)
127:         File.open "#{RAILS_ROOT}/tmp/profile-graph.html", 'w' do |file|
128:           RubyProf::GraphHtmlPrinter.new(results).print(file)
129:           `#{options[:open] % file.path}` if options[:open]
130:         end
131: 
132:         File.open "#{RAILS_ROOT}/tmp/profile-flat.txt", 'w' do |file|
133:           RubyProf::FlatPrinter.new(results).print(file)
134:           `#{options[:open] % file.path}` if options[:open]
135:         end
136:       end

[Validate]