rubyperf 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 1.0.0
@@ -0,0 +1,28 @@
1
+ require 'rubyperf'
2
+
3
+ module Perf
4
+ class Measure
5
+ attr_accessor :path
6
+ attr_accessor :count
7
+ attr_accessor :time
8
+ attr_accessor :measuring
9
+
10
+ def initialize(measure_path)
11
+ @path = measure_path
12
+ @count = 0
13
+ @time = Benchmark::Tms.new
14
+ @measuring = 0
15
+ end
16
+
17
+ def measuring?
18
+ @measuring>0
19
+ end
20
+
21
+ def merge(m)
22
+ @count += m.count
23
+ @time += m.time
24
+ @measuring += m.measuring
25
+ end
26
+
27
+ end
28
+ end
data/lib/perf/meter.rb CHANGED
@@ -20,13 +20,19 @@ module Perf
20
20
  METHOD_TYPE_CLASS = :class
21
21
 
22
22
  attr_accessor :measurements
23
- attr_accessor :current_stack
23
+ attr_accessor :current_path
24
24
 
25
25
  def initialize
26
- @measurements = {}
27
- @current_stack = []
26
+ @measurements = {} # A hash of Measure
27
+ @current_path = nil
28
28
  @instrumented_methods = {METHOD_TYPE_INSTANCE=>[],METHOD_TYPE_CLASS=>[]}
29
29
  @class_methods = []
30
+ #@overhead = nil
31
+ #@overhead = Benchmark.measure do
32
+ # measure(:a) {}
33
+ #end
34
+ #@overhead = nil
35
+ @measurements = {} # A hash of Measure
30
36
  end
31
37
 
32
38
  # Takes a description and a code block and measures the performance of the block.
@@ -69,15 +75,33 @@ module Perf
69
75
  # end
70
76
  #
71
77
 
72
- def measure(what,&code)
73
- path="#{PATH_MEASURES}\\#{get_current_path}"
74
- @current_stack.push what
78
+ def measure(what,root_path=PATH_MEASURES,&code)
79
+ current_path=@current_path
80
+ if @current_path.nil?
81
+ @current_path=root_path
82
+ root=get_measurement(@current_path)
83
+ else
84
+ root=nil
85
+ end
86
+ @current_path+= "\\#{what}"
87
+ res=nil
75
88
  begin
76
- res=measure_full_path(PATH_MEASURES) do
77
- measure_full_path("#{path}#{what}",&code)
89
+ m=get_measurement(@current_path)
90
+ m.count += 1
91
+ m.measuring +=1
92
+ if m.measuring>1
93
+ res=code.call
94
+ else
95
+ t = Benchmark.measure { res=code.call }
96
+ #t -= @overhead if @overhead
97
+ #if t.total>=0 && t.real>=0
98
+ m.time += t
99
+ root.time += t if root
100
+ #end
78
101
  end
79
102
  ensure
80
- @current_stack.pop
103
+ @current_path=current_path
104
+ m.measuring-=1
81
105
  end
82
106
  res
83
107
  end
@@ -104,7 +128,7 @@ module Perf
104
128
  #
105
129
 
106
130
  def measure_result(what,&code)
107
- res=measure(what,&code)
131
+ res=measure(what,PATH_MEASURES,&code)
108
132
  merge_measures(what,"#{what} = \"#{res.to_s}\"")
109
133
  res
110
134
  end
@@ -247,29 +271,10 @@ module Perf
247
271
  restore_all_class_methods(klass)
248
272
  end
249
273
 
250
- # Measures a block of code given a full path. Should not be called directly unless you know what you are doing.
251
-
252
- def measure_full_path(path,&code)
253
- m=get_measurement(path)
254
- m[:count] += 1
255
- if m[:measuring]
256
- res=code.call
257
- else
258
- res=nil
259
- m[:measuring] = true
260
- begin
261
- m[:time] += Benchmark.measure { res=code.call }
262
- ensure
263
- m[:measuring] = false
264
- end
265
- end
266
- res
267
- end
268
-
269
- private
274
+ protected
270
275
 
271
276
  def set_measurement(path,m)
272
- @measurements[path]=m
277
+ @measurements[path]=m if m.is_a? Perf::Measure
273
278
  end
274
279
 
275
280
  def get_current_path
@@ -277,14 +282,14 @@ private
277
282
  end
278
283
 
279
284
  def merge_measures(what_from,what_to)
