Module: SorbetView::Perf
- Extended by:
- T::Sig
- Defined in:
- lib/sorbet_view/perf.rb
Defined Under Namespace
Classes: Metric
Class Attribute Summary collapse
-
.enabled ⇒ Object
Returns the value of attribute enabled.
-
.metrics ⇒ Object
readonly
Returns the value of attribute metrics.
Class Method Summary collapse
- .measure(label, &blk) ⇒ Object
- .report(io: $stderr) ⇒ Object
- .report_to_logger(logger) ⇒ Object
- .reset! ⇒ Object
Class Attribute Details
.enabled ⇒ Object
Returns the value of attribute enabled.
22 23 24 |
# File 'lib/sorbet_view/perf.rb', line 22 def enabled @enabled end |
.metrics ⇒ Object (readonly)
Returns the value of attribute metrics.
25 26 27 |
# File 'lib/sorbet_view/perf.rb', line 25 def metrics @metrics end |
Class Method Details
.measure(label, &blk) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/sorbet_view/perf.rb', line 32 def measure(label, &blk) unless @enabled return yield end start = Process.clock_gettime(Process::CLOCK_MONOTONIC) result = yield elapsed_ms = (Process.clock_gettime(Process::CLOCK_MONOTONIC) - start) * 1000.0 metric = @metrics[label] ||= Metric.new metric.count += 1 metric.total_ms += elapsed_ms metric.min_ms = elapsed_ms if elapsed_ms < metric.min_ms metric.max_ms = elapsed_ms if elapsed_ms > metric.max_ms result end |
.report(io: $stderr) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/sorbet_view/perf.rb', line 56 def report(io: $stderr) return if @metrics.empty? io.puts "\n=== SorbetView Performance Report ===" io.puts format('%-35s %8s %10s %10s %10s %10s', 'Label', 'Count', 'Total(ms)', 'Avg(ms)', 'Min(ms)', 'Max(ms)') io.puts '-' * 90 @metrics.sort_by { |_, m| -m.total_ms }.each do |label, m| avg = m.count > 0 ? m.total_ms / m.count : 0.0 min_val = m.min_ms == Float::INFINITY ? 0.0 : m.min_ms io.puts format('%-35s %8d %10.2f %10.2f %10.2f %10.2f', label, m.count, m.total_ms, avg, min_val, m.max_ms) end io.puts '=' * 90 io.puts '' end |
.report_to_logger(logger) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/sorbet_view/perf.rb', line 74 def report_to_logger(logger) return if @metrics.empty? lines = ["\n=== SorbetView Performance Report ==="] lines << format('%-35s %8s %10s %10s %10s %10s', 'Label', 'Count', 'Total(ms)', 'Avg(ms)', 'Min(ms)', 'Max(ms)') lines << '-' * 90 @metrics.sort_by { |_, m| -m.total_ms }.each do |label, m| avg = m.count > 0 ? m.total_ms / m.count : 0.0 min_val = m.min_ms == Float::INFINITY ? 0.0 : m.min_ms lines << format('%-35s %8d %10.2f %10.2f %10.2f %10.2f', label, m.count, m.total_ms, avg, min_val, m.max_ms) end lines << '=' * 90 logger.info(lines.join("\n")) end |
.reset! ⇒ Object
51 52 53 |
# File 'lib/sorbet_view/perf.rb', line 51 def reset! @metrics = {} end |