Updated README.rdoc again
[feedcatcher.git] / vendor / rails / actionpack / lib / action_view / helpers / benchmark_helper.rb
1 require 'benchmark'
2
3 module ActionView
4 module Helpers
5 # This helper offers a method to measure the execution time of a block
6 # in a template.
7 module BenchmarkHelper
8 # Allows you to measure the execution time of a block
9 # in a template and records the result to the log. Wrap this block around
10 # expensive operations or possible bottlenecks to get a time reading
11 # for the operation. For example, let's say you thought your file
12 # processing method was taking too long; you could wrap it in a benchmark block.
13 #
14 # <% benchmark "Process data files" do %>
15 # <%= expensive_files_operation %>
16 # <% end %>
17 #
18 # That would add something like "Process data files (345.2ms)" to the log,
19 # which you can then use to compare timings when optimizing your code.
20 #
21 # You may give an optional logger level as the :level option.
22 # (:debug, :info, :warn, :error); the default value is :info.
23 #
24 # <% benchmark "Low-level files", :level => :debug do %>
25 # <%= lowlevel_files_operation %>
26 # <% end %>
27 #
28 # Finally, you can pass true as the third argument to silence all log activity
29 # inside the block. This is great for boiling down a noisy block to just a single statement:
30 #
31 # <% benchmark "Process data files", :level => :info, :silence => true do %>
32 # <%= expensive_and_chatty_files_operation %>
33 # <% end %>
34 def benchmark(message = "Benchmarking", options = {})
35 if controller.logger
36 if options.is_a?(Symbol)
37 ActiveSupport::Deprecation.warn("use benchmark('#{message}', :level => :#{options}) instead", caller)
38 options = { :level => options, :silence => false }
39 else
40 options.assert_valid_keys(:level, :silence)
41 options[:level] ||= :info
42 end
43
44 result = nil
45 ms = Benchmark.ms { result = options[:silence] ? controller.logger.silence { yield } : yield }
46 controller.logger.send(options[:level], '%s (%.1fms)' % [ message, ms ])
47 result
48 else
49 yield
50 end
51 end
52 end
53 end
54 end