280
- measurement_root = "#{PATH_MEASURES}\\#{get_current_path}"
281
- path_from = "#{measurement_root}#{what_from}"
282
- path_to = "#{measurement_root}#{what_to}"
285
+ path_from = "#{@current_path || PATH_MEASURES}\\#{what_from}"
286
+ path_to = "#{@current_path || PATH_MEASURES}\\#{what_to}"
287
+
283
288
  m_from = get_measurement(path_from)
284
289
  m_to = get_measurement(path_to)
285
- m_to[:time] += m_from[:time]
286
- m_to[:count] += m_from[:count]
287
- m_to[:measuring] ||= m_from[:measuring]
290
+
291
+ m_to.merge(m_from)
292
+
288
293
  clear_measurement(path_from)
289
294
  end
290
295
 
@@ -293,29 +298,19 @@ private
293
298
  end
294
299
 
295
300
  def get_measurement(path)
296
- @measurements[path] ||= {:count => 0,
297
- :time => Benchmark::Tms.new,
298
- :measuring => false}
301
+ @measurements[path] ||= Perf::Measure.new(path)
299
302
  end
300
303
 
301
304
  def measure_method_by_type(klass,method_name,type)
302
305
  unless @instrumented_methods[type].find{|x| x[:klass]==klass && x[:method]==method_name}
303
- klass_path="#{PATH_METHODS}\\#{klass}"
304
- m = get_measurement("#{klass_path}\\#{method_name}")
305
306
  old_method_symbol="rubyperf_org_#{method_name}".to_sym
306
- @instrumented_methods[type] << { :klass=>klass, :method=>method_name, :perf=>m, :org=>old_method_symbol }
307
- perf=self
307
+ @instrumented_methods[type] << { :klass=>klass, :method=>method_name, :org=>old_method_symbol }
308
308
  klass.send(:alias_method, old_method_symbol,method_name)
309
+ perf=self
309
310
  klass.send(:define_method,method_name) do |*args|
310
- res=nil
311
- m[:count] += 1
312
- t = perf.measure_full_path(PATH_METHODS) do
313
- perf.measure_full_path(klass_path) do
314
- Benchmark.measure{ res=self.send(old_method_symbol, *args) }
315
- end
316
- end
317
- m[:time] += t
318
- res
311
+ perf.measure("#{klass}.#{method_name}",PATH_METHODS) do
312
+ self.send(old_method_symbol, *args)
313
+ end
319
314
  end
320
315
  end
321
316
  end
@@ -8,11 +8,13 @@ module Perf
8
8
  # Simple Perf::Meter factory and singleton management.
9
9
  # Useful to not have to pass around Perf::Meter objects and still be able to generate stats in various parts of
10
10
  # the code.
11
- #
11
+
12
12
  class MeterFactory
13
13
 
14
14
  DEFAULT_METER = :default
15
15
 
16
+ @@perf_meters=nil
17
+
16
18
  # Returns a Perf::Meter with a given key, and creates it lazly if it doesn't exist'.
17
19
  def self.get(key=DEFAULT_METER)
18
20
  @@perf_meters ||= {}
@@ -3,6 +3,8 @@
3
3
  # https://github.com/lpasqualis/rubyperf
4
4
  #
5
5
 
6
+ require "rubyperf"
7
+
6
8
  module Perf
7
9
  #
8
10
  # This class can be used in substitution to a Perf::Meter class to avoid overhead when performance measurements is not
@@ -16,8 +18,6 @@ module Perf
16
18
  def clear
17
19
  end
18
20
 
19
- #############################################################################################################
20
-
21
21
  def measure(what,&code)
22
22
  yield
23
23
  end
@@ -55,6 +55,14 @@ module Perf
55
55
  yield
56
56
  end
57
57
 
58
+ def method_missing(method_sym, *arguments, &block)
59
+ if method_sym.to_s =~ /^report_(.*)$/
60
+ klass=Object.const_get("Perf").const_get("ReportFormat#{$1.capitalize}")
61
+ return klass.new.format(self) if klass
62
+ end
63
+ super
64
+ end
65
+
58
66
  end
59
67
 
60
68
  end
@@ -38,15 +38,15 @@ module Perf
38
38
  path = what.split("\\")
39
39
 
40
40
  max_title = title_len if title_len>max_title
41
- max_count = m[:count].to_s.length if m[:count].to_s.length>max_count
41
+ max_count = m.count.to_s.length if m.count.to_s.length>max_count
42
42
 
