Sha256: 390e2aa33857ba1a2f49f563d7f7a90ee64ef3d8fd1c5d116a5be142a258d3d6

Contents?: true

Size: 1.15 KB

Versions: 14

Compression:

Stored size: 1.15 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
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

RSpec.configure do |config|
  config.before(:all) do
    Rspeckled::DeferredGarbageCollection.start
  end

  config.after(:all) do
    Rspeckled::DeferredGarbageCollection.reconsider
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
rspeckled-1.0.3 lib/rspeckled/plugins/garbage_collection.rb
rspeckled-1.0.2 lib/rspeckled/plugins/garbage_collection.rb
rspeckled-1.0.1 lib/rspeckled/plugins/garbage_collection.rb
rspeckled-1.0.0 lib/rspeckled/plugins/garbage_collection.rb
rspeckled-0.0.64 lib/rspeckled/plugins/garbage_collection.rb
rspeckled-0.0.63 lib/rspeckled/plugins/garbage_collection.rb
rspeckled-0.0.62 lib/rspeckled/plugins/garbage_collection.rb
rspeckled-0.0.61 lib/rspeckled/plugins/garbage_collection.rb
rspeckled-0.0.60 lib/rspeckled/plugins/garbage_collection.rb
rspeckled-0.0.59 lib/rspeckled/plugins/garbage_collection.rb
rspeckled-0.0.58 lib/rspeckled/plugins/garbage_collection.rb
rspeckled-0.0.57 lib/rspeckled/plugins/garbage_collection.rb
rspeckled-0.0.56 lib/rspeckled/plugins/garbage_collection.rb
rspeckled-0.0.55 lib/rspeckled/plugins/garbage_collection.rb