Sha256: 1ae4a30d7f846cc8ddf8eb1cfbce653a755d7d5e2a6fec86a7a859ee26004ea0

Contents?: true

Size: 1.26 KB

Versions: 1

Compression:

Stored size: 1.26 KB

Contents

require 'benchmark/ips'

module Vedeu

  module Logging

    module Debug

      # Provide wrapper for 'benchmark-ips' gem.
      #
      class IPS

        attr_accessor :samples
        attr_accessor :benchmark

        # @return [Vedeu::Logging::Debug::IPS]
        def initialize
          @old_stdout = $stdout
          $stdout     = StringIO.new
          @samples    = {}
          @benchmark  = Benchmark::IPS::Job.new
          @count      = 0
        end

        # @param label [String]
        # @return [void]
        def add_item(label = '', &blk)
          samples[label] = blk
          @count += 1

          benchmark.item(label, &blk)
        end

        # @return [void]
        def execute!
          benchmark.compare!
          benchmark.run_warmup
          benchmark.run

          $stdout.sync = true
          benchmark.run_comparison
          benchmark.full_report

          Vedeu.log(type: :debug, message: "IPS:\n#{$stdout.string}".freeze)
          $stdout = @old_stdout

          Vedeu.log(type: :debug, message: "Running: #{key}".freeze)
          samples[key].call
        end

        private

        # @return [void]
        def key
          @key ||= samples.keys.sample
        end

      end # IPS

    end # Debug

  end # Logging

end # Vedeu

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
vedeu-0.6.48 lib/vedeu/logging/ips.rb