43
- total += m[:time] if path.size==2 # This calculates the max of the level-1 entries needed for the root entry.
43
+ total += m.time if path.size==2 # This calculates the max of the level-1 entries needed for the root entry.
44
44
  end
45
45
 
46
46
  totals=[total.real]
47
47
  depth=1
48
48
  keys_in_order.each do |what|
49
- m=perf.measurements[what]
49
+ m = perf.measurements[what]
50
50
  path = what.split("\\")
51
51
  if path.size-1 != depth
52
52
  if path.size-1 > depth
@@ -56,9 +56,9 @@ module Perf
56
56
  end
57
57
  depth=path.size-1
58
58
  end
59
- totals[totals.size-1] = m[:time].real
59
+ totals[totals.size-1] = m.time.real
60
60
  totals[totals.size-1] = MIN_TOTAL_TIME if totals[totals.size-1]<MIN_TOTAL_TIME
61
- percents[what]=(m[:time].real*100.0)/totals[totals.size-2]
61
+ percents[what]=(m.time.real*100.0)/totals[totals.size-2]
62
62
  end
63
63
 
64
64
  # Header
@@ -76,8 +76,8 @@ module Perf
76
76
  title = format_title(what,options)
77
77
  rep << format_measure(:title => title, :max_title => max_title,
78
78
  :percent => percents[what]||0.0,
79
- :count => m[:count], :max_count => max_count,
80
- :time => m[:time],
79
+ :count => m.count, :max_count => max_count,
80
+ :time => m.time,
81
81
  :options => options)
82
82
  end
83
83
 
@@ -9,8 +9,8 @@ require 'cgi'
9
9
  module Perf
10
10
  class ReportFormatHtml < ReportFormat
11
11
 
12
- PERCENT_FORMAT = "%.3f"
13
- INDENT = "&nbsp;"*3
12
+ PERCENT_FORMAT = "%.3f"
13
+ INDENT = "&nbsp;"*3
14
14
 
15
15
  def format_header(v)
16
16
  "<table class='rubyperf_report_format_html_table'><tr><th>#{v[:title]}</th><th>%</th><th>count</th><th>user</th><th>system</th><th>total</th><th>real</th></tr>"
data/lib/rubyperf.rb CHANGED
@@ -146,6 +146,7 @@
146
146
  # * Eliminate the overhead of the perf meter operations from the computation of times.
147
147
  #
148
148
 
149
+ require 'perf/measure'
149
150
  require 'perf/meter'
150
151
  require 'perf/meter_factory'
151
152
  require 'perf/no_op_meter'
data/rubyperf.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rubyperf}
8
- s.version = "0.1.0"
8
+ s.version = "1.0.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["lpasqualis"]
@@ -24,10 +24,10 @@ Gem::Specification.new do |s|
24
24
  "README.rdoc",
25
25
  "Rakefile",
26
26
  "VERSION",
27
+ "lib/perf/measure.rb",
27
28
  "lib/perf/meter.rb",
28
29
  "lib/perf/meter_factory.rb",
29
30
  "lib/perf/no_op_meter.rb",
30
- "lib/perf/noop_measure.rb",
31
31
  "lib/perf/report_format.rb",
32
32
  "lib/perf/report_format_html.rb",
33
33
  "lib/perf/report_format_simple.rb",
@@ -36,18 +36,20 @@ Gem::Specification.new do |s|
36
36
  "test/helper.rb",
37
37
  "test/perf_test_example.rb",
38
38
  "test/rubyperf_test_helpers.rb",
39
+ "test/test_meter_factory.rb",
39
40
  "test/test_perf_meter.rb"
40
41
  ]
