benelux 0.5.17 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.txt +3 -2
- data/benelux.gemspec +2 -12
- data/lib/benelux.rb +11 -17
- data/lib/benelux/mixins.rb +3 -3
- data/lib/benelux/packer.rb +7 -4
- data/lib/benelux/stats.rb +2 -2
- data/lib/benelux/track.rb +18 -3
- data/lib/selectable.rb +4 -0
- data/lib/selectable/tags.rb +1 -1
- metadata +21 -15
- data/tryouts/10_stats_tryouts.rb +0 -66
- data/tryouts/11_selectable_tryouts.rb +0 -92
- data/tryouts/20_tracks_tryouts.rb +0 -22
- data/tryouts/30_reporter_tryouts.rb +0 -34
- data/tryouts/30_timeline_tryouts.rb +0 -60
- data/tryouts/benelux_bm.rb +0 -9
- data/tryouts/proofs/alias_performance.rb +0 -33
- data/tryouts/proofs/array_performance.rb +0 -57
- data/tryouts/proofs/thread_array.rb +0 -49
- data/tryouts/proofs/timer_threading.rb +0 -30
data/CHANGES.txt
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
BENELUX, CHANGES
|
2
2
|
|
3
|
-
#### 0.5.17 (2011-02-26) ##############################
|
4
3
|
|
5
|
-
|
4
|
+
#### 0.6.0 (2010-09-05) ##############################
|
5
|
+
|
6
|
+
* CHANGE: Thread now belongs to Track (previously reversed)
|
6
7
|
|
7
8
|
#### 0.5.16 (2010-06-08) ##############################
|
8
9
|
|
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.
|
4
|
+
s.version = "0.6.0"
|
5
5
|
s.summary = "Benelux: A mad way to time Ruby codes"
|
6
6
|
s.description = s.summary
|
7
7
|
s.author = "Delano Mandelbaum"
|
@@ -13,7 +13,7 @@
|
|
13
13
|
s.rdoc_options = ["--line-numbers", "--title", s.summary, "--main", "README.rdoc"]
|
14
14
|
s.require_paths = %w[lib]
|
15
15
|
|
16
|
-
s.add_dependency("storable", [">= 0.
|
16
|
+
s.add_dependency("storable", [">= 0.8.0"])
|
17
17
|
|
18
18
|
# = MANIFEST =
|
19
19
|
# git ls-files
|
@@ -35,16 +35,6 @@
|
|
35
35
|
lib/selectable/global.rb
|
36
36
|
lib/selectable/object.rb
|
37
37
|
lib/selectable/tags.rb
|
38
|
-
tryouts/10_stats_tryouts.rb
|
39
|
-
tryouts/11_selectable_tryouts.rb
|
40
|
-
tryouts/20_tracks_tryouts.rb
|
41
|
-
tryouts/30_reporter_tryouts.rb
|
42
|
-
tryouts/30_timeline_tryouts.rb
|
43
|
-
tryouts/benelux_bm.rb
|
44
|
-
tryouts/proofs/alias_performance.rb
|
45
|
-
tryouts/proofs/array_performance.rb
|
46
|
-
tryouts/proofs/thread_array.rb
|
47
|
-
tryouts/proofs/timer_threading.rb
|
48
38
|
)
|
49
39
|
|
50
40
|
|
data/lib/benelux.rb
CHANGED
@@ -5,7 +5,7 @@ require 'selectable'
|
|
5
5
|
require 'storable'
|
6
6
|
|
7
7
|
module Benelux
|
8
|
-
VERSION = "0.
|
8
|
+
VERSION = "0.6.0"
|
9
9
|
NOTSUPPORTED = [Class, Object, Kernel]
|
10
10
|
|
11
11
|
class BeneluxError < RuntimeError; end
|
@@ -66,15 +66,13 @@ module Benelux
|
|
66
66
|
# If +track+ is nil, it returns the Track object for the
|
67
67
|
# Track associated to the current thread.
|
68
68
|
#
|
69
|
-
def Benelux.current_track(name=nil,
|
69
|
+
def Benelux.current_track(name=nil,timeline=nil)
|
70
70
|
if name.nil?
|
71
71
|
name = Thread.current.track_name
|
72
72
|
else
|
73
73
|
Thread.current.track_name = name
|
74
74
|
@@mutex.synchronize do
|
75
|
-
Thread.current.timeline
|
76
|
-
Thread.current.rotated_timelines ||= []
|
77
|
-
@tracks[name] ||= Track.new(name, group)
|
75
|
+
@tracks[name] ||= Track.new(name, timeline || Thread.current.timeline || Benelux::Timeline.new)
|
78
76
|
@tracks[name].add_thread Thread.current
|
79
77
|
@known_threads << Thread.current
|
80
78
|
end
|
@@ -83,6 +81,14 @@ module Benelux
|
|
83
81
|
end
|
84
82
|
Benelux.current_track :main
|
85
83
|
|
84
|
+
def Benelux.merge_tracks
|
85
|
+
tl = Benelux::Timeline.new
|
86
|
+
tracks.each_pair do |trackid,track|
|
87
|
+
tl.merge! track.timeline
|
88
|
+
end
|
89
|
+
tl
|
90
|
+
end
|
91
|
+
|
86
92
|
# Only updates data from threads that
|
87
93
|
# are dead and rotated timelines.
|
88
94
|
def Benelux.update_global_timeline
|
@@ -115,18 +121,6 @@ module Benelux
|
|
115
121
|
end
|
116
122
|
end
|
117
123
|
|
118
|
-
# Thread tags become the default for any new Mark or Range.
|
119
|
-
def Benelux.add_thread_tags(args=Selectable::Tags.new)
|
120
|
-
Benelux.thread_timeline.add_default_tags args
|
121
|
-
end
|
122
|
-
def Benelux.add_thread_tag(*args) add_thread_tags *args end
|
123
|
-
|
124
|
-
def Benelux.remove_thread_tags(*args)
|
125
|
-
Benelux.thread_timeline.remove_default_tags *args
|
126
|
-
end
|
127
|
-
def Benelux.remove_thread_tag(*args) remove_thread_tags *args end
|
128
|
-
|
129
|
-
|
130
124
|
def Benelux.inspect
|
131
125
|
str = ["Benelux"]
|
132
126
|
str << "tracks:" << Benelux.tracks.inspect
|
data/lib/benelux/mixins.rb
CHANGED
@@ -23,9 +23,9 @@ end
|
|
23
23
|
|
24
24
|
class Thread
|
25
25
|
extend Attic
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
attic :timeline
|
27
|
+
attic :track_name
|
28
|
+
attic :rotated_timelines
|
29
29
|
def rotate_timeline
|
30
30
|
self.rotated_timelines << self.timeline
|
31
31
|
tags = self.timeline.default_tags.clone
|
data/lib/benelux/packer.rb
CHANGED
@@ -116,18 +116,21 @@ module Benelux
|
|
116
116
|
def generate_packed_method
|
117
117
|
%Q{
|
118
118
|
def #{@meth}(*args, &block)
|
119
|
+
#p ["#{@meth} 1"]
|
119
120
|
call_id = "" << self.object_id.abs.to_s << args.object_id.abs.to_s
|
120
121
|
Benelux.current_track :global unless Benelux.known_thread?
|
121
|
-
mark_a = Benelux.
|
122
|
+
mark_a = Benelux.current_track.timeline.add_mark :'#{@aliaz}_a'
|
122
123
|
mark_a.add_tag :call_id => call_id
|
123
124
|
tags = mark_a.tags
|
124
125
|
ret = #{@methorig}(*args, &block)
|
126
|
+
#p ["#{@meth} 2"]
|
127
|
+
ret
|
125
128
|
rescue => ex # We do this so we can use
|
126
129
|
raise ex # ex in the ensure block.
|
127
130
|
ensure
|
128
|
-
mark_z = Benelux.
|
131
|
+
mark_z = Benelux.current_track.timeline.add_mark :'#{@aliaz}_z'
|
129
132
|
mark_z.tags = tags # In case tags were added between these marks
|
130
|
-
range = Benelux.
|
133
|
+
range = Benelux.current_track.timeline.add_range :'#{@aliaz}', mark_a, mark_z
|
131
134
|
range.exception = ex if defined?(ex) && !ex.nil?
|
132
135
|
end
|
133
136
|
}
|
@@ -149,7 +152,7 @@ module Benelux
|
|
149
152
|
ret = #{@methorig}(*args, &block)
|
150
153
|
count = cmd.determine_count(args, ret)
|
151
154
|
#Benelux.ld "COUNT(:#{@meth}): \#{count}"
|
152
|
-
Benelux.
|
155
|
+
Benelux.current_track.timeline.add_count :'#{@meth}', count
|
153
156
|
ret
|
154
157
|
end
|
155
158
|
}
|
data/lib/benelux/stats.rb
CHANGED
@@ -151,11 +151,11 @@ module Benelux
|
|
151
151
|
@min, @max = 0.0, 0.0
|
152
152
|
end
|
153
153
|
|
154
|
-
def samples(*args)
|
154
|
+
def samples(*args)
|
155
155
|
args.flatten.each { |s| sample(s) }
|
156
156
|
end
|
157
157
|
|
158
|
-
def merge!(other)
|
158
|
+
def merge!(other)
|
159
159
|
return self if other.n == 0
|
160
160
|
if @n == 0
|
161
161
|
@min, @max = other.min, other.max
|
data/lib/benelux/track.rb
CHANGED
@@ -5,9 +5,11 @@ module Benelux
|
|
5
5
|
attr_reader :name
|
6
6
|
attr_reader :thread_group
|
7
7
|
attr_reader :timeline
|
8
|
-
|
9
|
-
|
10
|
-
@
|
8
|
+
attr_reader :rotated_timelines
|
9
|
+
def initialize(n,t)
|
10
|
+
@name, @thgrp = n, ThreadGroup.new
|
11
|
+
@timeline = t || Benelux::Timeline.new
|
12
|
+
@rotated_timelines = []
|
11
13
|
end
|
12
14
|
def add_thread(t=Thread.current)
|
13
15
|
@thgrp.add t
|
@@ -16,5 +18,18 @@ module Benelux
|
|
16
18
|
def threads
|
17
19
|
@thgrp.list
|
18
20
|
end
|
21
|
+
def add_tags(args=Selectable::Tags.new)
|
22
|
+
timeline.add_default_tags args
|
23
|
+
end
|
24
|
+
def remove_tags(*args)
|
25
|
+
timeline.remove_default_tags *args
|
26
|
+
end
|
27
|
+
##def rotate_timeline
|
28
|
+
## self.rotated_timelines << self.timeline
|
29
|
+
## tags = self.timeline.default_tags.clone
|
30
|
+
## self.timeline = Benelux::Timeline.new
|
31
|
+
## self.timeline.default_tags = tags
|
32
|
+
## self.timeline
|
33
|
+
##end
|
19
34
|
end
|
20
35
|
end
|
data/lib/selectable.rb
CHANGED
data/lib/selectable/tags.rb
CHANGED
@@ -78,7 +78,7 @@ module Selectable
|
|
78
78
|
end
|
79
79
|
|
80
80
|
def method_missing(meth, *args)
|
81
|
-
raise SelectableError, "#{meth}: #{args.first} is not a Hash or Array"
|
81
|
+
raise SelectableError, "#{meth}: #{args.first} is not a Hash or Array #{self}"
|
82
82
|
end
|
83
83
|
|
84
84
|
## NOTE: This is helpful but defensive. Ponder!
|
metadata
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: benelux
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
4
|
+
hash: 7
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 6
|
9
|
+
- 0
|
10
|
+
version: 0.6.0
|
6
11
|
platform: ruby
|
7
12
|
authors:
|
8
13
|
- Delano Mandelbaum
|
@@ -10,7 +15,7 @@ autorequire:
|
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
17
|
|
13
|
-
date:
|
18
|
+
date: 2010-09-05 00:00:00 -04:00
|
14
19
|
default_executable:
|
15
20
|
dependencies:
|
16
21
|
- !ruby/object:Gem::Dependency
|
@@ -21,7 +26,12 @@ dependencies:
|
|
21
26
|
requirements:
|
22
27
|
- - ">="
|
23
28
|
- !ruby/object:Gem::Version
|
24
|
-
|
29
|
+
hash: 63
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 8
|
33
|
+
- 0
|
34
|
+
version: 0.8.0
|
25
35
|
type: :runtime
|
26
36
|
version_requirements: *id001
|
27
37
|
description: "Benelux: A mad way to time Ruby codes"
|
@@ -52,16 +62,6 @@ files:
|
|
52
62
|
- lib/selectable/global.rb
|
53
63
|
- lib/selectable/object.rb
|
54
64
|
- lib/selectable/tags.rb
|
55
|
-
- tryouts/10_stats_tryouts.rb
|
56
|
-
- tryouts/11_selectable_tryouts.rb
|
57
|
-
- tryouts/20_tracks_tryouts.rb
|
58
|
-
- tryouts/30_reporter_tryouts.rb
|
59
|
-
- tryouts/30_timeline_tryouts.rb
|
60
|
-
- tryouts/benelux_bm.rb
|
61
|
-
- tryouts/proofs/alias_performance.rb
|
62
|
-
- tryouts/proofs/array_performance.rb
|
63
|
-
- tryouts/proofs/thread_array.rb
|
64
|
-
- tryouts/proofs/timer_threading.rb
|
65
65
|
has_rdoc: true
|
66
66
|
homepage: http://github.com/delano/benelux
|
67
67
|
licenses: []
|
@@ -80,17 +80,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
80
80
|
requirements:
|
81
81
|
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
+
hash: 3
|
84
|
+
segments:
|
85
|
+
- 0
|
83
86
|
version: "0"
|
84
87
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
88
|
none: false
|
86
89
|
requirements:
|
87
90
|
- - ">="
|
88
91
|
- !ruby/object:Gem::Version
|
92
|
+
hash: 3
|
93
|
+
segments:
|
94
|
+
- 0
|
89
95
|
version: "0"
|
90
96
|
requirements: []
|
91
97
|
|
92
98
|
rubyforge_project: benelux
|
93
|
-
rubygems_version: 1.
|
99
|
+
rubygems_version: 1.3.7
|
94
100
|
signing_key:
|
95
101
|
specification_version: 3
|
96
102
|
summary: "Benelux: A mad way to time Ruby codes"
|
data/tryouts/10_stats_tryouts.rb
DELETED
@@ -1,66 +0,0 @@
|
|
1
|
-
|
2
|
-
group "Benelux"
|
3
|
-
|
4
|
-
library :benelux, 'lib'
|
5
|
-
tryouts "Calculator" do
|
6
|
-
set :base, Benelux::Stats::Calculator.new
|
7
|
-
dream :class, Benelux::Stats::Calculator
|
8
|
-
dream :n, 10
|
9
|
-
dream :sum, 45
|
10
|
-
dream :sumsq, 285
|
11
|
-
dream :min, 0
|
12
|
-
dream :max, 9
|
13
|
-
dream :proc, lambda { |calc| calc.sd.to_i == 3 }
|
14
|
-
drill "can keep stats" do
|
15
|
-
10.times { |i| base.sample(i) }
|
16
|
-
base
|
17
|
-
end
|
18
|
-
|
19
|
-
dream true
|
20
|
-
drill "can add stats" do
|
21
|
-
by_sample = Benelux::Stats::Calculator.new
|
22
|
-
10.times { |i| by_sample.sample(i) }
|
23
|
-
by_sample += base
|
24
|
-
by_merge = Benelux::Stats::Calculator.new
|
25
|
-
by_merge.merge! base
|
26
|
-
by_merge.merge! base
|
27
|
-
stash :sample, by_sample
|
28
|
-
stash :merge, by_merge
|
29
|
-
by_sample == by_merge
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
tryouts "Stats" do
|
35
|
-
set :stat_names, [:execute, :request, :first_byte]
|
36
|
-
|
37
|
-
dream stat_names
|
38
|
-
drill "knows stats names" do
|
39
|
-
stats = Benelux::Stats.new(stat_names)
|
40
|
-
stats.names
|
41
|
-
end
|
42
|
-
|
43
|
-
drill "can keep multiple stats", true do
|
44
|
-
stats = Benelux::Stats.new(stat_names)
|
45
|
-
stats.execute.sample(rand)
|
46
|
-
stats.request.sample(rand*-1)
|
47
|
-
stats.execute != stats.request
|
48
|
-
end
|
49
|
-
|
50
|
-
dream [true, true, true]
|
51
|
-
drill "can keep stats with tags" do
|
52
|
-
stats = Benelux::Stats.new(stat_names)
|
53
|
-
3.times { |i|
|
54
|
-
stats.execute.sample(rand, :usecase => '11')
|
55
|
-
stats.execute.sample(rand, :usecase => '11', :request => '22')
|
56
|
-
stats.execute.sample(rand, :request => '22')
|
57
|
-
}
|
58
|
-
stash :execute_stats, stats.execute
|
59
|
-
[
|
60
|
-
stats.execute['11'] == stats.execute[:usecase => '11'],
|
61
|
-
stats.execute['22'] == stats.execute[:request => '22'],
|
62
|
-
stats.execute['22','11'] == stats.execute[:usecase => '11', :request => '22']
|
63
|
-
]
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
@@ -1,92 +0,0 @@
|
|
1
|
-
|
2
|
-
group "Benelux"
|
3
|
-
|
4
|
-
library :benelux, 'lib'
|
5
|
-
tryouts "Selectable" do
|
6
|
-
set :base, SelectableArray.new
|
7
|
-
|
8
|
-
setup do
|
9
|
-
class ::TaggedItems
|
10
|
-
include Selectable::Object
|
11
|
-
end
|
12
|
-
10.times { |i|
|
13
|
-
obj = TaggedItems.new
|
14
|
-
obj.add_tags :index => i, :even => (i%2 == 0)
|
15
|
-
base << obj
|
16
|
-
}
|
17
|
-
end
|
18
|
-
|
19
|
-
dream :class, SelectableArray
|
20
|
-
dream :size, 5
|
21
|
-
drill "filter returns a new instance of the same object" do
|
22
|
-
base.filter(:even => true)
|
23
|
-
end
|
24
|
-
|
25
|
-
dream :class, SelectableArray
|
26
|
-
dream :object_id, base.object_id
|
27
|
-
dream :size, 5
|
28
|
-
drill "filter! makes permanent changes to itself" do
|
29
|
-
base.filter! :even => true
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
|
-
tryouts "Tags" do
|
36
|
-
set :base, Selectable::Tags[:a => 1, :b => 2]
|
37
|
-
|
38
|
-
drill "Can equal a Hash with the same keys/values", true do
|
39
|
-
base == {:a => 1, :b => 2}
|
40
|
-
end
|
41
|
-
|
42
|
-
drill "Implements a comparison operator", true do
|
43
|
-
base.respond_to? :'<=>'
|
44
|
-
end
|
45
|
-
|
46
|
-
drill "Comparison operator returns 0 for same values", 0 do
|
47
|
-
base <=> {:a => 1, :b => 2}
|
48
|
-
end
|
49
|
-
|
50
|
-
drill "Comparison operator returns 1 when it's a superset of other", 1 do
|
51
|
-
base <=> {:a => 1}
|
52
|
-
end
|
53
|
-
|
54
|
-
drill "Comparison operator returns -1 when it's a subset of other", -1 do
|
55
|
-
base <=> {:a => 1, :b => 2, :c => 3}
|
56
|
-
end
|
57
|
-
|
58
|
-
drill "> returns false when compared to a hash with more key value pairs", false do
|
59
|
-
base > {:a => 1, :b => 2, :c => 3}
|
60
|
-
end
|
61
|
-
|
62
|
-
drill "> returns true when compared to a hash with fewer key value pairs", true do
|
63
|
-
base > {:b => 2}
|
64
|
-
end
|
65
|
-
|
66
|
-
drill "< returns true when compared to a hash with more key value pairs", true do
|
67
|
-
base < {:a => 1, :b => 2, :c => 3}
|
68
|
-
end
|
69
|
-
|
70
|
-
drill "< returns false when compared to a hash with fewer key value pairs", false do
|
71
|
-
base < {:b => 2}
|
72
|
-
end
|
73
|
-
|
74
|
-
drill "< returns false when compared to a hash with same values", false do
|
75
|
-
base < {:a => 1, :b => 2}
|
76
|
-
end
|
77
|
-
|
78
|
-
drill "<= returns true when compared to a hash with same values", true do
|
79
|
-
base <= {:b => 2, :a => 1}
|
80
|
-
end
|
81
|
-
|
82
|
-
drill "< returns false when compared to an array with same values", false do
|
83
|
-
base < [1, 2]
|
84
|
-
end
|
85
|
-
|
86
|
-
drill "<= returns true when compared to an array with same values", true do
|
87
|
-
base <= [2, 1]
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
91
|
-
|
92
|
-
|
@@ -1,22 +0,0 @@
|
|
1
|
-
group "Benelux"
|
2
|
-
|
3
|
-
library :benelux, 'lib'
|
4
|
-
tryouts "Tracks" do
|
5
|
-
|
6
|
-
dream [:track1, :track1]
|
7
|
-
drill "Can specify current track" do
|
8
|
-
Benelux.current_track :track1
|
9
|
-
[Thread.current.track_name, Benelux.current_track.name]
|
10
|
-
end
|
11
|
-
|
12
|
-
dream :class, Benelux::Timeline
|
13
|
-
drill "Track has a timeline" do
|
14
|
-
Benelux.current_track.timeline
|
15
|
-
end
|
16
|
-
|
17
|
-
dream :exception, Benelux::UnknownTrack
|
18
|
-
drill "raises exception when unknown track specified" do
|
19
|
-
Benelux.track :name
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
group "Benelux"
|
2
|
-
|
3
|
-
library :benelux, 'lib'
|
4
|
-
xtryouts "Reporter" do
|
5
|
-
set :reporter, Benelux::Reporter.new
|
6
|
-
|
7
|
-
drill "1", true do
|
8
|
-
p Benelux
|
9
|
-
end
|
10
|
-
|
11
|
-
dream :exception, Benelux::BadRecursion
|
12
|
-
xdrill "will not report on itself" do
|
13
|
-
reporter.add_threads Thread.current
|
14
|
-
end
|
15
|
-
|
16
|
-
dream :class, ThreadsWait
|
17
|
-
dream :empty?, false
|
18
|
-
xdrill "can add threads" do
|
19
|
-
2.times {
|
20
|
-
t = Thread.new do
|
21
|
-
3.times { sleep 1; }
|
22
|
-
end
|
23
|
-
reporter.add_thread t
|
24
|
-
}
|
25
|
-
reporter.thwait
|
26
|
-
end
|
27
|
-
|
28
|
-
dream true
|
29
|
-
xdrill "will wait for known threads" do
|
30
|
-
reporter.start
|
31
|
-
reporter
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
@@ -1,60 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
__END__
|
4
|
-
# OLD (0.3):
|
5
|
-
|
6
|
-
group "Benelux"
|
7
|
-
|
8
|
-
library :benelux, 'lib'
|
9
|
-
tryouts "Timelines" do
|
10
|
-
set :tl, Benelux::Timeline.new
|
11
|
-
|
12
|
-
setup do
|
13
|
-
class ::Sleeper
|
14
|
-
def do_something() sleep rand/3 end
|
15
|
-
def another_method(t) t*2 end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
drill "Can set thread track", :track1 do
|
20
|
-
Benelux.current_track :track1
|
21
|
-
# Thread.current.track
|
22
|
-
end
|
23
|
-
|
24
|
-
drill "Add timers to existing objects", true do
|
25
|
-
Benelux.add_timer Sleeper, :do_something
|
26
|
-
Sleeper.new.respond_to? :timeline
|
27
|
-
end
|
28
|
-
|
29
|
-
dream :class, Benelux::Timeline
|
30
|
-
dream :size, 3
|
31
|
-
drill "create timeline with marks" do
|
32
|
-
tl.add_default_tags :a => :frog
|
33
|
-
tl.add_mark(:one)
|
34
|
-
tl.add_default_tags :b => :rest
|
35
|
-
tl.add_mark(:two)
|
36
|
-
tl.add_default_tags :c => :tilt
|
37
|
-
tl.add_mark(:three)
|
38
|
-
tl.marks
|
39
|
-
end
|
40
|
-
|
41
|
-
dream :size, 2
|
42
|
-
drill "select marks based on tags" do
|
43
|
-
tl[:frog][:b => :rest]
|
44
|
-
end
|
45
|
-
|
46
|
-
dream :class, Benelux::Timeline
|
47
|
-
dream :size, 10 # 5 * 2 = 10
|
48
|
-
drill "Creates a timeline for the thread" do
|
49
|
-
sleeper = Sleeper.new
|
50
|
-
5.times { sleeper.do_something }
|
51
|
-
Benelux.thread_timeline
|
52
|
-
end
|
53
|
-
|
54
|
-
dream :class, Benelux::Timeline
|
55
|
-
dream :size, 10
|
56
|
-
drill "Creates a global timeline" do
|
57
|
-
Benelux.update_all_track_timelines
|
58
|
-
Benelux.timeline
|
59
|
-
end
|
60
|
-
end
|
data/tryouts/benelux_bm.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
tryouts "Alias method speed", :benchmark do
|
4
|
-
set :runcount, 1_000
|
5
|
-
|
6
|
-
setup do
|
7
|
-
module A;
|
8
|
-
extend self
|
9
|
-
def meth1; end
|
10
|
-
def meth2; end
|
11
|
-
alias_method :meth2_orig, :meth2
|
12
|
-
def meth2; end
|
13
|
-
def meth2_with_call; meth2_orig; end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
[10, 100].each do |mult|
|
18
|
-
count = runcount * mult
|
19
|
-
|
20
|
-
drill "Natural method (#{count})", count do
|
21
|
-
A.meth1
|
22
|
-
end
|
23
|
-
|
24
|
-
drill "Aliased method (#{count})", count do
|
25
|
-
A.meth2
|
26
|
-
end
|
27
|
-
|
28
|
-
drill "Aliased method w/ call (#{count})", count do
|
29
|
-
A.meth2_with_call
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
@@ -1,57 +0,0 @@
|
|
1
|
-
|
2
|
-
xtryouts "Array speed", :benchmark do
|
3
|
-
set :base, []
|
4
|
-
|
5
|
-
drill "Populate array" do
|
6
|
-
10_000_000.times { base << 1 }
|
7
|
-
end
|
8
|
-
|
9
|
-
drill "with <<" do
|
10
|
-
a = []
|
11
|
-
base.each { |v|
|
12
|
-
a << v
|
13
|
-
}
|
14
|
-
a.flatten!
|
15
|
-
end
|
16
|
-
|
17
|
-
# SLOOOOOWWWWW (b/c it creates a new Array every iteration)
|
18
|
-
xdrill "with +=" do
|
19
|
-
a = []
|
20
|
-
base.each {|v|
|
21
|
-
a += [v]
|
22
|
-
}
|
23
|
-
a
|
24
|
-
end
|
25
|
-
|
26
|
-
drill "with select" do
|
27
|
-
a = base.select { |v|
|
28
|
-
true
|
29
|
-
}
|
30
|
-
Array.new(a)
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
|
36
|
-
tryouts "Array merge speed", :benchmark do
|
37
|
-
set :size, 10_000_000
|
38
|
-
set :merges, 100_000
|
39
|
-
|
40
|
-
drill "Create #{size} element Array" do
|
41
|
-
final = []
|
42
|
-
size.times { final << 1 }
|
43
|
-
end
|
44
|
-
|
45
|
-
drill "Merge #{size} element Array" do
|
46
|
-
all = []
|
47
|
-
msize = size / merges
|
48
|
-
merges.times do
|
49
|
-
a = []
|
50
|
-
msize.times { a << 1 }
|
51
|
-
all << a
|
52
|
-
end
|
53
|
-
final = []
|
54
|
-
all.each { |a| final.push *a }
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require 'threadify'
|
4
|
-
|
5
|
-
parallel = 20
|
6
|
-
runcount = 100_000
|
7
|
-
baseline = []
|
8
|
-
testcase = []
|
9
|
-
|
10
|
-
def timer(&blk)
|
11
|
-
s = Time.now; blk.call; puts ('%.4f' % (Time.now - s).to_f)
|
12
|
-
end
|
13
|
-
|
14
|
-
print "Populate baseline: "
|
15
|
-
timer do
|
16
|
-
parallel.times do
|
17
|
-
seed = "a"
|
18
|
-
(runcount).times do
|
19
|
-
baseline << seed.succ!.clone
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
print "Start #{parallel} threads: "
|
25
|
-
threads = []
|
26
|
-
timer do
|
27
|
-
parallel.times do
|
28
|
-
threads << Thread.new do
|
29
|
-
seed = "a"
|
30
|
-
runcount.times { testcase << seed.succ!.clone }
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
print "Wait for threads: "
|
36
|
-
timer do
|
37
|
-
threads.each { |t| t.join }
|
38
|
-
end
|
39
|
-
|
40
|
-
# Compare baseline to testcase
|
41
|
-
p [:size, testcase.size == baseline.size]
|
42
|
-
p [:sorted, testcase.sort == baseline.sort]
|
43
|
-
|
44
|
-
# Q: Why does the testcase Array seem to repeat perfectly?
|
45
|
-
# [a,b,c,d,a,b,c,d,a,b,c,d]
|
46
|
-
|
47
|
-
__END__
|
48
|
-
|
49
|
-
Module.method_added?
|
@@ -1,30 +0,0 @@
|
|
1
|
-
group "Benelux Concept Proofs"
|
2
|
-
|
3
|
-
xtryouts "Time benchmarks", :benchmark do
|
4
|
-
set :runcount, 100000
|
5
|
-
|
6
|
-
drill "Create Array", 1 do
|
7
|
-
@@timers = []
|
8
|
-
end
|
9
|
-
|
10
|
-
drill "Time.now overhead", 5 do
|
11
|
-
runcount.times { Time.now.to_f }
|
12
|
-
end
|
13
|
-
|
14
|
-
drill "[] << Time.now overhead", 5 do
|
15
|
-
runcount.times { @@timers << Time.now.to_f }
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
require 'date'
|
21
|
-
tryouts "Time proofs", :api do
|
22
|
-
set :runcount, 100000
|
23
|
-
|
24
|
-
drill "All calls to Time.now.to_f are unique (will fail)", 0 do
|
25
|
-
timers = []
|
26
|
-
runcount.times { timers << Time.now.to_f; sleep 0.00000001 }
|
27
|
-
timers.size - timers.uniq.size
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|