benelux 0.5.0 → 0.5.1

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/CHANGES.txt CHANGED
@@ -1,5 +1,15 @@
1
1
  BENELUX, CHANGES
2
2
 
3
+ #### 0.5.1 (2009-10-29) ###############################
4
+
5
+ * FIXED: Timeline#clear
6
+ * ADDED: Thread#rotate_timeline
7
+ * ADDED: Stats#clear
8
+
9
+
10
+ #### 0.5.0 (2009-10-21) ###############################
11
+
12
+ * CHANGE: Do not use global timeline, update from dead threads.
3
13
 
4
14
  #### 0.4.4 (2009-10-20) ###############################
5
15
 
data/benelux.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  @spec = Gem::Specification.new do |s|
2
2
  s.name = "benelux"
3
3
  s.rubyforge_project = 'benelux'
4
- s.version = "0.5.0"
4
+ s.version = "0.5.1"
5
5
  s.summary = "Benelux: Little freakin' timers for your Ruby codes"
6
6
  s.description = s.summary
7
7
  s.author = "Delano Mandelbaum"
@@ -24,7 +24,6 @@
24
24
  Rakefile
25
25
  benelux.gemspec
26
26
  lib/benelux.rb
27
- lib/benelux/count.rb
28
27
  lib/benelux/mark.rb
29
28
  lib/benelux/mixins/symbol.rb
30
29
  lib/benelux/mixins/thread.rb
@@ -40,7 +39,6 @@
40
39
  lib/selectable/tags.rb
41
40
  tryouts/10_stats_tryouts.rb
42
41
  tryouts/11_selectable_tryouts.rb
43
- tryouts/12_selectable_global_tryouts.rb
44
42
  tryouts/20_tracks_tryouts.rb
45
43
  tryouts/30_reporter_tryouts.rb
46
44
  tryouts/30_timeline_tryouts.rb
data/lib/benelux.rb CHANGED
@@ -5,7 +5,7 @@ require 'thwait'
5
5
  require 'selectable'
6
6
 
7
7
  module Benelux
8
- VERSION = "0.5.0"
8
+ VERSION = "0.5.1"
9
9
  NOTSUPPORTED = [Class, Object, Kernel]
10
10
 
11
11
  class BeneluxError < RuntimeError; end
@@ -15,7 +15,6 @@ module Benelux
15
15
  class BadRecursion < BeneluxError; end
16
16
 
17
17
  require 'benelux/mark'
18
- require 'benelux/count'
19
18
  require 'benelux/track'
20
19
  require 'benelux/range'
21
20
  require 'benelux/stats'
@@ -65,8 +64,9 @@ module Benelux
65
64
  name = Thread.current.track_name
66
65
  else
67
66
  Thread.current.track_name = name
68
- Thread.current.timeline ||= Benelux::Timeline.new
69
67
  @@mutex.synchronize do
68
+ Thread.current.timeline ||= Benelux::Timeline.new
69
+ Thread.current.rotated_timelines ||= []
70
70
  @tracks[name] ||= Track.new(name, group)
71
71
  @tracks[name].add_thread Thread.current
72
72
  @known_threads << Thread.current
@@ -78,12 +78,26 @@ module Benelux
78
78
 
79
79
  # Only updates data from threads that are dead
80
80
  def Benelux.update_global_timeline
81
- dthreads = Benelux.known_threads.select { |t|
82
- !t.timeline.nil? && (t.nil? || !t.status)
83
- }
84
- # We don't need to make a special case for the
85
- # current thread b/c the current is not dead.
86
- Benelux.timeline.merge! *dthreads.collect { |t| t.timeline }
81
+ @@mutex.synchronize do
82
+ dthreads = Benelux.known_threads.select { |t|
83
+ !t.timeline.nil? && (t.nil? || !t.status)
84
+ }
85
+ # Threads that have rotated timelines
86
+ rthreads = Benelux.known_threads.select { |t|
87
+ !t.rotated_timelines.empty?
88
+ }
89
+ dtimelines = dthreads.collect { |t| t.timeline }
90
+ # Also get all rotated timelines.
91
+ rthreads.each { |t|
92
+ # We loop carefully through the rotated timelines
93
+ # incase something was added while we're working.
94
+ while !t.rotated_timelines.empty?
95
+ dtimelines.push t.rotated_timelines.shift
96
+ end
97
+ }
98
+ tl = Benelux.timeline.merge! *dtimelines
99
+ tl
100
+ end
87
101
  end
88
102
 
89
103
  # Thread tags become the default for any new Mark or Range.
@@ -149,6 +163,50 @@ end
149
163
 
150
164
 
151
165
  __END__