41
42
  s.homepage = %q{http://github.com/lpasqualis/rubyperf}
42
43
  s.licenses = ["MIT"]
43
44
  s.require_paths = ["lib"]
44
- s.rubygems_version = %q{1.4.2}
45
+ s.rubygems_version = %q{1.3.6}
45
46
  s.summary = %q{A gem to measure ruby code performance}
46
47
 
47
48
  if s.respond_to? :specification_version then
49
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
48
50
  s.specification_version = 3
49
51
 
50
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
52
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
51
53
  s.add_development_dependency(%q<shoulda>, [">= 0"])
52
54
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
53
55
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
@@ -0,0 +1,50 @@
1
+ #
2
+ # Copyright (c) 2012 Lorenzo Pasqualis - DreamBox Learning, Inc
3
+ # https://github.com/lpasqualis/rubyperf
4
+ #
5
+
6
+ require "test/unit"
7
+
8
+ require 'helper'
9
+
10
+ require 'rubyperf'
11
+
12
+ require 'rubyperf_test_helpers'
13
+ require 'perf_test_example'
14
+
15
+ class TestPerfMeter < Test::Unit::TestCase
16
+
17
+ def test_basic
18
+ m1=Perf::MeterFactory.get()
19
+ m2=Perf::MeterFactory.get()
20
+
21
+ m1.measure(:a) {}
22
+ m1.measure(:b) {}
23
+
24
+ assert m1.eql?(m2)
25
+ assert_equal 3, m2.measurements.count
26
+ assert_equal 3, m1.measurements.count
27
+ assert_equal 1,Perf::MeterFactory.all.length
28
+
29
+ m3=Perf::MeterFactory.get(:some_meter)
30
+ m4=Perf::MeterFactory.get(:some_meter)
31
+
32
+ assert m3.eql? m4
33
+ assert !(m1.eql? m3)
34
+ assert_equal 2,Perf::MeterFactory.all.length
35
+
36
+ Perf::MeterFactory.clear_meter(:some_meter)
37
+ assert_equal 1,Perf::MeterFactory.all.length
38
+
39
+ Perf::MeterFactory.clear_all!
40
+ assert_equal 0,Perf::MeterFactory.all.length
41
+
42
+ ameter = Perf::Meter.new
43
+ Perf::MeterFactory.set_meter(:ameter,ameter)
44
+ assert (ameter.eql? Perf::MeterFactory.get(:ameter))
45
+
46
+ Perf::MeterFactory.set_default(ameter)
47
+ assert (ameter.eql? Perf::MeterFactory.get)
48
+ end
49
+
50
+ end
@@ -4,27 +4,24 @@
4
4
  #
5
5
 
6
6
  require "test/unit"
7
-
8
7
  require 'helper'
9
-
10
8
  require 'rubyperf'
11
-
12
9
  require 'rubyperf_test_helpers'
13
10
  require 'perf_test_example'
14
11
 
15
12
  class TestPerfMeter < Test::Unit::TestCase
16
13
 
17
- # Called before every test method runs. Can be used
18
- # to set up fixture information.
19
- def setup
20
- # Do nothing
21
- end
14
+ ALLOW_OUTPUT = false
22
15
 
23
- # Called after every test method runs. Can be used to tear
24
- # down fixture information.
16
+ def test_overhead
17
+ runs=3000
18
+ m=Perf::Meter.new
19
+ b1=Benchmark.measure { runs.times { m.measure(:a) { } }}
20
+ b2=Benchmark.measure {runs.times {} }
25
21
 
26
- def teardown
27
- # Do nothing
22
+ puts b1 if ALLOW_OUTPUT
23
+ puts b2 if ALLOW_OUTPUT
24
+ puts b1-b2 if ALLOW_OUTPUT
28
25
  end
29
26
 
30
27
  def test_method_not_corrupted_after_restoring
@@ -39,6 +36,7 @@ class TestPerfMeter < Test::Unit::TestCase
39
36
  end
40
37
  assert PerfTestExample.methods.sort == cmethods
41
38
  assert PerfTestExample.new.methods.sort == imethods
39
+ puts m.report_simple if ALLOW_OUTPUT
42
40
  end
43
41
 
44
42
  def test_method_metering
@@ -49,7 +47,7 @@ class TestPerfMeter < Test::Unit::TestCase
49
47
  a.test_np
50
48
  PerfTestExample.static_method
51
49
  end
52
- m.report_simple
50
+ puts m.report_simple if ALLOW_OUTPUT
53
51
  end
54
52
 
55
53
  def test_base_report
@@ -57,23 +55,28 @@ class TestPerfMeter < Test::Unit::TestCase
57
55
  m.measure(:a) { }
58
56
  m.measure(:b) { }
59
57
  m.measure(:d) { m.measure(:c) { m.measure(:d) {} }}
58
+
60
59
  assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\d\\c\\d"]
61
60
  assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\d\\c"]
62
61
  assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\d"]
63
62
  assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\b"]
64
63
  assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\a"]
65
64
  assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}"]
65
+ assert_equal 6,m.measurements.size
66
+
66
67
  assert_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\huh"]
