Sha256: 7977230643576cc59192203a758f3310b401b6da0e86b7124a359ecd7841c75a

Contents?: true

Size: 1.02 KB

Versions: 2

Compression:

Stored size: 1.02 KB

Contents

# frozen_string_literal: true

###
# Shamelessly stolen from http://ariejan.net/2011/09/24/rspec-speed-up-by-tweaking-ruby-garbage-collection/
#
module Rspeckled
module Ruby
class  DeferredGarbageCollection
  THRESHOLD = (ENV['DEFER_GC'] || 20.0).to_f

  private_constant :THRESHOLD

  @garbage_last_collected_at = nil

  def self.start
    cycle_garbage_collector if enabled?
  end

  def self.reconsider
    return unless enabled? && over_deferrment_threshold?

    cycle_garbage_collector

    self.garbage_last_collected_at = ::Time.now
  end

  def self.cycle_garbage_collector
    ::GC.enable
    ::GC.start
    ::GC.disable
  end

  def self.over_deferrment_threshold?
    time_since_garbage_last_collected >= THRESHOLD
  end

  def self.enabled?
    THRESHOLD > 0
  end

  def self.time_since_garbage_last_collected
    ::Time.now - garbage_last_collected_at
  end

  def self.garbage_last_collected_at
    @garbage_last_collected_at || ::Time.now
  end

  class << self
    attr_writer :garbage_last_collected_at
  end
end
end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rspeckled-2.1.1 lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb
rspeckled-2.1.0 lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb