lib/rubyperf.rb in rubyperf-1.3.6 vs lib/rubyperf.rb in rubyperf-1.3.7

- old
+ new

@@ -1,150 +1,6 @@ # -#Copyright (c) 2012 Lorenzo Pasqualis - DreamBox Learning, Inc -# -#Project home-page git repository: -# https://github.com/lpasqualis/rubyperf -# -#Author can be contacted at: -# lpasqualis@gmail.com -# -#Author's Blog: -# http://www.lorenzopasqualis.com -# -#License: -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# -############################################################################# -# -#This gem measures the execution time of blocks of code, methods and expressions. -#It generates detailed reports in various formats showing the nested structure -#of the measures. -# -#Designed to give tools to drill in the performance of hot code and identify -#bottlenecks. -# -#Currently available output formats for the report: text, html. -# -#Example of use: -# -# require 'rubyperf' -# -# def example -# m=Perf::Meter.new -# m.measure(:string_operations) do -# m.measure(:ciao) do -# 1000.times do; "CIAO"*100; end -# end -# end -# m.measure(:string_operations) do -# m.measure(:help) do -# 1000.times do; "HELP"*100; end -# end -# end -# m.measure(:emtpy_loop) do -# 50000.times do; end; -# end -# m.measure(:rough_overhead_x10000) do -# 1000.times do -# m.measure(:block_1) do -# m.measure(:block_1_1) do -# end -# m.measure(:block_1_2) do -# m.measure(:block_1_2_1) do -# end -# m.measure(:block_1_2_2) do -# end -# m.measure(:block_1_2_3) do -# m.measure_result(:bool_exp_1_2_3) { false } -# m.measure_result(:bool_exp_1_2_3) { true } -# end -# end -# end -# end -# end -# -# m.measure(:sleep1) do -# m.measure(:sleep1_1) do -# sleep(0.01) -# end -# m.measure(:sleep_1_2) do -# sleep(0.02) -# end -# m.measure(:sleep_1_3) do -# sleep(0.03) -# end -# end -# m.measure(:empty) do -# end -# m.measure_result("test") { sleep(1) } -# m.measure_result("test") { false } -# m.measure_result("test") { false } -# -# m.method_meters(Array,[:sort,:reverse],[:new]) do -# Array.new(1000000,"abc").reverse.sort -# end -# -# puts m.report_simple -# end -# -# This sample outputs the following report (see notes)). -# -# measure path : percent% count user system total real -# -# \blocks : 100.000% 8014 1.040000 0.060000 1.100000 ( 2.167488) -# \empty : 0.000% 1 0.000000 0.000000 0.000000 ( 0.000005) -# \emtpy_loop : 0.130% 1 0.010000 0.000000 0.010000 ( 0.002825) -# \rough_overhead_x10000 : 49.354% 1 1.000000 0.060000 1.060000 ( 1.069733) -# \block_1 : 92.013% 1000 0.890000 0.050000 0.940000 ( 0.984297) -# \block_1_1 : 0.503% 1000 0.020000 0.000000 0.020000 ( 0.004951) -# \block_1_2 : 77.414% 1000 0.670000 0.040000 0.710000 ( 0.761979) -# \block_1_2_1 : 0.640% 1000 0.000000 0.010000 0.010000 ( 0.004880) -# \block_1_2_2 : 0.644% 1000 0.010000 0.000000 0.010000 ( 0.004904) -# \block_1_2_3 : 48.027% 1000 0.370000 0.020000 0.390000 ( 0.365958) -# \bool_exp_1_2_3 = "false" : 1.354% 1000 0.000000 0.000000 0.000000 ( 0.004956) -# \bool_exp_1_2_3 = "true" : 1.369% 1000 0.020000 0.000000 0.020000 ( 0.005012) -# \sleep1 : 2.868% 1 0.000000 0.000000 0.000000 ( 0.062157) -# \sleep1_1 : 17.808% 1 0.000000 0.000000 0.000000 ( 0.011069) -# \sleep_1_2 : 32.524% 1 0.000000 0.000000 0.000000 ( 0.020216) -# \sleep_1_3 : 49.090% 1 0.000000 0.000000 0.000000 ( 0.030513) -# \string_operations : 1.468% 2 0.030000 0.000000 0.030000 ( 0.031817) -# \ciao : 95.276% 1 0.030000 0.000000 0.030000 ( 0.030314) -# \help : 4.111% 1 0.000000 0.000000 0.000000 ( 0.001308) -# \test = "1" : 46.160% 1 0.000000 0.000000 0.000000 ( 1.000502) -# \test = "false" : 0.000% 2 0.000000 0.000000 0.000000 ( 0.000008) -# \methods : 100.000% 3 0.140000 0.010000 0.150000 ( 0.154880) -# \#<Class:Array> : 21.416% 1 0.030000 0.010000 0.040000 ( 0.033169) -# \new : 99.907% 1 0.030000 0.010000 0.040000 ( 0.033138) -# \Array : 78.489% 2 0.110000 0.000000 0.110000 ( 0.121563) -# \reverse : 38.671% 1 0.040000 0.000000 0.040000 ( 0.047010) -# \sort : 61.287% 1 0.070000 0.000000 0.070000 ( 0.074502) -# -# -# Note: the percentage in each line is calculated on the real time of the containing block. For example in the example -# -> block_1_1 takes 0.503% of the real time of block_1 -# -> block_1_2 takes 77.414% of the real time of block -# -# TODO: -# -# * Eliminate the overhead of the perf meter operations from the computation of times. +# https://github.com/lpasqualis/rubyperf # require 'perf/measure' require 'perf/meter' require 'perf/meter_factory'