memory 0.4.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 007d5f4bf3d0a25dc887eefc4c7467f44a021e0658a4ac6acfe186da4c72c435
4
- data.tar.gz: dcc7e341db91dccf9f3928d3eb7901606e31fc3df9bb7701c1ad3c1253e7d2c6
3
+ metadata.gz: 116b9be7bb4a7d1c7b906923132406708953a8e3e7d43687d82f7920192ad74f
4
+ data.tar.gz: bf093a25998cefbf01f8fbc79d92d23bc972c016596acb3678cd6303eb09e034
5
5
  SHA512:
6
- metadata.gz: 0f5831fce8f53208b08a5c2fab8f0d4286077fbe69a9d1fe227888695be775259743f098fb8ef1a2dce9843e478ddcc7f66e37142567f79df9bbfe20f694ffbc
7
- data.tar.gz: fac10ba0b56492a1d870217d31c92fb20e35c9cdb65dfb44d5b7bec41d673b0ccb2631f4d913575fa40474c5eaddece64e821c63cbd2f86819fb9f6b5b305a3c
6
+ metadata.gz: 403676e22f95cd9239f3da72898a9be935c100e236bd51a6fca58d2ebf472a33609efb373dff628cf5f6f1e7ed9ace28dc3abc45adbbdc9975d489539b2f853d
7
+ data.tar.gz: be14f62bb150ab3daec0c9743800e887e606b0ba1545725143484362278779451f9a98dab2a35126d4396d6a57e08c1ccdce28b1a21fe5e894516b16e235b79c
checksums.yaml.gz.sig CHANGED
Binary file
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2020-2023, by Samuel Williams.
4
+ # Copyright, 2020-2024, by Samuel Williams.
5
5
 
6
6
  module Memory
7
7
  UNITS = {
@@ -31,7 +31,7 @@ module Memory
31
31
  end
32
32
 
33
33
  def << allocation
34
- self.memory += allocation.size
34
+ self.memory += allocation.memsize
35
35
  self.count += 1
36
36
  end
37
37
 
data/lib/memory/report.rb CHANGED
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2020-2023, by Samuel Williams.
4
+ # Copyright, 2020-2024, by Samuel Williams.
5
5
 
6
6
  require_relative 'aggregate'
7
7
 
8
8
  module Memory
9
9
  class Report
10
- def self.general
10
+ def self.general(**options)
11
11
  Report.new([
12
12
  Aggregate.new("By Gem", &:gem),
13
13
  Aggregate.new("By File", &:file),
@@ -15,10 +15,12 @@ module Memory
15
15
  Aggregate.new("By Class", &:class_name),
16
16
  ValueAggregate.new("Strings By Gem", &:gem),
17
17
  ValueAggregate.new("Strings By Location", &:location),
18
- ])
18
+ ], **options)
19
19
  end
20
20
 
21
- def initialize(aggregates)
21
+ def initialize(aggregates, retained_only: true)
22
+ @retained_only = retained_only
23
+
22
24
  @total_allocated = Aggregate::Total.new
23
25
  @total_retained = Aggregate::Total.new
24
26
 
@@ -38,16 +40,25 @@ module Memory
38
40
  def concat(allocations)
39
41
  allocations.each do |allocation|
40
42
  @total_allocated << allocation
41
- @total_retained << allocation if allocation.retained
42
43
 
43
- @aggregates.each do |aggregate|
44
- aggregate << allocation
44
+ if allocation.retained
45
+ @total_retained << allocation
46
+ end
47
+
48
+ if !@retained_only || allocation.retained
49
+ @aggregates.each do |aggregate|
50
+ aggregate << allocation
51
+ end
45
52
  end
46
53
  end
47
54
  end
48
55
 
49
56
  def print(io = $stderr)
50
- io.puts "\# Memory Profile", nil
57
+ if @retained_only
58
+ io.puts "\# Retained Memory Profile", nil
59
+ else
60
+ io.puts "\# Memory Profile", nil
61
+ end
51
62
 
52
63
  io.puts "- Total Allocated: #{@total_allocated}"
53
64
  io.puts "- Total Retained: #{@total_retained}"
@@ -17,6 +17,8 @@ require 'objspace'
17
17
  require 'msgpack'
18
18
  require 'console'
19
19
 
20
+ require_relative 'cache'
21
+
20
22
  module Memory
21
23
  class Wrapper < MessagePack::Factory
22
24
  def initialize(cache)
@@ -94,6 +96,9 @@ module Memory
94
96
 
95
97
  # **WARNING** Do not allocate any new Objects between the call to GC.start and the completion of the retained lookups. It is likely that a new Object would reuse an object_id from a GC'd object.
96
98
 
99
+ # Overwrite any immediate values on the C stack to avoid retaining them.
100
+ ObjectSpace.dump(Object.new)
101
+
97
102
  GC.enable
98
103
  3.times{GC.start}
99
104
 
@@ -131,8 +136,8 @@ module Memory
131
136
  @allocated.concat(allocations)
132
137
  end
133
138
 
134
- def report
135
- report = Report.general
139
+ def report(**options)
140
+ report = Report.general(**options)
136
141
 
137
142
  report.concat(@allocated)
138
143
 
@@ -158,7 +163,7 @@ module Memory
158
163
  def track_allocations(generation)
159
164
  rvalue_size = GC::INTERNAL_CONSTANTS[:RVALUE_SIZE]
160
165
 
161
- allocated = Hash.new.compare_by_identity
166
+ allocated = Hash.new
162
167
 
163
168
  ObjectSpace.each_object do |object|
164
169
  next unless ObjectSpace.allocation_generation(object) == generation
@@ -7,5 +7,5 @@
7
7
  # Copyright, 2020-2024, by Samuel Williams.
8
8
 
9
9
  module Memory
10
- VERSION = "0.4.2"
10
+ VERSION = "0.5.0"
11
11
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
@@ -61,7 +61,7 @@ cert_chain:
61
61
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
62
62
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
63
63
  -----END CERTIFICATE-----
64
- date: 2024-02-13 00:00:00.000000000 Z
64
+ date: 2024-06-27 00:00:00.000000000 Z
65
65
  dependencies:
66
66
  - !ruby/object:Gem::Dependency
67
67
  name: bake
@@ -125,7 +125,9 @@ files:
125
125
  homepage: https://github.com/socketry/memory
126
126
  licenses:
127
127
  - MIT
128
- metadata: {}
128
+ metadata:
129
+ documentation_uri: https://socketry.github.io/memory/
130
+ source_code_uri: https://github.com/socketry/memory.git
129
131
  post_install_message:
130
132
  rdoc_options: []
131
133
  require_paths:
@@ -134,14 +136,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
134
136
  requirements:
135
137
  - - ">="
136
138
  - !ruby/object:Gem::Version
137
- version: '3.0'
139
+ version: '3.1'
138
140
  required_rubygems_version: !ruby/object:Gem::Requirement
139
141
  requirements:
140
142
  - - ">="
141
143
  - !ruby/object:Gem::Version
142
144
  version: '0'
143
145
  requirements: []
144
- rubygems_version: 3.5.3
146
+ rubygems_version: 3.5.11
145
147
  signing_key:
146
148
  specification_version: 4
147
149
  summary: Memory profiling routines for Ruby 2.3+
metadata.gz.sig CHANGED
Binary file