vernier 0.2.1 → 0.3.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/lib/vernier.rb CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  require_relative "vernier/version"
4
4
  require_relative "vernier/collector"
5
+ require_relative "vernier/result"
5
6
  require_relative "vernier/vernier"
6
7
  require_relative "vernier/output/firefox"
7
8
  require_relative "vernier/output/top"
@@ -9,135 +10,13 @@ require_relative "vernier/output/top"
9
10
  module Vernier
10
11
  class Error < StandardError; end
11
12
 
12
- class Result
13
- attr_reader :weights, :samples, :stack_table, :frame_table, :func_table
14
- attr_reader :timestamps, :sample_threads, :sample_categories
15
- attr_reader :markers
16
-
17
- attr_accessor :pid, :start_time, :end_time
18
- attr_accessor :threads
19
- attr_accessor :meta
20
-
21
- def started_at
22
- meta[:started_at]
23
- end
24
-
25
- def to_gecko
26
- Output::Firefox.new(self).output
27
- end
28
-
29
- def write(out:)
30
- File.write(out, to_gecko)
31
- end
32
-
33
- def each_sample
34
- return enum_for(__method__) unless block_given?
35
- @samples.size.times do |sample_idx|
36
- weight = @weights[sample_idx]
37
- stack_idx = @samples[sample_idx]
38
- yield stack(stack_idx), weight
39
- end
40
- end
41
-
42
- class BaseType
43
- attr_reader :result, :idx
44
- def initialize(result, idx)
45
- @result = result
46
- @idx = idx
47
- end
48
-
49
- def to_s
50
- idx.to_s
51
- end
52
-
53
- def inspect
54
- "#<#{self.class}\n#{to_s}>"
55
- end
56
- end
57
-
58
- class Func < BaseType
59
- def label
60
- result.func_table[:name][idx]
61
- end
62
- alias name label
63
-
64
- def filename
65
- result.func_table[:filename][idx]
66
- end
67
-
68
- def to_s
69
- "#{name} at #{filename}"
70
- end
71
- end
72
-
73
- class Frame < BaseType
74
- def label; func.label; end
75
- def filename; func.filename; end
76
- alias name label
77
-
78
- def func
79
- func_idx = result.frame_table[:func][idx]
80
- Func.new(result, func_idx)
81
- end
82
-
83
- def line
84
- result.frame_table[:line][idx]
85
- end
86
-
87
- def to_s
88
- "#{func}:#{line}"
89
- end
90
- end
91
-
92
- class Stack < BaseType
93
- def each_frame
94
- return enum_for(__method__) unless block_given?
95
-
96
- stack_idx = idx
97
- while stack_idx
98
- frame_idx = result.stack_table[:frame][stack_idx]
99
- yield Frame.new(result, frame_idx)
100
- stack_idx = result.stack_table[:parent][stack_idx]
101
- end
102
- end
103
-
104
- def leaf_frame_idx
105
- result.stack_table[:frame][idx]
106
- end
107
-
108
- def leaf_frame
109
- Frame.new(result, leaf_frame_idx)
110
- end
111
-
112
- def frames
113
- each_frame.to_a
114
- end
115
-
116
- def to_s
117
- arr = []
118
- each_frame do |frame|
119
- arr << frame.to_s
120
- end
121
- arr.join("\n")
122
- end
123
- end
124
-
125
- def stack(idx)
126
- Stack.new(self, idx)
127
- end
128
-
129
- def total_bytes
130
- @weights.sum
131
- end
132
- end
133
-
134
13
  def self.trace(mode: :wall, out: nil, interval: nil)
135
14
  collector = Vernier::Collector.new(mode, { interval: })
136
15
  collector.start
137
16
 
138
17
  result = nil
139
18
  begin
140
- yield
19
+ yield collector
141
20
  ensure
142
21
  result = collector.stop
143
22
  end
@@ -151,20 +30,14 @@ module Vernier
151
30
  def self.trace_retained(out: nil, gc: true)
152
31
  3.times { GC.start } if gc
153
32
 
154
- start_time = Process.clock_gettime(Process::CLOCK_REALTIME, :millisecond)
155
-
156
33
  collector = Vernier::Collector.new(:retained)
157
34
  collector.start
158
35
 
159
36
  result = nil
160
37
  begin
161
- yield
38
+ yield collector
162
39
  ensure
163
40
  result = collector.stop
164
- end_time = Process.clock_gettime(Process::CLOCK_REALTIME, :millisecond)
165
- result.pid = Process.pid
166
- result.start_time = start_time
167
- result.end_time = end_time
168
41
  end
169
42
 
170
43
  if out
metadata CHANGED
@@ -1,19 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vernier
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Hawthorn
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-08-08 00:00:00.000000000 Z
11
+ date: 2023-08-29 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: An experimental profiler
14
14
  email:
15
15
  - john@hawthorn.email
16
- executables: []
16
+ executables:
17
+ - vernier
17
18
  extensions:
18
19
  - ext/vernier/extconf.rb
19
20
  extra_rdoc_files: []
@@ -25,18 +26,24 @@ files:
25
26
  - Rakefile
26
27
  - bin/console
27
28
  - bin/setup
29
+ - bin/vernier
30
+ - examples/minitest.rb
31
+ - examples/ractor.rb
32
+ - examples/rails.rb
28
33
  - examples/threaded_http_requests.rb
34
+ - exe/vernier
29
35
  - ext/vernier/extconf.rb
30
36
  - ext/vernier/ruby_type_names.h
31
37
  - ext/vernier/vernier.cc
32
38
  - ext/vernier/vernier.hh
33
39
  - lib/vernier.rb
40
+ - lib/vernier/autorun.rb
34
41
  - lib/vernier/collector.rb
35
42
  - lib/vernier/marker.rb
36
43
  - lib/vernier/output/firefox.rb
37
44
  - lib/vernier/output/top.rb
45
+ - lib/vernier/result.rb
38
46
  - lib/vernier/version.rb
39
- - sig/vernier.rbs
40
47
  - vernier.gemspec
41
48
  homepage: https://github.com/jhawthorn/vernier
42
49
  licenses:
data/sig/vernier.rbs DELETED
@@ -1,4 +0,0 @@
1
- module Vernier
2
- VERSION: String
3
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
- end