166
+ 0.5.0:
167
+ ruby -rprofile bin/stella generate -p examples/essentials/plan.rb -c 200 -d 2m localhost:3114
168
+ Summary:
169
+ max clients: 200
170
+ repetitions: 9
171
+ test time: 117.97s
172
+ post time: 156.50s
173
+
174
+ % cumulative self self total
175
+ time seconds seconds calls ms/call ms/call name
176
+ 32.38 71.88 71.88 200 359.40 359.40 Thread#join
177
+ 9.63 93.25 21.37 166149 0.13 0.20 Selectable::Tags#==
178
+ 8.79 112.77 19.52 166149 0.12 0.69 Selectable::Tags#>=
179
+ 8.42 131.47 18.70 170598 0.11 0.31 Kernel.send
180
+ 4.38 141.19 9.72 166149 0.06 0.39 Selectable::Tags#<=>
181
+ 4.31 150.75 9.56 50641 0.19 0.25 Benelux::Stats::Calculator#merge!
182
+ 3.74 159.06 8.31 296362 0.03 0.03 Hash#values
183
+ 3.03 165.78 6.72 556828 0.01 0.01 Array#size
184
+ 2.61 171.57 5.79 166150 0.03 0.05 Array#&
185
+ 2.25 176.57 5.00 36169 0.14 0.28 Selectable::Tags#compare_Array
186
+ 1.56 180.04 3.47 332505 0.01 0.01 Fixnum#>=
187
+ 1.53 183.44 3.40 4224 0.80 26.52 Array#each
188
+ 1.32 186.37 2.93 166476 0.02 0.02 Kernel.is_a?
189
+ 0.96 188.50 2.13 172011 0.01 0.01 Kernel.class
190
+ 0.84 190.36 1.86 50641 0.04 0.05 Selectable::Object.add_tags_quick
191
+ 0.83 192.21 1.85 14466 0.13 0.17 Selectable::Tags#compare_Hash
192
+ 0.80 193.98 1.77 170551 0.01 0.01 Module#to_s
193
+ 0.79 195.73 1.75 152534 0.01 0.01 Float#+
194
+ 0.71 197.31 1.58 166192 0.01 0.01 String#intern
195
+ 0.64 198.74 1.43 54292 0.03 0.03 Numeric#eql?
196
+ 0.63 200.14 1.40 83392 0.02 0.02 String#eql?
197
+ 0.53 201.31 1.17 130778 0.01 0.01 Fixnum#==
198
+ 0.35 202.09 0.78 7310 0.11 0.15 Enumerable.member?
199
+ 0.32 202.81 0.72 35940 0.02 0.02 Hash#==
200
+ 0.30 203.48 0.67 201 3.33 6.37 Thread#new
201
+ 0.29 204.12 0.64 11 58.18 70.00 Array#collect
202
+ 0.27 204.73 0.61 35940 0.02 0.02 Hash#size
203
+ 0.27 205.34 0.61 201 3.03 3.03 Thread#initialize
204
+ 0.21 205.80 0.46 13901 0.03 0.03 Fixnum#>
205
+ 0.21 206.26 0.46 202 2.28 7.08 Kernel.require
206
+ 0.20 206.70 0.44 50681 0.01 0.01 Hash#merge!
207
+ 0.16 207.05 0.35 2666 0.13 0.13 Array#push
208
+
209
+ 0.4.2 and Earlier:
152
210
  % cumulative self self total
153
211
  time seconds seconds calls ms/call ms/call name
154
212
  33.04 40.39 40.39 832483 0.05 0.10 Selectable::Tags#==
@@ -4,4 +4,11 @@ class Thread
4
4
  extend Attic
5
5
  attic :timeline
6
6
  attic :track_name
7
+ attic :rotated_timelines
8
+ def rotate_timeline
9
+ prev = self.timeline
10
+ self.timeline = Benelux::Timeline.new
11
+ self.rotated_timelines << prev
12
+ self.timeline
13
+ end
7
14
  end
data/lib/benelux/stats.rb CHANGED
@@ -15,6 +15,10 @@ module Benelux
15
15
  g.name = name
16
16
  g
17
17
  end
18
+ def clear
19
+ each { |g| g.clear }
20
+ @names.clear
21
+ end
18
22
  def size
19
23
  @names.size
20
24
  end
@@ -19,7 +19,6 @@ module Benelux
19
19
  #
20
20
  class Timeline < Array
21
21
  include Selectable
22
-
23
22
  attr_accessor :ranges
24
23
  attr_accessor :stats
25
24
  attr_accessor :default_tags
@@ -44,6 +43,10 @@ module Benelux
44
43
  @default_tags[:track]
45
44
  end
46
45
 
46
+ def dump
47
+
48
+ end
49
+
47
50
  def duration
48
51
  self.last - self.first
49
52
  end
@@ -120,6 +123,7 @@ module Benelux
120
123
 
121
124
  def clear
122
125
  @ranges.clear
126
+ @stats.clear
123
127
  super
124
128
  end
125
129
 
@@ -20,87 +20,3 @@ tryouts "Tracks" do
20
20
  end
21
21
 
22
22
  end
