module OneApm::Collector::StatsEngine::GCProfiler

Constants

GCSnapshot
OA_GC_OTHER
OA_GC_ROLLUP
OA_GC_WEB

Public Class Methods

gc_metric_name() click to toggle source
# File lib/one_apm/collector/stats_engine/gc_profiler.rb, line 57
def self.gc_metric_name
  if OneApm::Transaction.recording_web_transaction?
    OA_GC_WEB
  else
    OA_GC_OTHER
  end
end
init() click to toggle source
# File lib/one_apm/collector/stats_engine/gc_profiler.rb, line 9
def self.init
  return @profiler if @initialized
  @profiler = if RailsBenchProfiler.enabled?
    RailsBenchProfiler.new
  elsif CoreGCProfiler.enabled?
    CoreGCProfiler.new
  end
  @initialized = true
  @profiler
end
record_delta(start_snapshot, end_snapshot) click to toggle source
# File lib/one_apm/collector/stats_engine/gc_profiler.rb, line 34
def self.record_delta(start_snapshot, end_snapshot)
  if @profiler && start_snapshot && end_snapshot
    elapsed_gc_time_s = end_snapshot.gc_time_s - start_snapshot.gc_time_s
    num_calls         = end_snapshot.gc_call_count - start_snapshot.gc_call_count
    record_gc_metric(num_calls, elapsed_gc_time_s)

    @profiler.reset
    elapsed_gc_time_s
  end
end
record_gc_metric(call_count, elapsed) click to toggle source
# File lib/one_apm/collector/stats_engine/gc_profiler.rb, line 45
def self.record_gc_metric(call_count, elapsed)
  OneApm::Manager.agent.stats_engine.tl_record_scoped_and_unscoped_metrics(gc_metric_name, OA_GC_ROLLUP) do |stats|
    stats.call_count           += call_count
    stats.total_call_time      += elapsed
    stats.total_exclusive_time += elapsed
  end
end
reset() click to toggle source
# File lib/one_apm/collector/stats_engine/gc_profiler.rb, line 20
def self.reset
  @profiler    = nil
  @initialized = nil
end
take_snapshot() click to toggle source
# File lib/one_apm/collector/stats_engine/gc_profiler.rb, line 25
def self.take_snapshot
  init
  if @profiler
    GCSnapshot.new(@profiler.call_time_s, @profiler.call_count)
  else
    nil
  end
end