--- !ruby/object:RI::MethodDescription 
aliases: []

block_params: job
comment: 
- !ruby/struct:SM::Flow::P 
  body: "Sometimes benchmark results are skewed because code executed earlier encounters different garbage collection overheads than that run later. #bmbm attempts to minimize this effect by running the tests twice, the first time as a rehearsal in order to get the runtime environment stable, the second time for real. <tt>GC.start</tt> is executed before the start of each of the real timings; the cost of this is not included in the timings. In reality, though, there's only so much that #bmbm can do, and the results are not guaranteed to be isolated from garbage collection and other effects."
- !ruby/struct:SM::Flow::P 
  body: "Because #bmbm takes two passes through the tests, it can calculate the required label width."
- !ruby/struct:SM::Flow::VERB 
  body: "      require 'benchmark'\n\n      array = (1..1000000).map { rand }\n\n      Benchmark.bmbm do |x|\n        x.report(&quot;sort!&quot;) { array.dup.sort! }\n        x.report(&quot;sort&quot;)  { array.dup.sort  }\n      end\n"
- !ruby/struct:SM::Flow::P 
  body: <em>Generates:</em>
- !ruby/struct:SM::Flow::VERB 
  body: "       Rehearsal -----------------------------------------\n       sort!  11.928000   0.010000  11.938000 ( 12.756000)\n       sort   13.048000   0.020000  13.068000 ( 13.857000)\n       ------------------------------- total: 25.006000sec\n\n                   user     system      total        real\n       sort!  12.959000   0.010000  12.969000 ( 13.793000)\n       sort   12.007000   0.000000  12.007000 ( 12.791000)\n"
- !ruby/struct:SM::Flow::P 
  body: "#bmbm yields a Benchmark::Job object and returns an array of Benchmark::Tms objects."
full_name: Benchmark#bmbm
is_singleton: false
name: bmbm
params: (width = 0) {|job| ...}
visibility: public