67
68
  assert RubyperfTestHelpers.verify_report(m,["#{Perf::Meter::PATH_MEASURES}\\d\\c\\d",
68
69
  "#{Perf::Meter::PATH_MEASURES}\\d\\c",
69
70
  "#{Perf::Meter::PATH_MEASURES}\\d",
70
71
  "#{Perf::Meter::PATH_MEASURES}\\b",
71
72
  "#{Perf::Meter::PATH_MEASURES}"])
73
+ puts m.report_simple if ALLOW_OUTPUT
72
74
  end
73
75
 
74
76
  def test_output_html
75
77
  m=RubyperfTestHelpers.get_measure
76
- m.report_html
78
+ htmlcode=m.report_html
79
+ puts htmlcode if ALLOW_OUTPUT
77
80
  end
78
81
 
79
82
  def test_exception_handling
@@ -86,20 +89,23 @@ class TestPerfMeter < Test::Unit::TestCase
86
89
 
87
90
  begin
88
91
  m.measure(:some_exception) do
92
+ sleep 0.2
89
93
  a=12/0 # Divide by zero
94
+ sleep 0.2
90
95
  end
91
96
  rescue
92
97
  exception_raised=true
93
98
  ensure
94
99
  measuring_correct=true
95
100
  m.measurements.each_pair do |_,x|
96
- measuring_correct=false if x[:measuring]
101
+ measuring_correct=false if x.measuring?
97
102
  end
98
- stack_correct = (m.current_stack.size==0)
103
+ stack_correct = m.current_path.nil?
99
104
  end
100
105
  assert exception_raised
101
106
  assert measuring_correct
102
107
  assert stack_correct
108
+ puts m.report_simple if ALLOW_OUTPUT
103
109
  end
104
110
 
105
111
  def test_return_values
@@ -110,6 +116,13 @@ class TestPerfMeter < Test::Unit::TestCase
110
116
 
111
117
  assert_equal 5,m.measure_result(:five) {5}
112
118
  assert_equal "byebye",m.measure_result(:byebye) {"bye"+"bye"}
119
+
120
+ m.measure(:in_here_too) do
121
+ assert_equal 5,m.measure_result(:five) {5}
122
+ assert_equal "byebye",m.measure_result(:byebye) {"bye"+"bye"}
123
+ end
124
+
125
+ puts m.report_simple if ALLOW_OUTPUT
113
126
  end
114
127
 
115
128
  def test_nesting_measure
@@ -124,6 +137,7 @@ class TestPerfMeter < Test::Unit::TestCase
124
137
  assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\a"]
125
138
  assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}"]
126
139
  assert_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\huh"]
140
+ puts m.report_simple if ALLOW_OUTPUT
127
141
  end
128
142
 
129
143
  def test_measure_instance_method
@@ -166,6 +180,7 @@ class TestPerfMeter < Test::Unit::TestCase
166
180
  a.test_np
167
181
  #puts puts m.report_simple
168
182
  m.restore_all_methods(PerfTestExample)
183
+ puts m.report_simple if ALLOW_OUTPUT
169
184
  end
170
185
 
171
186
  def test_basic
@@ -223,5 +238,7 @@ class TestPerfMeter < Test::Unit::TestCase
223
238
  Array.new(1000000,"abc").reverse.sort
224
239
  end
225
240
 
241
+ puts m.report_simple if ALLOW_OUTPUT
242
+
226
243
  end
227
244
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubyperf
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
5
- prerelease:
4
+ prerelease: false
6
5
  segments:
7
- - 0
8
6
  - 1
9
7
  - 0
10
- version: 0.1.0
8
+ - 0
9
+ segments_generated: true
10
+ version: 1.0.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - lpasqualis
@@ -20,62 +20,58 @@ default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  prerelease: false
23
- name: shoulda
24
23
  type: :development
24
+ name: shoulda
25
25
  version_requirements: &id001 !ruby/object:Gem::Requirement
26
- none: false
27
26
  requirements:
28
27
  - - ">="
29
28
  - !ruby/object:Gem::Version
30
- hash: 3
31
29
  segments:
32
30
  - 0
31
+ segments_generated: true
33
32
  version: "0"
34
33
  requirement: *id001
35
34
  - !ruby/object:Gem::Dependency
36
35
  prerelease: false
37
- name: bundler
38
36
  type: :development
