class MultiMeasure
Constants
- STORE_KEY
- VERSION
Attributes
measurements[R]
Public Class Methods
config()
click to toggle source
# File lib/multi_measure.rb, line 32 def config @config ||= default_config end
configure() { |config| ... }
click to toggle source
# File lib/multi_measure.rb, line 13 def configure yield config @config = config end
current_measurements()
click to toggle source
# File lib/multi_measure.rb, line 54 def current_measurements instance.current_measurements end
default_config()
click to toggle source
# File lib/multi_measure.rb, line 18 def default_config MultiMeasure::Config.build_from( output_prefix: "MULTI_MEASURE_TOTAL", write_to: STDOUT, middleware: { env_var: "MULTI_MEASURE_ENABLED" } ) end
done()
click to toggle source
# File lib/multi_measure.rb, line 44 def done instance.print_all_measurements reset end
measure(*names, &block)
click to toggle source
# File lib/multi_measure.rb, line 58 def measure(*names, &block) instance.measure(*names, &block) end
new()
click to toggle source
# File lib/multi_measure.rb, line 71 def initialize @measurements = ThreadSafeHash.new end
reset()
click to toggle source
# File lib/multi_measure.rb, line 40 def reset Thread.current[STORE_KEY] = nil end
set_default_config()
click to toggle source
# File lib/multi_measure.rb, line 28 def set_default_config @config = default_config end
start()
click to toggle source
# File lib/multi_measure.rb, line 36 def start Thread.current[STORE_KEY] = new end
track_measurements() { || ... }
click to toggle source
# File lib/multi_measure.rb, line 49 def track_measurements start yield.tap { done } end
Private Class Methods
instance()
click to toggle source
# File lib/multi_measure.rb, line 66 def instance Thread.current.fetch(STORE_KEY) { NullMeasurer.new } end
Public Instance Methods
current_measurements()
click to toggle source
# File lib/multi_measure.rb, line 94 def current_measurements measurements.to_normal_hash end
measure(*names) { |state| ... }
click to toggle source
# File lib/multi_measure.rb, line 75 def measure(*names) return_value = nil state = MeasurementState.new time = Benchmark.realtime do return_value = yield state end if state.track_measurement? names.each do |name| measurements[name] ||= [] measurements[name] << time end end return_value end
print_all_measurements()
click to toggle source
# File lib/multi_measure.rb, line 98 def print_all_measurements longest_key_length = 0 measurements.each do |key, _value| if key.length > longest_key_length longest_key_length = key.length end end longest_time_length = 0 measurements.each do |_key, times| length = to_ms(times.sum).to_s.length if length > longest_time_length longest_time_length = length end end sorted_measurements = measurements.sort_by { |_key, times| times.sum } sorted_measurements.each do |key, times| key = key.rjust(longest_key_length) time = to_ms(times.sum).to_s.rjust(longest_time_length) std = MathHelpers.standard_deviation(times.map { |t| to_ms(t) }).round(2) extra_info = "(+/- #{std}ms, #{times.size} calls)" write_to_io "#{key} #{time}ms #{extra_info}" end end
Private Instance Methods
config()
click to toggle source
# File lib/multi_measure.rb, line 140 def config self.class.config end
to_ms(seconds)
click to toggle source
# File lib/multi_measure.rb, line 144 def to_ms(seconds) (seconds * 1_000).round(1) end
write_to_io(message)
click to toggle source
# File lib/multi_measure.rb, line 130 def write_to_io(message) message = "#{config.output_prefix} #{message}" if config.write_to.respond_to?(:debug) config.write_to.debug(message) else config.write_to.puts(message) end end