Sha256: 0989563c6274ddb0fdcc993396f76d2421b9c1e285b1dc3c9557f6df8132bf33

Contents?: true

Size: 1015 Bytes

Versions: 13

Compression:

Stored size: 1015 Bytes

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

  @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.positive?
  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

13 entries across 13 versions & 1 rubygems

Version Path
rspeckled-2.0.1 lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb
rspeckled-2.0.0 lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb
rspeckled-1.4.0 lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb
rspeckled-1.3.1 lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb
rspeckled-1.3.0 lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb
rspeckled-1.2.1 lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb
rspeckled-1.2.0 lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb
rspeckled-1.1.3 lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb
rspeckled-1.1.2 lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb
rspeckled-1.1.1 lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb
rspeckled-1.1.0 lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb
rspeckled-1.0.5 lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb
rspeckled-1.0.4 lib/rspeckled/plugins/extensions/ruby/deferred_garbage_collection.rb