class MemoryTracker::GcStat

Constants

CANONICAL_TO_RUBY22_MAPPING
CANONICAL_TO_RUBY23_MAPPING
RUBY22_TO_CANONICAL_MAPPING
RUBY23_TO_CANONICAL_MAPPING

Public Class Methods

canonical_key_name(key) click to toggle source
# File lib/memory_tracker/gc_stat.rb, line 55
def self.canonical_key_name(key)
  canonical = key
  case RUBY_VERSION
  when /\A2\.2\./
    canonical = RUBY22_TO_CANONICAL_MAPPING.fetch(key, key)
  when /\A2\.3\./
    canonical = RUBY23_TO_CANONICAL_MAPPING.fetch(key, key)
  end
  canonical
end
current_version_key_name(key) click to toggle source
# File lib/memory_tracker/gc_stat.rb, line 66
def self.current_version_key_name(key)
  current_key_name = key
  case RUBY_VERSION
  when /\A2\.2\./
    current_key_name = CANONICAL_TO_RUBY22_MAPPING.fetch(key, key)
  when /\A2\.3\./
    current_key_name = CANONICAL_TO_RUBY23_MAPPING.fetch(key, key)
  end
  current_key_name
end
gcdiff(before, after) click to toggle source
# File lib/memory_tracker/gc_stat.rb, line 81
def self.gcdiff(before, after)
  return {} unless (before && before[:total_allocated_object] && before[:total_freed_object])
  return {} unless (after && after[:total_allocated_object] && after[:total_freed_object])
  diff = {}
  b = before.clone
  a = after.clone
  diff[:num_alloc] = a[:total_allocated_object] - b[:total_allocated_object]
  diff[:num_heaps] = a[:heap_used]
  [ a, b ].each do |x|
    x.delete(:heap_increment)
    x.delete(:heap_length)
    x.delete(:heap_final_num)
    x[:in_use] = x.delete(:total_allocated_object) - x.delete(:total_freed_object)
  end
  b.each_key do |key|
    diff[key] = a[key] - b[key]
  end
  diff
end
heap_used() click to toggle source
# File lib/memory_tracker/gc_stat.rb, line 77
def self.heap_used
  GC.stat[current_version_key_name(:heap_used)]
end
new(rss, vsize) click to toggle source
# File lib/memory_tracker/gc_stat.rb, line 19
def initialize(rss, vsize)
  @stats = GC.stat.merge({ :rss => rss, :vsize => vsize})
end

Public Instance Methods

[](key) click to toggle source
# File lib/memory_tracker/gc_stat.rb, line 43
def [](key)
  @stats[current_version_key_name(key)]
end
canonical_key_name(key) click to toggle source
# File lib/memory_tracker/gc_stat.rb, line 47
def canonical_key_name(key)
  self.class.canonical_key_name(key)
end
current_version_key_name(key) click to toggle source
# File lib/memory_tracker/gc_stat.rb, line 51
def current_version_key_name(key)
  self.class.current_version_key_name(key)
end
each() { |canonical_key_name(k), v| ... } click to toggle source
# File lib/memory_tracker/gc_stat.rb, line 23
def each(&block)
  @stats.each do |k, v|
    yield canonical_key_name(k), v
  end
end
keys() click to toggle source
# File lib/memory_tracker/gc_stat.rb, line 29
def keys
  @stats.keys
end
ordered_keys() click to toggle source
# File lib/memory_tracker/gc_stat.rb, line 33
def ordered_keys
  @stats.keys.map { |k| canonical_key_name(k) }.sort
end
ordered_values(ordered_columns = ordered_keys) click to toggle source
# File lib/memory_tracker/gc_stat.rb, line 37
def ordered_values(ordered_columns = ordered_keys)
  ordered_columns.inject([]) do |vals, key|
    vals << @stats[current_version_key_name(key)]
  end
end