ree 1.2.0 → 1.2.2
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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/lib/ree/benchmark_tracer.rb +39 -0
- data/lib/ree/object_compiler.rb +31 -0
- data/lib/ree/version.rb +1 -1
- data/lib/ree.rb +13 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9856a98c27c0d4c9a5bc2c62ba473f9d6c19b1b366d1222afe705d78abbf3a4b
|
|
4
|
+
data.tar.gz: 27d745f77eeedf4dc490bf2006e8b51670df51b07d61849d0111261c176467de
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 41161ca3747a4d15af34aebe171254a1a16e273c7d017b2c988264e14a92c5d36f4cb5ca85f131a5c9a19067ca83d2a698c7ca4d6c8095cf907a28a180ed460f
|
|
7
|
+
data.tar.gz: c3a47bb26c4a9d40b7d4ff52a145bd64c9f9e4d6b310b3b83bc1c2977701638ec399c8dddb052649dd7bbbaccc6760624d6955073ab32d820f31ea9e7721afcc
|
data/Gemfile.lock
CHANGED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
class Ree::BenchmarkTracer
|
|
4
|
+
Node = Struct.new(:name, :start_time, :duration, :children)
|
|
5
|
+
|
|
6
|
+
THREAD_KEY = :ree_benchmark_tracer
|
|
7
|
+
|
|
8
|
+
class << self
|
|
9
|
+
def trace(name)
|
|
10
|
+
stack = Thread.current[THREAD_KEY] ||= []
|
|
11
|
+
node = Node.new(name, Process.clock_gettime(Process::CLOCK_MONOTONIC), nil, [])
|
|
12
|
+
stack.last.children.push(node) if stack.last
|
|
13
|
+
stack.push(node)
|
|
14
|
+
|
|
15
|
+
begin
|
|
16
|
+
result = yield
|
|
17
|
+
ensure
|
|
18
|
+
node.duration = Process.clock_gettime(Process::CLOCK_MONOTONIC) - node.start_time
|
|
19
|
+
stack.pop
|
|
20
|
+
|
|
21
|
+
if stack.empty?
|
|
22
|
+
Thread.current[THREAD_KEY] = nil
|
|
23
|
+
print_tree(node)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
result
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
def print_tree(node, depth = 0)
|
|
33
|
+
indent = " " * depth
|
|
34
|
+
duration_ms = (node.duration * 1000).round(2)
|
|
35
|
+
$stdout.puts "#{indent}#{node.name} (#{duration_ms}ms)"
|
|
36
|
+
node.children.each { |child| print_tree(child, depth + 1) }
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
data/lib/ree/object_compiler.rb
CHANGED
|
@@ -160,6 +160,37 @@ class Ree::ObjectCompiler
|
|
|
160
160
|
#{str}
|
|
161
161
|
ruby_eval
|
|
162
162
|
|
|
163
|
+
if Ree.benchmark_mode? && object.fn? && !klass.method_defined?(:__call_without_benchmark)
|
|
164
|
+
benchmark_name = "#{object.package_name}/#{object.name}"
|
|
165
|
+
|
|
166
|
+
wrap_call_with_benchmark = proc do |target_klass|
|
|
167
|
+
target_klass.alias_method(:__call_without_benchmark, :call)
|
|
168
|
+
|
|
169
|
+
target_klass.define_method(:call) do |*args, **kwargs, &block|
|
|
170
|
+
Ree::BenchmarkTracer.trace(benchmark_name) do
|
|
171
|
+
__call_without_benchmark(*args, **kwargs, &block)
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
if klass.method_defined?(:call)
|
|
177
|
+
wrap_call_with_benchmark.call(klass)
|
|
178
|
+
else
|
|
179
|
+
klass.instance_variable_set(:@__ree_benchmark_wrap, wrap_call_with_benchmark)
|
|
180
|
+
|
|
181
|
+
klass.define_singleton_method(:method_added) do |method_name|
|
|
182
|
+
if method_name == :call && !method_defined?(:__call_without_benchmark)
|
|
183
|
+
wrap = instance_variable_get(:@__ree_benchmark_wrap)
|
|
184
|
+
if wrap
|
|
185
|
+
remove_instance_variable(:@__ree_benchmark_wrap)
|
|
186
|
+
wrap.call(self)
|
|
187
|
+
end
|
|
188
|
+
end
|
|
189
|
+
super(method_name)
|
|
190
|
+
end
|
|
191
|
+
end
|
|
192
|
+
end
|
|
193
|
+
|
|
163
194
|
# compile all linked objects
|
|
164
195
|
links.each do |link|
|
|
165
196
|
pckg = @packages_facade.get_loaded_package(link.package_name)
|
data/lib/ree/version.rb
CHANGED
data/lib/ree.rb
CHANGED
|
@@ -8,6 +8,7 @@ require 'fileutils'
|
|
|
8
8
|
module Ree
|
|
9
9
|
autoload :Args, 'ree/args'
|
|
10
10
|
autoload :BeanDSL, 'ree/bean_dsl'
|
|
11
|
+
autoload :BenchmarkTracer, 'ree/benchmark_tracer'
|
|
11
12
|
autoload :CLI, 'ree/cli'
|
|
12
13
|
autoload :Container, 'ree/container'
|
|
13
14
|
autoload :Contracts, 'ree/contracts'
|
|
@@ -109,6 +110,18 @@ module Ree
|
|
|
109
110
|
!!@irb_mode
|
|
110
111
|
end
|
|
111
112
|
|
|
113
|
+
def enable_benchmark_mode
|
|
114
|
+
@benchmark_mode = true
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def disable_benchmark_mode
|
|
118
|
+
@benchmark_mode = false
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def benchmark_mode?
|
|
122
|
+
!!@benchmark_mode
|
|
123
|
+
end
|
|
124
|
+
|
|
112
125
|
def set_logger_debug
|
|
113
126
|
logger.level = Logger::DEBUG
|
|
114
127
|
end
|
metadata
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ree
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.2.
|
|
4
|
+
version: 1.2.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ruslan Gatiyatov
|
|
8
8
|
bindir: exe
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date:
|
|
10
|
+
date: 2026-02-08 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: commander
|
|
@@ -75,6 +75,7 @@ files:
|
|
|
75
75
|
- lib/ree.rb
|
|
76
76
|
- lib/ree/args.rb
|
|
77
77
|
- lib/ree/bean_dsl.rb
|
|
78
|
+
- lib/ree/benchmark_tracer.rb
|
|
78
79
|
- lib/ree/cli.rb
|
|
79
80
|
- lib/ree/cli/generate_package.rb
|
|
80
81
|
- lib/ree/cli/generate_packages_schema.rb
|