37
+ name: bundler
39
38
  version_requirements: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
39
  requirements:
42
40
  - - ~>
43
41
  - !ruby/object:Gem::Version
44
- hash: 23
45
42
  segments:
46
43
  - 1
47
44
  - 0
48
45
  - 0
46
+ segments_generated: true
49
47
  version: 1.0.0
50
48
  requirement: *id002
51
49
  - !ruby/object:Gem::Dependency
52
50
  prerelease: false
53
- name: jeweler
54
51
  type: :development
52
+ name: jeweler
55
53
  version_requirements: &id003 !ruby/object:Gem::Requirement
56
- none: false
57
54
  requirements:
58
55
  - - ~>
59
56
  - !ruby/object:Gem::Version
60
- hash: 7
61
57
  segments:
62
58
  - 1
63
59
  - 6
64
60
  - 4
61
+ segments_generated: true
65
62
  version: 1.6.4
66
63
  requirement: *id003
67
64
  - !ruby/object:Gem::Dependency
68
65
  prerelease: false
69
- name: rcov
70
66
  type: :development
67
+ name: rcov
71
68
  version_requirements: &id004 !ruby/object:Gem::Requirement
72
- none: false
73
69
  requirements:
74
70
  - - ">="
75
71
  - !ruby/object:Gem::Version
76
- hash: 3
77
72
  segments:
78
73
  - 0
74
+ segments_generated: true
79
75
  version: "0"
80
76
  requirement: *id004
81
77
  description: Measures the performance of blocks of code, and provide reporting in various formats
@@ -95,10 +91,10 @@ files:
95
91
  - README.rdoc
96
92
  - Rakefile
97
93
  - VERSION
94
+ - lib/perf/measure.rb
98
95
  - lib/perf/meter.rb
99
96
  - lib/perf/meter_factory.rb
100
97
  - lib/perf/no_op_meter.rb
101
- - lib/perf/noop_measure.rb
102
98
  - lib/perf/report_format.rb
103
99
  - lib/perf/report_format_html.rb
104
100
  - lib/perf/report_format_simple.rb
@@ -107,6 +103,7 @@ files:
107
103
  - test/helper.rb
108
104
  - test/perf_test_example.rb
109
105
  - test/rubyperf_test_helpers.rb
106
+ - test/test_meter_factory.rb
110
107
  - test/test_perf_meter.rb
111
108
  has_rdoc: true
112
109
  homepage: http://github.com/lpasqualis/rubyperf
@@ -118,27 +115,25 @@ rdoc_options: []
118
115
  require_paths:
119
116
  - lib
120
117
  required_ruby_version: !ruby/object:Gem::Requirement
121
- none: false
122
118
  requirements:
123
119
  - - ">="
124
120
  - !ruby/object:Gem::Version
125
- hash: 3
126
121
  segments:
127
122
  - 0
123
+ segments_generated: true
128
124
  version: "0"
129
125
  required_rubygems_version: !ruby/object:Gem::Requirement
130
- none: false
131
126
  requirements:
132
127
  - - ">="
133
128
  - !ruby/object:Gem::Version
134
- hash: 3
135
129
  segments:
136
130
  - 0
131
+ segments_generated: true
137
132
  version: "0"
138
133
  requirements: []
139
134
 
140
135
  rubyforge_project:
141
- rubygems_version: 1.4.2
136
+ rubygems_version: 1.3.6
142
137
  signing_key:
143
138
  specification_version: 3
144
139
  summary: A gem to measure ruby code performance
@@ -1,39 +0,0 @@
1
- #
2
- # Copyright (c) 2012 Lorenzo Pasqualis - DreamBox Learning, Inc
3
- # https://github.com/lpasqualis/rubyperf
4
- #
5
-
6
- module Perf
7
- #
8
- # This class can be used in substitution to a Perf::Measure class to avoid overhead when performance measurments is not
9
- # required. It needs to maintain the same API as Perf::Measure.
10
- #
11
- class NoopMeasure
12
-
13
- def measurements
14
- {}
15
- end
16
-
17
- def current_stack
18
- {}
19
- end
20
-
21
- def initialize(logger = nil)
22
- end
23
-
24
- def clear
25
- end
26
-
27
- #############################################################################################################
28
-
29
- def measure(what,type=nil)
30
- yield
31
- end
32
-
33
- def count_value(what_to_count)
34
- nil
35
- end
36
-
37
- end
38
-
39
- end