23
-
24
- __END__
25
- # OLD (0.3):
26
-
27
- tryouts "Essentials" do
28
-
29
- setup do
30
- class ::Sleeper
31
- def do_something() sleep rand/3 end
32
- def another_method(t) t*2 end
33
- end
34
- end
35
-
36
- drill "Add timers to existing objects", true do
37
- Benelux.add_timer Sleeper, :do_something
38
- Sleeper.new.respond_to? :timeline
39
- end
40
-
41
- dream :class, SelectableArray
42
- dream :size, 1
43
- dream :proc, lambda { |obj|
44
- pm = obj.first
45
- pm.class == Benelux::MethodTimer &&
46
- pm.meth == :do_something &&
47
- pm.klass == Sleeper
48
- }
49
- drill "Keeps a list of modified methods" do
50
- Benelux.packed_methods
51
- end
52
-
53
- drill "Knows what a timer has been defined", true do
54
- Benelux.timed_method? :Sleeper, :do_something
55
- end
56
-
57
- drill "Knows what a timer has not been defined", false do
58
- Benelux.timed_method? :Sleeper, :no_such_method
59
- end
60
-
61
- dream :class, SelectableArray
62
- drill "A Benelux object has a timed_methods method" do
63
- s = Sleeper.new
64
- s.do_something
65
- s.timed_methods
66
- end
67
-
68
- end
69
-
70
- tryouts "Counters" do
71
- setup do
72
- class ::Sleeper
73
- def do_something() sleep rand/3 end
74
- def another_method(t) t*2 end
75
- end
76
- end
77
- drill "Add timers to existing objects", true do
78
- Benelux.add_counter Sleeper, :another_method do |args,ret|
79
- ret
80
- end
81
- Sleeper.new.respond_to? :timeline
82
- end
83
- dream :kind_of?, Benelux::MethodPacker
84
- drill "Can get specific packed method" do
85
- Benelux.packed_method Sleeper, :another_method
86
- end
87
-
88
- dream :class, Benelux::Count
89
- dream :name, :another_method
90
- dream :to_i, 2000
91
- drill "Run counter" do
92
- a = Sleeper.new
93
- a.another_method(1000)
94
- pm = Benelux.packed_method Sleeper, :another_method
95
- Benelux.thread_timeline.counts.first
96
- end
97
- end
98
-
99
- xtryouts "Not supported" do
100
-
101
- dream :exception, Benelux::NotSupported
102
- drill "Class is not supported" do
103
- Benelux.add_timer Class, :new
104
- end
105
-
106
- end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: benelux
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Delano Mandelbaum
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-21 00:00:00 -04:00
12
+ date: 2009-10-29 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -39,7 +39,6 @@ files:
39
39
  - Rakefile
40
40
  - benelux.gemspec
41
41
  - lib/benelux.rb
42
- - lib/benelux/count.rb
43
42
  - lib/benelux/mark.rb
44
43
  - lib/benelux/mixins/symbol.rb
45
44
  - lib/benelux/mixins/thread.rb
@@ -55,7 +54,6 @@ files:
55
54
  - lib/selectable/tags.rb
56
55
  - tryouts/10_stats_tryouts.rb
57
56
  - tryouts/11_selectable_tryouts.rb
58
- - tryouts/12_selectable_global_tryouts.rb
59
57
  - tryouts/20_tracks_tryouts.rb
60
58
  - tryouts/30_reporter_tryouts.rb
61
59
  - tryouts/30_timeline_tryouts.rb
@@ -91,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
89
  requirements: []
92
90
 
93
91
  rubyforge_project: benelux
94
- rubygems_version: 1.3.2
92
+ rubygems_version: 1.3.3
95
93
  signing_key:
96
94
  specification_version: 3
97
95
  summary: "Benelux: Little freakin' timers for your Ruby codes"
data/lib/benelux/count.rb DELETED
@@ -1,29 +0,0 @@
1
- module Benelux
2
-
3
- class Count
4
- include Selectable::Object
5
- attr_accessor :name
6
- def initialize(name, count)
7
- @name, @count = name, count
8
- end
9
- def track
10
- @tags[:track]
11
- end
12
- def inspect
13
- "#<%s:%s count=%d name=%s %s>" % [self.class, hexoid, self.to_i, name, tags]
14
- end
15
- def to_i
16
- @count.to_i
17
- end
18
- def to_s
19
- @count.to_s
20
- end
21
- def ==(other)
22
- self.class == other.class &&
23
- self.name == other.name &&
24
- self.tags == other.tags &&
25
- @count.to_i == other.to_i
26
- end
27
-
28
- end
29
- end
@@ -1,23 +0,0 @@
1
- #
2
- # group "Benelux"
3
- #
4
- # library :benelux, 'lib'
5
- # tryouts "Selectable::Global" do
6
- # set :bast, Benelux::Counts.new
7
- # setup do
8
- #
9
- # end
10
- #
11
- # dream :class, Benelux::Counts
12
- # dream :names, [:group1, :group2]
13
- # drill "Add groups" do
14
- # bast.add_group :group1, :group2
15
- # bast
16
- # end
17
- #
18
- # drill "Add objects to groups", true do
19
- # bast.send(:group1).class
20
- # bast.class.group_class
21
- # end
22
- #
23
- # end