Sha256: c26dafbd0f3848ed7f743e188a88477f1a4e0de4f3aeee16ccc6068798ac2bec

Contents?: true

Size: 1.19 KB

Versions: 9

Compression:

Stored size: 1.19 KB

Contents

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

    def self.start
      cycle_garbage_collector if enabled?
    end

    def self.reconsider
      if enabled? && over_deferrment_threshold?
        cycle_garbage_collector

        garbage_last_collected_at = Time.now
      end
    end

    private

    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

    def self.garbage_last_collected_at=(value)
      @garbage_last_collected_at = value
    end
  end
end

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

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

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
rspectacular-0.62.0 lib/rspectacular/support/garbage_collection.rb
rspectacular-0.61.0 lib/rspectacular/support/garbage_collection.rb
rspectacular-0.60.0 lib/rspectacular/support/garbage_collection.rb
rspectacular-0.59.0 lib/rspectacular/support/garbage_collection.rb
rspectacular-0.58.0 lib/rspectacular/support/garbage_collection.rb
rspectacular-0.57.0 lib/rspectacular/support/garbage_collection.rb
rspectacular-0.56.0 lib/rspectacular/support/garbage_collection.rb
rspectacular-0.55.0 lib/rspectacular/support/garbage_collection.rb
rspectacular-0.54.0 lib/rspectacular/support/garbage_collection.rb