lib/ddmemoize.rb in ddmemoize-1.0.0a2 vs lib/ddmemoize.rb in ddmemoize-1.0.0a3
- old
+ new
@@ -13,43 +13,35 @@
def initialize(value)
@value = value
end
end
- # @api private
- class TelemetryMap
- include Singleton
+ NONE = Object.new
- def initialize
- @map = {}
+ def self.activate(mod)
+ mod.extend(Mixin)
+ end
+
+ class << self
+ def enable_telemetry
+ @telemetry_enabled = true
end
- def [](mod)
- @map[mod]
+ def telemetry_enabled?
+ @telemetry_enabled
end
- def []=(mod, telemetry)
- @map[mod] = telemetry
+ def telemetry_counter
+ @_telemetry_counter ||= DDTelemetry::Counter.new
end
end
- NONE = Object.new
-
- def self.activate(mod, telemetry: nil)
- mod.extend(Mixin)
- TelemetryMap.instance[mod] = telemetry
- end
-
- def self.telemetry_for(mod)
- TelemetryMap.instance[mod]
- end
-
- def self.print_telemetry(telemetry)
+ def self.print_telemetry
headers = %w[memoization hit miss %]
- rows_raw = telemetry.counter(:memoization).map do |(name, type), counter|
- { name: name, type: type, count: counter.value }
+ rows_raw = DDMemoize.telemetry_counter.map do |(name, type), count|
+ { name: name, type: type, count: count }
end
rows = rows_raw.group_by { |r| r[:name] }.map do |name, rows_for_name|
rows_by_type = rows_for_name.group_by { |r| r[:type] }
@@ -68,27 +60,25 @@
def memoize(method_name)
original_method_name = '__nonmemoized_' + method_name.to_s
alias_method original_method_name, method_name
instance_cache = Hash.new { |hash, key| hash[key] = {} }
- telemetry = DDMemoize.telemetry_for(self)
+ counter_label = "#{self}##{method_name}"
define_method(method_name) do |*args|
instance_method_cache = instance_cache[self]
value = NONE
if instance_method_cache.key?(args)
object = instance_method_cache[args].object
value = object ? object.value : NONE
end
- if telemetry
- counter_label = is_a?(Class) ? "#{self}.#{method_name}" : "#{self.class}##{method_name}"
-
+ if DDMemoize.telemetry_enabled?
if NONE.equal?(value)
- telemetry.counter(:memoization).increment([counter_label, :miss])
+ DDMemoize.telemetry_counter.increment([counter_label, :miss])
else
- telemetry.counter(:memoization).increment([counter_label, :hit])
+ DDMemoize.telemetry_counter.increment([counter_label, :hit])
end
end
if value.equal?(NONE)
send(original_method_name, *args).tap do |r|