Sha256: bb0c46c844af3abf8660b0a1748caae8a11417f8023194b2043a8e735a2d3079

Contents?: true

Size: 1.16 KB

Versions: 28

Compression:

Stored size: 1.16 KB

Contents

# frozen_string_literal: true

require 'delegate'

module DeepCover
  module Tools::Profiling
    # Simple forwarding to implementation
    def start
      profiler.start
    end

    def stop
      @results = profiler.stop
    end

    def pause
      profiler.pause
    end

    def resume
      profiler.resume
    end

    def report
      profiler.report(@results)
    end

    # Basic utilities using forwarding methods
    def profile(do_start = true)
      return yield unless do_start
      start
      yield
      stop
      report
    end

    def dont_profile
      pause if profiler_loaded?
      yield
    ensure
      resume if profiler_loaded?
    end

    def profiler_loaded?
      !!@profiler
    end

    private

    # Dependency injection
    def profiler
      @profiler = RubyProfProfiler.new
    end

    class RubyProfProfiler < SimpleDelegator
      def initialize
        raise 'Profiling is not available when using JRuby' if RUBY_PLATFORM == 'java'
        require 'ruby-prof'
        super(RubyProf)
      end

      def report(results)
        printer = RubyProf::GraphPrinter.new(results)
        printer.print(STDOUT, {})
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 2 rubygems

Version Path
deep-cover-core-1.1.0 lib/deep_cover/tools/profiling.rb
deep-cover-core-1.0.0 lib/deep_cover/tools/profiling.rb
deep-cover-core-0.8.1 lib/deep_cover/tools/profiling.rb
deep-cover-core-0.8.0 lib/deep_cover/tools/profiling.rb
deep-cover-core-0.7.10 lib/deep_cover/tools/profiling.rb
deep-cover-core-0.7.9 lib/deep_cover/tools/profiling.rb
deep-cover-core-0.7.8 lib/deep_cover/tools/profiling.rb
deep-cover-core-0.7.7 lib/deep_cover/tools/profiling.rb
deep-cover-core-0.7.6 lib/deep_cover/tools/profiling.rb
deep-cover-core-0.7.5 lib/deep_cover/tools/profiling.rb
deep-cover-core-0.7.4 lib/deep_cover/tools/profiling.rb
deep-cover-core-0.7.3 lib/deep_cover/tools/profiling.rb
deep-cover-core-0.7.2 lib/deep_cover/tools/profiling.rb
deep-cover-core-0.7.1 lib/deep_cover/tools/profiling.rb
deep-cover-core-0.7.0 lib/deep_cover/tools/profiling.rb
deep-cover-core-0.6.4 lib/deep_cover/tools/profiling.rb
deep-cover-core-0.6.3 lib/deep_cover/tools/profiling.rb
deep-cover-core-0.6.3.pre lib/deep_cover/tools/profiling.rb
deep-cover-0.6.2 lib/deep_cover/tools/profiling.rb
deep-cover-0.6.1 lib/deep_cover/tools/profiling.rb