File: derailed

package info (click to toggle)
ruby-derailed-benchmarks 1.7.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 760 kB
  • sloc: ruby: 1,317; makefile: 4
file content (93 lines) | stat: -rwxr-xr-x 2,460 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#!/usr/bin/env ruby
# frozen_string_literal: true

unless File.respond_to? :realpath
  class File #:nodoc:
    def self.realpath path
      return realpath(File.readlink(path)) if symlink?(path)
      path
    end
  end
end
lib = File.expand_path(File.dirname(File.realpath(__FILE__)) + '/../lib')
$: << lib


require File.join(lib, 'derailed_benchmarks.rb')

Bundler.setup

require 'thor'

class DerailedBenchmarkCLI < Thor

  desc "exec", "executes given derailed benchmark"
  def exec(task = nil)
    setup_bundler!
    require 'derailed_benchmarks'
    require 'rake'
    Rake::TaskManager.record_task_metadata = true
    require 'derailed_benchmarks/tasks'

    perf_rakefile = File.expand_path(".", "perf.rake")
    load perf_rakefile if File.exist?(perf_rakefile)

    if task.nil? || task == "--help"
      Rake.application.tasks.map do |task, n|
        next unless task.comment
        puts "  $ derailed exec #{task.name}  # #{task.comment}"
      end
    else
      task = "perf:#{task}" unless Rake::Task.task_defined?(task)
      Rake::Task[task].invoke
    end
  end

  desc "bundle:objects", "measures objects created by gems"
  define_method(:"bundle:objects") do |env = "production"|
    setup_bundler!
    env = [:default] + env.split(",")
    puts "Measuring objects created by gems in groups #{ env.inspect }"
    require 'memory_profiler'
    report = MemoryProfiler.report do
      Bundler.require(*env)
    end
    report.pretty_print
  end

  map :"bundler:objects" => :"bundle:objects"

  desc "bundle:mem", "measures memory used by gems at boot time"
  define_method(:"bundle:mem") do |env = "production"|
    env = [:default] + env.split(",")
    require 'get_process_mem'
    mem    = GetProcessMem.new
    require 'derailed_benchmarks/core_ext/kernel_require'
    before = mem.mb
    setup_bundler!
    Bundler.require(*env)
    after  = mem.mb
    TOP_REQUIRE.print_sorted_children
  end
  map :"bundler:mem" => :"bundle:mem"

  private
    def setup_bundler!
      ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
      require 'bundler/setup'

      begin
        if ENV["DERAILED_SKIP_ACTIVE_RECORD"]
          require "action_controller/railtie"
          require "action_mailer/railtie"
          require "sprockets/railtie"
          require "rails/test_unit/railtie"
        else
          require 'rails/all'
        end
      rescue LoadError
      end
    end
end

DerailedBenchmarkCLI.start(ARGV)