diff options
| author | Samuel Giddins <segiddins@segiddins.me> | 2023-09-18 19:18:21 -0700 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2023-11-26 22:07:39 +0000 |
| commit | 08308fe3e8fd51f4445be9408a418d9ac6960921 (patch) | |
| tree | ff07be79dbd8244dc512a8b55f2ae4d1f011baff /lib | |
| parent | cc5d1bf026bcc5b4929a4f9d5e32d2fa5730348c (diff) | |
[rubygems/rubygems] Reduce allocations when installing gems with bundler
```
==> memprof.after.txt <==
Total allocated: 1.13 MB (2352 objects)
Total retained: 10.08 kB (78 objects)
==> memprof.before.txt <==
Total allocated: 46.27 MB (38439 objects)
Total retained: 9.94 kB (75 objects)
```
Yes, we were allocating 45MB of arrays in `dependencies_installed?`,
it was accidentally cubic.
https://github.com/rubygems/rubygems/commit/13ab874388
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/bundler/installer/parallel_installer.rb | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/lib/bundler/installer/parallel_installer.rb b/lib/bundler/installer/parallel_installer.rb index 11a90b36cb..02ae7d535f 100644 --- a/lib/bundler/installer/parallel_installer.rb +++ b/lib/bundler/installer/parallel_installer.rb @@ -42,8 +42,7 @@ module Bundler # Checks installed dependencies against spec's dependencies to make # sure needed dependencies have been installed. - def dependencies_installed?(all_specs) - installed_specs = all_specs.select(&:installed?).map(&:name) + def dependencies_installed?(installed_specs) dependencies.all? {|d| installed_specs.include? d.name } end @@ -183,8 +182,14 @@ module Bundler # previously installed specifications. We continue until all specs # are installed. def enqueue_specs - @specs.select(&:ready_to_enqueue?).each do |spec| - if spec.dependencies_installed? @specs + installed_specs = {} + @specs.each do |spec| + next unless spec.installed? + installed_specs[spec.name] = true + end + + @specs.each do |spec| + if spec.ready_to_enqueue? && spec.dependencies_installed?(installed_specs) spec.state = :enqueued worker_pool.enq spec end |
