derailed_benchmarks 1.6.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.circleci/config.yml +75 -0
- data/.github/workflows/check_changelog.yml +11 -8
- data/CHANGELOG.md +25 -1
- data/README.md +32 -9
- data/derailed_benchmarks.gemspec +6 -3
- data/gemfiles/rails_5_1.gemfile +3 -1
- data/gemfiles/rails_5_2.gemfile +3 -3
- data/gemfiles/rails_6_1.gemfile +13 -0
- data/gemfiles/rails_git.gemfile +2 -2
- data/lib/derailed_benchmarks.rb +4 -2
- data/lib/derailed_benchmarks/core_ext/kernel_require.rb +29 -24
- data/lib/derailed_benchmarks/git/commit.rb +36 -0
- data/lib/derailed_benchmarks/git/in_path.rb +59 -0
- data/lib/derailed_benchmarks/git/switch_project.rb +128 -0
- data/lib/derailed_benchmarks/git_switch_project.rb +1 -0
- data/lib/derailed_benchmarks/load_tasks.rb +11 -4
- data/lib/derailed_benchmarks/require_tree.rb +11 -1
- data/lib/derailed_benchmarks/{stats_in_file.rb → stats_for_file.rb} +8 -2
- data/lib/derailed_benchmarks/stats_from_dir.rb +53 -9
- data/lib/derailed_benchmarks/tasks.rb +26 -63
- data/lib/derailed_benchmarks/version.rb +1 -1
- data/test/derailed_benchmarks/core_ext/kernel_require_test.rb +70 -11
- data/test/derailed_benchmarks/git_switch_project_test.rb +83 -0
- data/test/derailed_benchmarks/require_tree_test.rb +1 -1
- data/test/derailed_benchmarks/stats_from_dir_test.rb +43 -10
- data/test/fixtures/require/autoload_child.rb +5 -0
- data/test/fixtures/require/autoload_parent.rb +8 -0
- data/test/fixtures/require/child_one.rb +1 -1
- data/test/fixtures/require/child_two.rb +1 -1
- data/test/fixtures/require/load_child.rb +3 -0
- data/test/fixtures/require/load_parent.rb +5 -0
- data/test/fixtures/require/parent_one.rb +1 -1
- data/test/integration/tasks_test.rb +31 -5
- data/test/rails_app/config/application.rb +2 -0
- data/test/rails_app/config/storage.yml +0 -0
- data/test/test_helper.rb +6 -1
- metadata +90 -26
- data/.travis.yml +0 -18
- data/Appraisals +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cd9db4d2438152b5594f932fa35b162859a60024b4d74d00f3d4c7d5ada3f09f
|
4
|
+
data.tar.gz: f77ae05368c875fee001102adbd9652c1ef8001d2160064260c8b59dd455b00b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f97fc2da5011cad2e69a6269776ceb7f4c769c3a7bd8bc5813848fc367f6f11ae6fdef1306139f3b8a3d5ead9cc93f4ce6d199688643111a794964392dd2d5d2
|
7
|
+
data.tar.gz: 39597ebde572f3ea60dcf0224c5986a6480055e5a50b4998f277c2a7fe70503b36d288e0ea146f02bf99a15edafb7c06d6d3be1ed1ba1cee81c3dfc2c0c165f7
|
@@ -0,0 +1,75 @@
|
|
1
|
+
version: 2.1
|
2
|
+
orbs:
|
3
|
+
ruby: circleci/ruby@1.1.2
|
4
|
+
references:
|
5
|
+
run_tests: &run_tests
|
6
|
+
run:
|
7
|
+
name: Run test suite
|
8
|
+
command: bundle exec rake test
|
9
|
+
# Needed because tests execute raw git commands
|
10
|
+
set_git_config: &set_git_config
|
11
|
+
run:
|
12
|
+
name: Set Git config
|
13
|
+
command: git config --global user.email "you@example.com"; git config --global user.name "Your Name"
|
14
|
+
restore: &restore
|
15
|
+
restore_cache:
|
16
|
+
keys:
|
17
|
+
- v1_bundler_deps-{{ .Environment.CIRCLE_JOB }}
|
18
|
+
save: &save
|
19
|
+
save_cache:
|
20
|
+
paths:
|
21
|
+
- ./vendor/bundle
|
22
|
+
key: v1_bundler_deps-{{ .Environment.CIRCLE_JOB }} # CIRCLE_JOB e.g. "ruby-2.5"
|
23
|
+
bundle: &bundle
|
24
|
+
run:
|
25
|
+
name: install dependencies
|
26
|
+
command: |
|
27
|
+
echo "export BUNDLE_JOBS=4" >> $BASH_ENV
|
28
|
+
echo "export BUNDLE_RETRY=3" >> $BASH_ENV
|
29
|
+
echo "export BUNDLE_PATH=$(pwd)/vendor/bundle" >> $BASH_ENV
|
30
|
+
echo "export BUNDLE_GEMFILE=$(pwd)/gemfiles/$GEMFILE_NAME" >> $BASH_ENV
|
31
|
+
source $BASH_ENV
|
32
|
+
|
33
|
+
bundle install
|
34
|
+
bundle update
|
35
|
+
bundle clean
|
36
|
+
mysteps: &mysteps
|
37
|
+
steps:
|
38
|
+
- checkout
|
39
|
+
- <<: *set_git_config
|
40
|
+
- <<: *restore
|
41
|
+
- <<: *bundle
|
42
|
+
- <<: *run_tests
|
43
|
+
- <<: *save
|
44
|
+
|
45
|
+
jobs:
|
46
|
+
test:
|
47
|
+
parameters:
|
48
|
+
ruby_version:
|
49
|
+
type: string
|
50
|
+
gemfile:
|
51
|
+
type: string
|
52
|
+
docker:
|
53
|
+
- image: "ruby:<< parameters.ruby_version >>"
|
54
|
+
environment:
|
55
|
+
GEMFILE_NAME: <<parameters.gemfile>>
|
56
|
+
steps:
|
57
|
+
- checkout
|
58
|
+
- <<: *set_git_config
|
59
|
+
- <<: *restore
|
60
|
+
- <<: *bundle
|
61
|
+
- <<: *run_tests
|
62
|
+
- <<: *save
|
63
|
+
|
64
|
+
workflows:
|
65
|
+
all-tests:
|
66
|
+
jobs:
|
67
|
+
- test:
|
68
|
+
matrix:
|
69
|
+
parameters:
|
70
|
+
ruby_version: ["2.5.8", "2.7.2", "3.0.0"]
|
71
|
+
gemfile: ["rails_5_2.gemfile", "rails_6_1.gemfile", "rails_git.gemfile"]
|
72
|
+
exclude:
|
73
|
+
- ruby_version: "3.0.0"
|
74
|
+
gemfile: rails_5_2.gemfile
|
75
|
+
name: test-ruby-<<matrix.ruby_version>>-<<matrix.gemfile>>
|
@@ -1,10 +1,13 @@
|
|
1
1
|
name: Check Changelog
|
2
|
-
|
2
|
+
|
3
|
+
on:
|
4
|
+
pull_request:
|
5
|
+
types: [opened, reopened, edited, synchronize]
|
3
6
|
jobs:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
build:
|
8
|
+
runs-on: ubuntu-latest
|
9
|
+
steps:
|
10
|
+
- uses: actions/checkout@v1
|
11
|
+
- name: Check that CHANGELOG is touched
|
12
|
+
run: |
|
13
|
+
cat $GITHUB_EVENT_PATH | jq .pull_request.title | grep -i '\[\(\(changelog skip\)\|\(ci skip\)\)\]' || git diff remotes/origin/${{ github.base_ref }} --name-only | grep CHANGELOG.md
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,28 @@
|
|
1
|
-
##
|
1
|
+
## HEAD
|
2
|
+
|
3
|
+
## 2.0.1
|
4
|
+
|
5
|
+
- `rack-test` dependency added (https://github.com/schneems/derailed_benchmarks/pull/187)
|
6
|
+
|
7
|
+
## 2.0.0
|
8
|
+
|
9
|
+
- Syntax errors easier to debug with `dead_end` gem (https://github.com/schneems/derailed_benchmarks/pull/182)
|
10
|
+
- Minimum ruby version is now 2.5 (https://github.com/schneems/derailed_benchmarks/pull/183)
|
11
|
+
- Histograms are now printed side-by-side (https://github.com/schneems/derailed_benchmarks/pull/179)
|
12
|
+
|
13
|
+
## 1.8.1
|
14
|
+
|
15
|
+
- Derailed now tracks memory use from `load` in addition to `require` (https://github.com/schneems/derailed_benchmarks/pull/178)
|
16
|
+
- Correct logging of unsuccessful curl requests to file (https://github.com/schneems/derailed_benchmarks/pull/172)
|
17
|
+
|
18
|
+
## 1.8.0
|
19
|
+
|
20
|
+
- Ruby 2.2 is now officialy supported and tested (https://github.com/schneems/derailed_benchmarks/pull/177)
|
21
|
+
|
22
|
+
## 1.7.0
|
23
|
+
|
24
|
+
- Add histogram support to `perf:library` (https://github.com/schneems/derailed_benchmarks/pull/169)
|
25
|
+
- Fix bug with `Kernel#require` patch when Zeitwerk is enabled (https://github.com/schneems/derailed_benchmarks/pull/170)
|
2
26
|
|
3
27
|
## 1.6.0
|
4
28
|
|
data/README.md
CHANGED
@@ -9,16 +9,13 @@ A series of things you can use to benchmark a Rails or Ruby app.
|
|
9
9
|
|
10
10
|
## Compatibility/Requirements
|
11
11
|
|
12
|
-
This gem has been tested and is known to work with Rails 3.2+ using Ruby
|
13
|
-
2.1+. Some commands __may__ work on older versions of Ruby, but not all commands are supported.
|
14
|
-
|
15
12
|
For some benchmarks, not all, you'll need to verify you have a working version of curl on your OS:
|
16
13
|
|
17
14
|
```
|
18
15
|
$ which curl
|
19
16
|
/usr/bin/curl
|
20
17
|
$ curl -V
|
21
|
-
curl 7.
|
18
|
+
curl 7.64.1 #...
|
22
19
|
```
|
23
20
|
|
24
21
|
## Install
|
@@ -448,11 +445,37 @@ When the test is done it will output which commit "won" and by how much:
|
|
448
445
|
```
|
449
446
|
❤️ ❤️ ❤️ (Statistically Significant) ❤️ ❤️ ❤️
|
450
447
|
|
451
|
-
[
|
452
|
-
FASTER by:
|
453
|
-
1.
|
454
|
-
|
455
|
-
[
|
448
|
+
[f1ab117] (11.3844 seconds) "I am the new commit" ref: "winner"
|
449
|
+
FASTER 🚀🚀🚀 by:
|
450
|
+
1.0062x [older/newer]
|
451
|
+
0.6147% [(older - newer) / older * 100]
|
452
|
+
[5594a2d] (11.4548 seconds) "Old commit" ref: "loser"
|
453
|
+
|
454
|
+
Iterations per sample:
|
455
|
+
Samples: 100
|
456
|
+
|
457
|
+
Test type: Kolmogorov Smirnov
|
458
|
+
Confidence level: 99.0 %
|
459
|
+
Is significant? (max > critical): true
|
460
|
+
D critical: 0.2145966026289347
|
461
|
+
D max: 0.26
|
462
|
+
|
463
|
+
Histograms (time ranges are in seconds):
|
464
|
+
|
465
|
+
[f1ab117] description: [5594a2d] description:
|
466
|
+
"I am the new commit" "Old commit"
|
467
|
+
┌ ┐ ┌ ┐
|
468
|
+
[11.2 , 11.28) ┤▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 12 [11.2 , 11.28) ┤▇▇▇▇ 3
|
469
|
+
[11.28, 11.36) ┤▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 22 [11.28, 11.36) ┤▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 19
|
470
|
+
[11.35, 11.43) ┤▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 30 [11.35, 11.43) ┤▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 17
|
471
|
+
[11.43, 11.51) ┤▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 17 [11.43, 11.51) ┤▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 25
|
472
|
+
[11.5 , 11.58) ┤▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 13 [11.5 , 11.58) ┤▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 15
|
473
|
+
[11.58, 11.66) ┤▇▇▇▇▇▇▇ 6 [11.58, 11.66) ┤▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇▇ 13
|
474
|
+
[11.65, 11.73) ┤ 0 [11.65, 11.73) ┤▇▇▇▇ 3
|
475
|
+
[11.73, 11.81) ┤ 0 [11.73, 11.81) ┤▇▇▇▇ 3
|
476
|
+
[11.8 , 11.88) ┤ 0 [11.8 , 11.88) ┤▇▇▇ 2
|
477
|
+
└ ┘ └ ┘
|
478
|
+
# of runs in range # of runs in range
|
456
479
|
```
|
457
480
|
|
458
481
|
You can provide this to the Rails team along with the example app you used to benchmark (so they can independently verify if needed).
|
data/derailed_benchmarks.gemspec
CHANGED
@@ -20,20 +20,23 @@ Gem::Specification.new do |gem|
|
|
20
20
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
21
21
|
gem.require_paths = ["lib"]
|
22
22
|
|
23
|
-
gem.required_ruby_version = ">= 2.
|
23
|
+
gem.required_ruby_version = ">= 2.5.0"
|
24
24
|
|
25
25
|
gem.add_dependency "heapy", "~> 0"
|
26
|
-
gem.add_dependency "memory_profiler", "
|
26
|
+
gem.add_dependency "memory_profiler", ">= 0", "< 2"
|
27
27
|
gem.add_dependency "get_process_mem", "~> 0"
|
28
28
|
gem.add_dependency "benchmark-ips", "~> 2"
|
29
29
|
gem.add_dependency "rack", ">= 1"
|
30
30
|
gem.add_dependency "rake", "> 10", "< 14"
|
31
31
|
gem.add_dependency "thor", ">= 0.19", "< 2"
|
32
32
|
gem.add_dependency "ruby-statistics", ">= 2.1"
|
33
|
+
gem.add_dependency "mini_histogram", ">= 0.3.0"
|
34
|
+
gem.add_dependency "dead_end", ">= 0"
|
35
|
+
gem.add_dependency "rack-test", ">= 0"
|
33
36
|
|
37
|
+
gem.add_development_dependency "webrick", ">= 0"
|
34
38
|
gem.add_development_dependency "capybara", "~> 2"
|
35
39
|
gem.add_development_dependency "m"
|
36
40
|
gem.add_development_dependency "rails", "> 3", "<= 7"
|
37
41
|
gem.add_development_dependency "devise", "> 3", "< 6"
|
38
|
-
gem.add_development_dependency "appraisal", "2.2.0"
|
39
42
|
end
|
data/gemfiles/rails_5_1.gemfile
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
# BUNDLE_GEMFILE="gemfiles/rails_5_1.gemfile" bundle exec m test/integration/tasks_test.rb:30
|
4
|
+
#
|
3
5
|
# This file was generated by Appraisal
|
4
6
|
|
5
7
|
source "https://rubygems.org"
|
6
8
|
|
7
|
-
gem "rails", "~> 5.1.
|
9
|
+
gem "rails", "~> 5.1.7"
|
8
10
|
|
9
11
|
group :development, :test do
|
10
12
|
gem "sqlite3", platform: [:ruby, :mswin, :mingw]
|
data/gemfiles/rails_5_2.gemfile
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
# This file was generated by Appraisal
|
2
|
+
#
|
3
|
+
# BUNDLE_GEMFILE="gemfiles/rails_5_2.gemfile" bundle exec m test/integration/tasks_test.rb:30
|
4
4
|
|
5
5
|
source "https://rubygems.org"
|
6
6
|
|
7
|
-
gem "rails", "~> 5.2.
|
7
|
+
gem "rails", "~> 5.2.4.4"
|
8
8
|
|
9
9
|
group :development, :test do
|
10
10
|
gem "sqlite3", platform: [:ruby, :mswin, :mingw]
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# This file was generated by Appraisal
|
2
|
+
|
3
|
+
source "https://rubygems.org"
|
4
|
+
|
5
|
+
gem "rails", "~> 6.1.1"
|
6
|
+
|
7
|
+
group :development, :test do
|
8
|
+
gem "sqlite3", platform: [:ruby, :mswin, :mingw]
|
9
|
+
gem "activerecord-jdbcsqlite3-adapter", "~> 1.3.13", platform: :jruby
|
10
|
+
gem "test-unit", "~> 3.0"
|
11
|
+
end
|
12
|
+
|
13
|
+
gemspec path: "../"
|
data/gemfiles/rails_git.gemfile
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# $ BUNDLE_GEMFILE="$(pwd)/gemfiles/rails_git.gemfile" bundle exec m test/integration/tasks_test.rb:
|
3
|
+
# $ BUNDLE_GEMFILE="$(pwd)/gemfiles/rails_git.gemfile" bundle exec m test/integration/tasks_test.rb:50
|
4
4
|
|
5
5
|
source "https://rubygems.org"
|
6
6
|
|
7
|
-
gem "rails", github: "rails/rails", ref: "
|
7
|
+
gem "rails", github: "rails/rails", ref: "12bb9d32f56883914abcd98fd72e3c68c444808d"
|
8
8
|
|
9
9
|
gem 'devise', github: "plataformatec/devise"
|
10
10
|
|
data/lib/derailed_benchmarks.rb
CHANGED
@@ -2,9 +2,10 @@
|
|
2
2
|
|
3
3
|
require 'time'
|
4
4
|
require 'bundler'
|
5
|
-
|
6
5
|
require 'get_process_mem'
|
7
6
|
|
7
|
+
require 'dead_end'
|
8
|
+
|
8
9
|
module DerailedBenchmarks
|
9
10
|
def self.gem_is_bundled?(name)
|
10
11
|
specs = ::Bundler.locked_gems.specs.each_with_object({}) {|spec, hash| hash[spec.name] = spec }
|
@@ -43,8 +44,9 @@ end
|
|
43
44
|
require 'derailed_benchmarks/require_tree'
|
44
45
|
require 'derailed_benchmarks/auth_helper'
|
45
46
|
|
46
|
-
require 'derailed_benchmarks/
|
47
|
+
require 'derailed_benchmarks/stats_for_file'
|
47
48
|
require 'derailed_benchmarks/stats_from_dir'
|
49
|
+
require 'derailed_benchmarks/git/switch_project'
|
48
50
|
|
49
51
|
if DerailedBenchmarks.gem_is_bundled?("devise")
|
50
52
|
DerailedBenchmarks.auth = DerailedBenchmarks::AuthHelpers::Devise.new
|
@@ -11,14 +11,24 @@ ENV['CUT_OFF'] ||= "0.3"
|
|
11
11
|
# Monkey patch kernel to ensure that all `require` calls call the same
|
12
12
|
# method
|
13
13
|
module Kernel
|
14
|
+
REQUIRE_STACK = []
|
14
15
|
|
15
|
-
|
16
|
+
module_function
|
16
17
|
|
17
|
-
|
18
|
-
|
18
|
+
alias_method :original_require, :require
|
19
|
+
alias_method :original_require_relative, :require_relative
|
20
|
+
alias_method(:original_load, :load)
|
21
|
+
|
22
|
+
def load(file, wrap = false)
|
23
|
+
measure_memory_impact(file) do |file|
|
24
|
+
original_load(file)
|
25
|
+
end
|
26
|
+
end
|
19
27
|
|
20
28
|
def require(file)
|
21
|
-
|
29
|
+
measure_memory_impact(file) do |file|
|
30
|
+
original_require(file)
|
31
|
+
end
|
22
32
|
end
|
23
33
|
|
24
34
|
def require_relative(file)
|
@@ -29,10 +39,7 @@ module Kernel
|
|
29
39
|
end
|
30
40
|
end
|
31
41
|
|
32
|
-
|
33
|
-
alias :original_require :require
|
34
|
-
alias :original_require_relative :require_relative
|
35
|
-
end
|
42
|
+
private
|
36
43
|
|
37
44
|
# The core extension we use to measure require time of all requires
|
38
45
|
# When a file is required we create a tree node with its file name.
|
@@ -46,7 +53,7 @@ module Kernel
|
|
46
53
|
# When a require returns we remove it from the require stack so we don't
|
47
54
|
# accidentally push additional children nodes to it. We then store the
|
48
55
|
# memory cost of the require in the tree node.
|
49
|
-
def
|
56
|
+
def measure_memory_impact(file, &block)
|
50
57
|
mem = GetProcessMem.new
|
51
58
|
node = DerailedBenchmarks::RequireTree.new(file)
|
52
59
|
|
@@ -64,31 +71,29 @@ module Kernel
|
|
64
71
|
end
|
65
72
|
end
|
66
73
|
|
67
|
-
# Top level node that will store all require information for the entire app
|
68
|
-
TOP_REQUIRE = DerailedBenchmarks::RequireTree.new("TOP")
|
69
|
-
REQUIRE_STACK.push(TOP_REQUIRE)
|
70
|
-
|
71
|
-
Kernel.define_singleton_method(:require) do |file|
|
72
|
-
measure_memory_impact(file) do |file|
|
73
|
-
# "source_annotation_extractor" is deprecated in Rails 6
|
74
|
-
# # if we don't skip the library it leads to a crash
|
75
|
-
# next if file == "rails/source_annotation_extractor" && Rails.version >= '6.0'
|
76
|
-
original_require(file)
|
77
|
-
end
|
78
|
-
end
|
79
74
|
|
75
|
+
# I honestly have no idea why this Object delegation is needed
|
76
|
+
# I keep staring at bootsnap and it doesn't have to do this
|
77
|
+
# is there a bug in their implementation they haven't caught or
|
78
|
+
# am I doing something different?
|
80
79
|
class Object
|
81
80
|
private
|
81
|
+
def load(path, wrap = false)
|
82
|
+
Kernel.load(path, wrap)
|
83
|
+
end
|
82
84
|
|
83
85
|
def require(path)
|
84
86
|
Kernel.require(path)
|
85
87
|
end
|
86
88
|
end
|
87
89
|
|
88
|
-
#
|
89
|
-
|
90
|
-
TOP_REQUIRE
|
90
|
+
# Top level node that will store all require information for the entire app
|
91
|
+
TOP_REQUIRE = DerailedBenchmarks::RequireTree.new("TOP")
|
92
|
+
REQUIRE_STACK.push(TOP_REQUIRE)
|
93
|
+
TOP_REQUIRE.cost = GetProcessMem.new.mb
|
94
|
+
|
91
95
|
def TOP_REQUIRE.print_sorted_children(*args)
|
92
96
|
self.cost = GetProcessMem.new.mb - self.cost
|
93
97
|
super
|
94
98
|
end
|
99
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module DerailedBenchmarks
|
2
|
+
# Represents a specific commit in a git repo
|
3
|
+
#
|
4
|
+
# Can be used to get information from the commit or to check it out
|
5
|
+
#
|
6
|
+
# commit = GitCommit.new(path: "path/to/repo", ref: "6e642963acec0ff64af51bd6fba8db3c4176ed6e")
|
7
|
+
# commit.short_sha # => "6e64296"
|
8
|
+
# commit.checkout! # Will check out the current commit at the repo in the path
|
9
|
+
class Git::Commit
|
10
|
+
attr_reader :ref, :description, :time, :short_sha, :log
|
11
|
+
|
12
|
+
def initialize(path: , ref: , log_dir: Pathname.new("/dev/null"))
|
13
|
+
@in_git_path = Git::InPath.new(path)
|
14
|
+
@ref = ref
|
15
|
+
@log = log_dir.join("#{file_safe_ref}.bench.txt")
|
16
|
+
|
17
|
+
Dir.chdir(path) do
|
18
|
+
checkout!
|
19
|
+
@description = @in_git_path.description
|
20
|
+
@short_sha = @in_git_path.short_sha
|
21
|
+
@time = @in_git_path.time
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
alias :desc :description
|
26
|
+
alias :file :log
|
27
|
+
|
28
|
+
def checkout!
|
29
|
+
@in_git_path.checkout!(ref)
|
30
|
+
end
|
31
|
+
|
32
|
+
private def file_safe_ref
|
33
|
+
ref.gsub('/', ':')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|