rubyperf 0.1.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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