\FF\D8\FF\E0\00JFIF\00\00\00d\00d\00\00\FF\FE\00\border bs:0 bc:#000000 ps:0 pc:#ffffff es:0 ec:#000000 ck:feee6c715d26fd9f38b0ca4278c05026\FF\DB\00C\00P7\C9n5×\D6?\BDê\9Ds\EBp\9F[`8m\B7)o\B5\E8\E6I\99\FE3]]A2\BA\8Cw\D6E\93\\DEv\C8\009\F2\F1NI?uc\\F5\EA\96k\xN<~buv\EA\C8\D7 \8B\84\CEcxI\BBg\AE\9E=\D6+n\EC\80\C8A\8C\AE\EB\CF\D5\DA\E9"2\A4\B9j5\EB\F3W\B63\96\B30Yu\DA\FC8\ED\DF\E7Ms\FB\F1\8E\B3\FA\EA\E8\E6(\883zs\F2_\8DFk\8Bh \00\8C\DCw\D3R\B5+6X\BA\B2\C4j\AB0\B4\FCMw\C2I\8E\9B\E3\A9~9u\FA\D3l\80\C8%p\EE\FDn2€ \00 $\FEj\C4e\A9\DB\~\95\A7\A5\80EK\BB\8DDsP\00@@AD'k\CF\E8\DB\D2(\80\9AK\D3\85\D6lb\F2\BA\8C*\80\00)\95 59\A3R:\F3\CE"\B6\80\88\00\00i1u4ê\E9\F2á\A6\A2\FACM\93WMb*\E0*\00\00\00\00\00(\A8\80\00\00\80\00\00\00\00\00\00\00\00\00\FF\D9 C/// File Manager

File Manager

Path: /opt/chef/embedded/lib/ruby/gems/2.7.0/gems/ruby-prof-1.2.0/lib/ruby-prof/

Viewing File: task.rb

#!/usr/bin/env ruby
# encoding: utf-8

require 'rake'
require 'rake/testtask'
require 'fileutils'

module RubyProf

  # Define a task library for profiling unit tests with ruby-prof.
  #
  # All of the options provided by
  # the Rake:TestTask are supported except the loader
  # which is set to ruby-prof.  For detailed information
  # please refer to the Rake:TestTask documentation.
  #
  # ruby-prof specific options include:
  #
  #   output_dir - For each file specified an output
  #                file with profile information will be
  #                written to the output directory.
  #                By default, the output directory is
  #                called "profile" and is created underneath
  #                the current working directory.
  #
  #   printer - Specifies the output printer.  Valid values include
  #             :flat, :graph, :graph_html and :call_tree.
  #
  #   min_percent - Methods that take less than the specified percent
  #                 will not be written out.
  #
  # Example:
  #
  #   require 'ruby-prof/task'
  #
  #   RubyProf::ProfileTask.new do |t|
  #     t.test_files = FileList['test/test*.rb']
  #     t.output_dir = "c:/temp"
  #     t.printer = :graph
  #     t.min_percent = 10
  #   end
  #
  # If rake is invoked with a "TEST=filename" command line option,
  # then the list of test files will be overridden to include only the
  # filename specified on the command line.  This provides an easy way
  # to run just one test.
  #
  # If rake is invoked with a "TESTOPTS=options" command line option,
  # then the given options are passed to the test process after a
  # '--'.  This allows Test::Unit options to be passed to the test
  # suite.
  #
  # Examples:
  #
  #   rake profile                           # run tests normally
  #   rake profile TEST=just_one_file.rb     # run just one test file.
  #   rake profile TESTOPTS="-v"             # run in verbose mode
  #   rake profile TESTOPTS="--runner=fox"   # use the fox test runner

  class ProfileTask < Rake::TestTask
    attr_accessor :output_dir
    attr_accessor :min_percent
    attr_accessor :printer

    def initialize(name = :profile)
      super(name)
    end

    # Create the tasks defined by this task lib.
    def define
      lib_path = @libs.join(File::PATH_SEPARATOR)
      desc "Profile" + (@name==:profile ? "" : " for #{@name}")

      task @name do
        create_output_directory

        @ruby_opts.unshift( "-I#{lib_path}" )
        @ruby_opts.unshift( "-w" ) if @warning
        @ruby_opts.push("-S ruby-prof")
        @ruby_opts.push("--printer #{@printer}")
        @ruby_opts.push("--min_percent #{@min_percent}")

        file_list.each do |file_path|
          run_script(file_path)
        end
      end
      self
    end

    # Run script
    def run_script(script_path)
      run_code = ''
      RakeFileUtils.verbose(@verbose) do
        file_name = File.basename(script_path, File.extname(script_path))
        case @printer
          when :flat, :graph, :call_tree
            file_name += ".txt"
          when :graph_html
            file_name += ".html"
          else
            file_name += ".txt"
        end

        output_file_path = File.join(output_directory, file_name)

        command_line = @ruby_opts.join(" ") +
                      " --file=" + output_file_path +
                      " " + script_path

        puts "ruby " + command_line
        # We have to catch the exeption to continue on.  However,
        # the error message will have been output to STDERR
        # already by the time we get here so we don't have to
        # do that again
        begin
          ruby command_line
        rescue => e
          STDOUT << e << "\n"
          STDOUT.flush
        end
        puts ""
        puts ""
      end
    end

    def output_directory
      File.expand_path(@output_dir)
    end

    def create_output_directory
      if not File.exist?(output_directory)
        Dir.mkdir(output_directory)
      end
    end

    def clean_output_directory
      if File.exist?(output_directory)
        files = Dir.glob(output_directory + '/*')
        FileUtils.rm(files)
      end
    end

    def option_list # :nodoc:
      ENV['OPTIONS'] || @options.join(" ") || ""
    end
  end
end