memory_profiler 0.0.4 → 0.9.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
  SHA1:
3
- metadata.gz: b345222e30ca9313e946be9fedfdcb9ece8b4c43
4
- data.tar.gz: 1f761ce97506578e6b994e2889da27926822fd52
3
+ metadata.gz: e6f50e313b79d97881748e82320ba77ba9ba837a
4
+ data.tar.gz: 06eef05f9dd835ea1cd95f7f794b6345aed60022
5
5
  SHA512:
6
- metadata.gz: c7fe8db0b7951f6c9fead3f6e2dcd0367e76c9a30b7999ee000ab0c147583afbb3e33236de694f3d40eb9738af09aecc558519602479f1b6a724e8fff2d7b8e3
7
- data.tar.gz: 38e193bbe4a69aba9f1dce234c67d8d59805b4d48feb525de0d7929ceabe0c1df0cb427089313e8051aeb1246b77491c436232f5ca0558cf0557482ec42cc7c5
6
+ metadata.gz: 62046435ace9583f49c43519aeb6d07fe8ca8486fc198e2cd739dbed60bfacafd51ccc935b0ac966fddf9b34f15f031c3bf26274967d5c148c8ab925dae8b9c5
7
+ data.tar.gz: eb925c93cc41951be2510590860ae507da6e5a2eb7bd7702b53193558f820826e3ff8e7131ba53692ca6c29f943a77fc689ec6c67690f0394edcc7532529171b
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # MemoryProfiler
2
2
 
3
- A memory profiler for MRI head
3
+ A memory profiler for Ruby 2.1.0
4
4
 
5
5
  [![Build Status](https://travis-ci.org/SamSaffron/memory_profiler.png?branch=master)](https://travis-ci.org/SamSaffron/memory_profiler)
6
6
 
@@ -20,7 +20,7 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- ```
23
+ ```ruby
24
24
  require 'memory_profiler'
25
25
  report = MemoryProfiler.report do
26
26
  # run your code here
@@ -83,48 +83,9 @@ allocated memory by location
83
83
  /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:523 x 265920
84
84
  /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55 x 222705
85
85
  /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/loader.rb:215 x 218105
86
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:135 x 62688
87
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:224 x 52728
88
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/cache.rb:62 x 48503
89
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:60 x 33480
90
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/basic_specification.rb:62 x 10906
91
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/x86_64-linux/json/ext/parser.so:0 x 8200
92
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/loader.rb:30 x 4388
93
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/loader.rb:239 x 3715
94
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/basic_specification.rb:28 x 3237
95
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/x86_64-linux/json/ext/generator.so:0 x 2463
96
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:266 x 2428
97
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/basic_specification.rb:61 x 2339
98
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems.rb:1089 x 2218
99
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/basic_specification.rb:68 x 1506
100
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:36 x 800
101
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/specification.rb:330 x 800
102
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:0 x 627
103
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/basic_specification.rb:124 x 609
104
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/defaults.rb:39 x 520
105
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/loader_path.rb:15 x 377
106
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/version.rb:4 x 369
107
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/loader.rb:225 x 209
108
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:361 x 201
109
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:95 x 201
110
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:299 x 201
111
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/loader.rb:60 x 174
112
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/specification.rb:1420 x 169
113
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:283 x 161
114
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:199 x 161
115
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:87 x 161
116
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:218 x 161
117
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/loader.rb:20 x 161
118
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:300 x 161
119
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:22 x 161
120
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:204 x 161
121
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types.rb:69 x 161
122
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:194 x 161
123
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:294 x 161
124
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:222 x 161
125
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/generic_object.rb:12 x 161
126
-
127
- allocated objects by gem
86
+ [REDACTED]
87
+
88
+ allocated]objects by gem
128
89
  -----------------------------------
129
90
  mime-types-2.0 x 56564
130
91
  2.1.0-github/lib x 22210
@@ -170,43 +131,7 @@ allocated objects by location
170
131
  /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:224 x 312
171
132
  /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/cache.rb:62 x 287
172
133
  /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/x86_64-linux/json/ext/parser.so:0 x 124
173
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/basic_specification.rb:62 x 82
174
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:135 x 80
175
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems.rb:1089 x 53
176
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/basic_specification.rb:28 x 39
177
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/x86_64-linux/json/ext/generator.so:0 x 37
178
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/basic_specification.rb:61 x 23
179
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:266 x 22
180
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/specification.rb:330 x 20
181
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:36 x 20
182
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/basic_specification.rb:68 x 13
183
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/defaults.rb:39 x 13
184
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/basic_specification.rb:124 x 12
185
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/loader.rb:239 x 8
186
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:0 x 6
187
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/version.rb:4 x 6
188
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/loader_path.rb:15 x 4
189
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/loader.rb:30 x 4
190
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/loader.rb:215 x 3
191
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/specification.rb:1747 x 2
192
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/loader.rb:225 x 2
193
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/version.rb:155 x 2
194
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:70 x 2
195
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:361 x 2
196
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:71 x 2
197
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_gem.rb:39 x 2
198
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:299 x 2
199
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/loader.rb:60 x 2
200
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/specification.rb:1269 x 2
201
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:95 x 2
202
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:97 x 1
203
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/ext.rb:12 x 1
204
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/ext.rb:1 x 1
205
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:78 x 1
206
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/ext.rb:7 x 1
207
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:91 x 1
208
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:87 x 1
209
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:79 x 1
134
+ [REDACTED]
210
135
 
211
136
  retained memory by gem
212
137
  -----------------------------------
@@ -250,35 +175,7 @@ retained memory by location
250
175
  /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/basic_specification.rb:124 x 169
251
176
  /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:122 x 89
252
177
  /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:46 x 89
253
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:132 x 89
254
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:33 x 89
255
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:71 x 80
256
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/specification.rb:1269 x 80
257
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:70 x 80
258
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:266 x 80
259
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:30 x 40
260
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:60 x 40
261
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:0 x 40
262
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:74 x 40
263
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:75 x 40
264
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:76 x 40
265
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:77 x 40
266
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:78 x 40
267
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types.rb:75 x 40
268
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/version.rb:3 x 40
269
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/generic_object.rb:4 x 40
270
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/ext.rb:12 x 40
271
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:97 x 40
272
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:95 x 40
273
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:361 x 40
274
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:299 x 40
275
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/cache.rb:3 x 40
276
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/cache.rb:59 x 40
277
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:126 x 40
278
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/loader_path.rb:3 x 40
279
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:119 x 40
280
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:115 x 40
281
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:106 x 40
178
+ [REDUCTED]
282
179
 
283
180
  retained objects by gem
284
181
  -----------------------------------
@@ -316,42 +213,7 @@ retained objects by location
316
213
  /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/cache.rb:62 x 287
317
214
  /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/x86_64-linux/json/ext/generator.so:0 x 32
318
215
  /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:135 x 15
319
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/x86_64-linux/json/ext/parser.so:0 x 9
320
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:71 x 2
321
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:70 x 2
322
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:266 x 2
323
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/specification.rb:1269 x 2
324
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:30 x 1
325
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:60 x 1
326
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:75 x 1
327
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:46 x 1
328
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:33 x 1
329
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:76 x 1
330
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:74 x 1
331
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:77 x 1
332
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:78 x 1
333
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:0 x 1
334
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types.rb:75 x 1
335
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/cache.rb:3 x 1
336
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/cache.rb:59 x 1
337
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/loader.rb:239 x 1
338
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/loader_path.rb:15 x 1
339
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/basic_specification.rb:124 x 1
340
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/version.rb:3 x 1
341
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/generic_object.rb:4 x 1
342
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/ext.rb:12 x 1
343
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:97 x 1
344
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:95 x 1
345
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:361 x 1
346
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:299 x 1
347
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/loader_path.rb:3 x 1
348
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:132 x 1
349
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:126 x 1
350
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:122 x 1
351
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:119 x 1
352
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:115 x 1
353
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:106 x 1
354
-
216
+ [REDUCTED]
355
217
 
356
218
  Allocated String Report
357
219
  -----------------------------------
@@ -392,177 +254,7 @@ Allocated String Report
392
254
  "IANA" x 2824
393
255
  /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 1412
394
256
  /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 1412
395
- "base64" x 1529
396
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 1525
397
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55 x 3
398
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:70 x 1
399
- "audio" x 1500
400
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:522 x 600
401
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:521 x 300
402
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 300
403
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 300
404
- "video" x 940
405
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:522 x 376
406
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 188
407
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:521 x 188
408
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 188
409
- "extensions" x 882
410
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 878
411
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55 x 4
412
- "text" x 772
413
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:522 x 308
414
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 154
415
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 154
416
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:521 x 154
417
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55 x 2
418
- "image" x 710
419
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:522 x 284
420
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:521 x 142
421
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 142
422
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 142
423
- "to_json" x 414
424
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:60 x 411
425
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55 x 3
426
- "message" x 210
427
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:522 x 84
428
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:521 x 42
429
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 42
430
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 42
431
- "multipart" x 210
432
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:522 x 84
433
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 42
434
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 42
435
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:521 x 42
436
- "\n" x 197
437
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55 x 194
438
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:79 x 1
439
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:135 x 1
440
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:78 x 1
441
- "model" x 150
442
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:522 x 60
443
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 30
444
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 30
445
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:521 x 30
446
- "[Murata]" x 148
447
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 74
448
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 74
449
- "obsolete" x 135
450
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 130
451
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55 x 5
452
- "use-instead" x 111
453
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 108
454
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55 x 3
455
- " end\n" x 90
456
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55 x 90
457
- " end\n" x 81
458
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55 x 81
459
- "example" x 80
460
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:522 x 32
461
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:521 x 16
462
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 16
463
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 16
464
- "8bit" x 70
465
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 67
466
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55 x 2
467
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:70 x 1
468
- "quoted-printable" x 66
469
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 62
470
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55 x 3
471
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:71 x 1
472
- " #\n" x 54
473
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55 x 54
474
- "LTSW" x 49
475
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 49
476
- "1d-interleaved-parityfec" x 48
477
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:522 x 24
478
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:521 x 8
479
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 8
480
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 8
481
- "rtx" x 42
482
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:522 x 16
483
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:521 x 8
484
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 8
485
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 8
486
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 1
487
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/cache.rb:62 x 1
488
- "[W3C]" x 42
489
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 21
490
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 21
491
- "encaprtp" x 40
492
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:522 x 16
493
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:521 x 8
494
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 8
495
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 8
496
- "parityfec" x 40
497
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:522 x 16
498
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 8
499
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 8
500
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:521 x 8
501
- "RFC4856" x 40
502
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 20
503
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 20
504
- "rtploopback" x 40
505
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:522 x 16
506
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:521 x 8
507
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 8
508
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 8
509
- "ulpfec" x 40
510
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:522 x 16
511
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:521 x 8
512
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 8
513
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 8
514
- "raptorfec" x 40
515
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:522 x 16
516
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:521 x 8
517
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 8
518
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 8
519
- "mp4" x 38
520
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:522 x 12
521
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:521 x 6
522
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 6
523
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 6
524
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:224 x 4
525
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 4
526
- "#\n" x 37
527
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55 x 37
528
- "[Nokia]" x 36
529
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 18
530
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 18
531
- "[OMNA - Open Mobile Naming Authority=OMNA-OpenMobileNamingAuthority]" x 36
532
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 18
533
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 18
534
- "ogg" x 34
535
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:522 x 12
536
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:521 x 6
537
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 6
538
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 6
539
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 2
540
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:224 x 1
541
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/cache.rb:62 x 1
542
- "[OASIS]" x 34
543
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 17
544
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 17
545
- "[Schubert]" x 34
546
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 17
547
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 17
548
- " #\n" x 33
549
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55 x 33
550
- "rtf" x 33
551
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:522 x 12
552
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 8
553
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 4
554
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 4
555
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:521 x 4
556
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/types/cache.rb:62 x 1
557
- "RFC5707" x 32
558
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 16
559
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 16
560
- "RFC2046" x 32
561
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 16
562
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 16
563
- "[3GPP]" x 32
564
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 16
565
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 16
257
+ [REDUCTED]
566
258
 
567
259
  Retained String Report
568
260
  -----------------------------------
@@ -586,145 +278,26 @@ Retained String Report
586
278
  /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 77
587
279
  /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 77
588
280
  /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55 x 1
589
- "[Murata]" x 148
590
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 74
591
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 74
592
- "image" x 142
593
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 71
594
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 71
595
- "8bit" x 68
596
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 67
597
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:70 x 1
598
- "quoted-printable" x 64
599
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 62
600
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:71 x 1
601
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/rubygems/core_ext/kernel_require.rb:55 x 1
602
- "LTSW" x 49
603
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 49
604
- "[W3C]" x 42
605
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 21
606
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 21
607
- "multipart" x 42
608
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 21
609
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 21
610
- "message" x 42
611
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 21
612
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 21
613
- "RFC4856" x 40
614
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 20
615
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 20
616
- "[OMNA - Open Mobile Naming Authority=OMNA-OpenMobileNamingAuthority]" x 36
617
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 18
618
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 18
619
- "[Nokia]" x 36
620
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 18
621
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 18
622
- "[Schubert]" x 34
623
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 17
624
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 17
625
- "[OASIS]" x 34
626
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 17
627
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 17
628
- "RFC2046" x 32
629
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 16
630
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 16
631
- "RFC5707" x 32
632
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 16
633
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 16
634
- "[3GPP]" x 32
635
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 16
636
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 16
637
- "model" x 30
638
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 15
639
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 15
640
- "RFC2045" x 30
641
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 15
642
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 15
643
- "[Petersen]" x 30
644
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 15
645
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 15
646
- "[Rauschenbach]" x 28
647
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 14
648
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 14
649
- "[Hu]" x 28
650
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 14
651
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 14
652
- "[Rae]" x 26
653
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 13
654
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 13
655
- "[Dolan]" x 26
656
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 13
657
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 13
658
- "[Martin]" x 26
659
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 13
660
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 13
661
- "RFC3555" x 24
662
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 12
663
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 12
664
- "RFC5934" x 22
665
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 11
666
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 11
667
- "[D'Esclercs=DEsclercs]" x 22
668
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 11
669
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 11
670
- "[Hattersley]" x 18
671
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 9
672
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 9
673
- "RFC6381" x 18
674
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 9
675
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 9
676
- "[Siebert]" x 16
677
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 8
678
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 8
679
- "[Yue]" x 16
680
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 8
681
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 8
682
- "RFC6849" x 16
683
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 8
684
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 8
685
- "[Lindner]" x 16
686
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 8
687
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 8
688
- "RFC4735" x 16
689
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 8
690
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 8
691
- "[Faure]" x 16
692
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 8
693
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 8
694
- "[Patton]" x 16
695
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 8
696
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 8
697
- "RFC5109" x 16
698
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 8
699
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 8
700
- "[Andersson]" x 16
701
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 8
702
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 8
703
- "example" x 16
704
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 8
705
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 8
706
- "[Joseph]" x 14
707
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 7
708
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 7
709
- "[OMA-DM Work Group]" x 14
710
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 7
711
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 7
712
- "mp4" x 14
713
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 4
714
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:224 x 4
715
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:632 x 3
716
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:629 x 3
717
- "[OMA Push to Talk over Cellular (POC) Working Group]" x 12
718
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 6
719
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 6
720
- "[Steidl]" x 12
721
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/2.1.0/json/common.rb:155 x 6
722
- /home/sam/.rbenv/versions/2.1.0-github/lib/ruby/gems/2.1.0/gems/mime-types-2.0/lib/mime/type.rb:302 x 6
723
- => nil
724
-
281
+ [REDUCTED]
725
282
 
726
283
  ```
727
284
 
285
+ The data is also available in the MemoryProfiler::Results object returned.
286
+
287
+ ### Retained vs Allocated
288
+
289
+ The report breaks down 2 key concepts.
290
+
291
+ **Retained**: long lived memory use and object count retained due to the execution of the code block.
292
+
293
+ **Allocated**: All object allocation and memory allocation during code block.
294
+
295
+ As a general rule "retained" will always be smaller than or equal to allocated.
296
+
297
+ Memory profiler will tell you aggregate costs of the above, for example requiring the mime-types gem above results in approx 2MB of retained memory in 22K or so objects. The actual RSS cost will always be slightly higher as MRI heaps are not squashed to size and memory fragments. In future we may be able to calculate a rough long term GC cost of retained objects (for major GCs).
298
+
299
+ Memory profiler also performs some String analysis to help you find strings that would heavily benefit from #freeze. In the example above the string IANA is retained in memory 2824 times, this costs you a minimum of RVALUE_SIZE (40 on x64) * 2824.
300
+
728
301
 
729
302
 
730
303
  ## Contributing
@@ -737,6 +310,10 @@ Retained String Report
737
310
 
738
311
  ## Changelog
739
312
 
313
+ ### 0.9.0
314
+ - This is quite stable, upping version to reflect
315
+ - Fixed bug where it would crash when location was nil for some reason
316
+
740
317
 
741
318
  ### 0.0.4
742
319
  - Added compatability with released version of Ruby 2.1.0
data/Rakefile CHANGED
@@ -5,4 +5,4 @@ Rake::TestTask.new do |t|
5
5
  t.pattern = "test/test_*.rb"
6
6
  end
7
7
 
8
-
8
+ task default: "test"
@@ -1,5 +1,7 @@
1
1
  require "memory_profiler/version"
2
2
  require "memory_profiler/helpers"
3
+ require "memory_profiler/polychrome"
4
+ require "memory_profiler/monochrome"
3
5
  require "memory_profiler/top_n"
4
6
  require "memory_profiler/stat"
5
7
  require "memory_profiler/stat_hash"
@@ -0,0 +1,18 @@
1
+ module MemoryProfiler
2
+
3
+ class Monochrome
4
+
5
+ def path(text)
6
+ text
7
+ end
8
+
9
+ def string(text)
10
+ text
11
+ end
12
+
13
+ def line(text)
14
+ text
15
+ end
16
+ end
17
+
18
+ end
@@ -0,0 +1,97 @@
1
+ module MemoryProfiler
2
+
3
+ class Polychrome
4
+
5
+ def path(text)
6
+ gray(text)
7
+ end
8
+
9
+ def string(text)
10
+ green(text)
11
+ end
12
+
13
+ def line(text)
14
+ gray(text)
15
+ end
16
+
17
+ private
18
+
19
+ def black(str)
20
+ "\033[30m#{str}\033[0m"
21
+ end
22
+
23
+ def red(str)
24
+ "\033[31m#{str}\033[0m"
25
+ end
26
+
27
+ def green(str)
28
+ "\033[32m#{str}\033[0m"
29
+ end
30
+
31
+ def brown(str)
32
+ "\033[33m#{str}\033[0m"
33
+ end
34
+
35
+ def blue(str)
36
+ "\033[34m#{str}\033[0m"
37
+ end
38
+
39
+ def magenta(str)
40
+ "\033[35m#{str}\033[0m"
41
+ end
42
+
43
+ def cyan(str)
44
+ "\033[36m#{str}\033[0m"
45
+ end
46
+
47
+ def gray(str)
48
+ "\033[37m#{str}\033[0m"
49
+ end
50
+
51
+ def bg_black(str)
52
+ "\033[40m#{str}\033[0m"
53
+ end
54
+
55
+ def bg_red(str)
56
+ "\033[41m#{str}\033[0m"
57
+ end
58
+
59
+ def bg_green(str)
60
+ "\033[42m#{str}\033[0m"
61
+ end
62
+
63
+ def bg_brown(str)
64
+ "\033[43m#{str}\033[0m"
65
+ end
66
+
67
+ def bg_blue(str)
68
+ "\033[44m#{str}\033[0m"
69
+ end
70
+
71
+ def bg_magenta(str)
72
+ "\033[45m#{str}\033[0m"
73
+ end
74
+
75
+ def bg_cyan(str)
76
+ "\033[46m#{str}\033[0m"
77
+ end
78
+
79
+ def bg_gray(str)
80
+ "\033[47m#{str}\033[0m"
81
+ end
82
+
83
+ def bold(str)
84
+ "\033[1m#{str}\033[22m"
85
+ end
86
+
87
+ def reverse_color(str)
88
+ "\033[7m#{str}\033[27m"
89
+ end
90
+
91
+ def no_colors
92
+ self.gsub /\033\[\d+m/, "";
93
+ end
94
+
95
+ end
96
+
97
+ end
@@ -1,17 +1,35 @@
1
1
  require 'objspace'
2
2
  module MemoryProfiler
3
+ # Reporter is the top level api used for generating memory reports
4
+ #
5
+ # @example Measure object allocation in a block
6
+ #
7
+ # report = Reporter.report(top: 50) do
8
+ # 5.times { "foo" }
9
+ # end
3
10
  class Reporter
11
+ attr_reader :top, :trace
4
12
 
13
+ def initialize(opts = {})
14
+ @top = opts[:top] || 50
15
+ @trace = opts[:trace]
16
+ @ignore_files = opts[:ignore_files]
17
+ end
18
+
19
+ # Helper for generating new reporter and running against block
5
20
  def self.report(opts={}, &block)
6
- report = self.new
7
- report.run(opts,&block)
21
+ self.new(opts).run(&block)
8
22
  end
9
23
 
10
- def run(opts={},&block)
11
- allocated, rvalue_size = nil
24
+ # Collects object allocation and memory of ruby code inside of passed block.
25
+ #
26
+ # @param [Hash] opts the options to create a message with.
27
+ # @option opts [Fixnum] :top max number of entries to output in report
28
+ # @option opts [Array <Class>] :trace an array of classes you explicitly want to trace
29
+ # @return [MemoryProfiler::Results]
30
+ def run(&block)
12
31
 
13
- top = opts[:top] || 50
14
- trace = opts[:trace]
32
+ allocated, rvalue_size = nil
15
33
 
16
34
  rvalue_size = GC::INTERNAL_CONSTANTS[:RVALUE_SIZE]
17
35
  Helpers.full_gc
@@ -20,11 +38,11 @@ module MemoryProfiler
20
38
  ObjectSpace.trace_object_allocations do
21
39
  generation = GC.count
22
40
  block.call
23
- allocated = object_list(generation, rvalue_size, trace)
41
+ allocated = object_list(generation, rvalue_size)
24
42
  end
25
43
 
26
44
  results = Results.new
27
- results.strings_allocated = results.string_report(allocated,top)
45
+ results.strings_allocated = results.string_report(allocated, top)
28
46
 
29
47
  GC.enable
30
48
 
@@ -37,23 +55,35 @@ module MemoryProfiler
37
55
  retained[obj.__id__] = found if found
38
56
  rescue
39
57
  # __id__ is not defined on BasicObject, skip it
40
- # we can probably trasplant the object_id at this point,
58
+ # we can probably trasplant the object_id at this point,
41
59
  # but it is quite rare
42
60
  end
43
61
  end
44
62
 
45
- results.register_results(allocated,retained,top)
63
+ results.register_results(allocated, retained, top)
46
64
  results
65
+ end
66
+
67
+ def trace_all?
68
+ !trace
69
+ end
47
70
 
71
+ def ignore_file?(file)
72
+ return true if file == __FILE__
73
+ @ignore_files && @ignore_files =~ file
48
74
  end
49
75
 
50
- def object_list(generation, rvalue_size, trace)
76
+ # Iterates through objects in memory of a given generation.
77
+ # Stores results along with meta data of objects collected.
78
+ def object_list(generation, rvalue_size)
79
+
51
80
  results = StatHash.new
52
81
  objs = []
53
82
 
54
83
  ObjectSpace.each_object do |obj|
84
+ next unless generation == ObjectSpace.allocation_generation(obj)
55
85
  begin
56
- if !trace || trace.include?(obj.class)
86
+ if trace_all? || trace.include?(obj.class)
57
87
  objs << obj
58
88
  end
59
89
  rescue
@@ -62,25 +92,23 @@ module MemoryProfiler
62
92
  end
63
93
 
64
94
  objs.each do |obj|
65
- if generation == ObjectSpace.allocation_generation(obj)
66
- file = ObjectSpace.allocation_sourcefile(obj)
67
- unless file == __FILE__
68
- line = ObjectSpace.allocation_sourceline(obj)
69
- class_path = ObjectSpace.allocation_class_path(obj)
70
- method_id = ObjectSpace.allocation_method_id(obj)
71
-
72
- class_name = obj.class.name rescue "BasicObject"
73
- begin
74
- object_id = obj.__id__
75
-
76
- memsize = ObjectSpace.memsize_of(obj) + rvalue_size
77
- # compensate for API bug
78
- memsize = rvalue_size if memsize > 100_000_000_000
79
- results[object_id] = Stat.new(class_name, file, line, class_path, method_id, memsize)
80
- rescue
81
- # __id__ is not defined, give up
82
- end
83
- end
95
+ file = ObjectSpace.allocation_sourcefile(obj)
96
+ next if ignore_file?(file)
97
+
98
+ line = ObjectSpace.allocation_sourceline(obj)
99
+ class_path = ObjectSpace.allocation_class_path(obj)
100
+ method_id = ObjectSpace.allocation_method_id(obj)
101
+
102
+ class_name = obj.class.name rescue "BasicObject"
103
+ begin
104
+ object_id = obj.__id__
105
+
106
+ memsize = ObjectSpace.memsize_of(obj) + rvalue_size
107
+ # compensate for API bug
108
+ memsize = rvalue_size if memsize > 100_000_000_000
109
+ results[object_id] = Stat.new(class_name, file, line, class_path, method_id, memsize)
110
+ rescue
111
+ # __id__ is not defined, give up
84
112
  end
85
113
  end
86
114
 
@@ -2,7 +2,7 @@ module MemoryProfiler
2
2
  class Results
3
3
 
4
4
  def self.register_type(name, lookup)
5
- ["allocated","retained"].product(["objects","memory"]).each do |type, metric|
5
+ ["allocated", "retained"].product(["objects", "memory"]).each do |type, metric|
6
6
  full_name = "#{type}_#{metric}_by_#{name}"
7
7
  attr_accessor full_name
8
8
 
@@ -10,7 +10,7 @@ module MemoryProfiler
10
10
  mapped = lookup
11
11
 
12
12
  if metric == "memory"
13
- mapped = lambda{|stat|
13
+ mapped = lambda { |stat|
14
14
  [lookup.call(stat), stat.memsize]
15
15
  }
16
16
  end
@@ -20,37 +20,37 @@ module MemoryProfiler
20
20
  end
21
21
  end
22
22
 
23
- register_type :gem, lambda{|stat|
24
- Helpers.guess_gem("#{stat.file}")
25
- }
23
+ register_type :gem, lambda { |stat|
24
+ Helpers.guess_gem("#{stat.file}")
25
+ }
26
26
 
27
- register_type :file, lambda{|stat|
28
- stat.file
29
- }
27
+ register_type :file, lambda { |stat|
28
+ stat.file || "(no name)"
29
+ }
30
30
 
31
- register_type :location, lambda{|stat|
32
- "#{stat.file}:#{stat.line}"
33
- }
31
+ register_type :location, lambda { |stat|
32
+ "#{stat.file}:#{stat.line}"
33
+ }
34
34
 
35
35
  attr_accessor :strings_retained, :strings_allocated
36
36
  attr_accessor :total_retained, :total_allocated
37
37
 
38
38
  def self.from_raw(allocated, retained, top)
39
- self.new.register_results(allocated,retained,top)
39
+ self.new.register_results(allocated, retained, top)
40
40
  end
41
41
 
42
42
  def register_results(allocated, retained, top)
43
43
  @@lookups.each do |name, lookup|
44
- mapped = lambda{|tuple|
45
- lookup.call(tuple[1])
44
+ mapped = lambda { |tuple|
45
+ lookup.call(tuple[1])
46
46
  }
47
47
 
48
48
  result =
49
- if name =~ /^allocated/
50
- allocated.top_n(top, &mapped)
51
- else
52
- retained.top_n(top, &mapped)
53
- end
49
+ if name =~ /^allocated/
50
+ allocated.top_n(top, &mapped)
51
+ else
52
+ retained.top_n(top, &mapped)
53
+ end
54
54
 
55
55
  self.send "#{name}=", result
56
56
  end
@@ -67,57 +67,67 @@ module MemoryProfiler
67
67
 
68
68
  def string_report(data, top)
69
69
  data
70
- .keep_if{|id,stat| stat.class_name == "String"}
71
- .map{|id,stat| [ObjectSpace._id2ref(id), "#{stat.file}:#{stat.line}"]}
72
- .group_by{|string, location| string}
73
- .sort_by{|string, list| -list.count}
74
- .first(top)
75
- .map{|string,list| [string, list.group_by{|str,location| location}
76
- .map{|location, locations| [location, locations.count]}]}
70
+ .reject { |id, stat| stat.class_name != "String" }
71
+ .map { |id, stat| [ObjectSpace._id2ref(id), "#{stat.file}:#{stat.line}"] }
72
+ .group_by { |string, location| string }
73
+ .sort_by { |string, list| -list.count }
74
+ .first(top)
75
+ .map { |string, list| [string, list.group_by { |str, location| location }
76
+ .map { |location, locations| [location, locations.count] }] }
77
77
  end
78
78
 
79
- def pretty_print(io = STDOUT)
79
+ def pretty_print(io = STDOUT, options = {})
80
+ color_output = options.fetch(:color_output) { io.respond_to?(:isatty) && io.isatty }
81
+ @colorize = color_output ? Polychrome.new : Monochrome.new
82
+
80
83
  io.puts "Total allocated #{total_allocated}"
81
84
  io.puts "Total retained #{total_retained}"
82
85
  io.puts
83
- ["allocated","retained"]
84
- .product(["memory", "objects"])
85
- .product(["gem", "file", "location"])
86
- .each do |(type, metric), name|
86
+ ["allocated", "retained"]
87
+ .product(["memory", "objects"])
88
+ .product(["gem", "file", "location"])
89
+ .each do |(type, metric), name|
87
90
  dump "#{type} #{metric} by #{name}", self.send("#{type}_#{metric}_by_#{name}"), io
88
91
  end
89
92
 
90
93
  io.puts
91
- dump_strings(io, "Allocated",strings_allocated)
94
+ dump_strings(io, "Allocated", strings_allocated)
92
95
  io.puts
93
- dump_strings(io, "Retained",strings_retained)
96
+ dump_strings(io, "Retained", strings_retained)
94
97
  nil
95
98
  end
96
99
 
100
+ private
101
+
97
102
  def dump_strings(io, title, strings)
98
103
  return unless strings
99
104
  io.puts "#{title} String Report"
100
- io.puts "-----------------------------------"
105
+ io.puts @colorize.line("-----------------------------------")
101
106
  strings.each do |string, stats|
102
- io.puts "#{string[0..200].inspect} x #{stats.reduce(0){|a,b| a + b[1]}}"
103
- stats.sort_by{|x,y| -y}.each do |location, count|
104
- io.puts " #{location} x #{count}"
107
+ io.puts "#{stats.reduce(0) { |a, b| a + b[1] }.to_s.rjust(10)} #{@colorize.string((string[0..200].inspect))}"
108
+ stats.sort_by { |x, y| -y }.each do |location, count|
109
+ io.puts "#{@colorize.path(count.to_s.rjust(10))} #{location}"
105
110
  end
111
+ io.puts
106
112
  end
107
113
  nil
108
114
  end
109
115
 
110
116
  def dump(description, data, io)
111
117
  io.puts description
112
- io.puts "-----------------------------------"
118
+ io.puts @colorize.line("-----------------------------------")
113
119
  if data
114
120
  data.each do |item|
115
- io.puts "#{item[:data]} x #{item[:count]}"
121
+ io.puts "#{item[:count].to_s.rjust(10)} #{item[:data]}"
116
122
  end
117
123
  else
118
124
  io.puts "NO DATA"
119
125
  end
120
126
  io.puts
121
127
  end
128
+
122
129
  end
130
+
123
131
  end
132
+
133
+
@@ -13,6 +13,7 @@ module MemoryProfiler
13
13
  self.dup
14
14
  end
15
15
 
16
+ sorted.compact!
16
17
  sorted.sort!
17
18
 
18
19
  found = []
@@ -1,3 +1,3 @@
1
1
  module MemoryProfiler
2
- VERSION = "0.0.4"
2
+ VERSION = "0.9.0"
3
3
  end
@@ -1,2 +1,3 @@
1
1
  require 'memory_profiler'
2
2
  require 'minitest/pride'
3
+ require 'minitest/autorun'
@@ -31,4 +31,71 @@ class TestReporter < Minitest::Test
31
31
  assert_equal(0, result.total_retained)
32
32
  end
33
33
 
34
+ def test_ignore_file
35
+ result = MemoryProfiler::Reporter.report(:ignore_files => /test_reporter\.rb/) do
36
+ "hello"
37
+ "hello"
38
+ Foo.new
39
+ end
40
+
41
+ assert_equal(0, result.total_allocated)
42
+ assert_equal(0, result.total_retained)
43
+ end
44
+
45
+ def test_no_color_output
46
+ report = MemoryProfiler::Reporter.report do
47
+ allocate_strings(10)
48
+ end
49
+ io = StringIO.new
50
+ report.pretty_print io, color_output: false
51
+ assert(!io.string.include?("\033"), 'excludes color information')
52
+ end
53
+
54
+ def test_color_output
55
+ report = MemoryProfiler::Reporter.report do
56
+ allocate_strings(10)
57
+ end
58
+ io = StringIO.new
59
+ report.pretty_print io, color_output: true
60
+ assert(io.string.include?("\033"), 'includes color information')
61
+ end
62
+
63
+ class StdoutMock < StringIO
64
+ def isatty
65
+ true
66
+ end
67
+ end
68
+
69
+ def test_color_output_defaults_to_true_when_run_from_tty
70
+ report = MemoryProfiler::Reporter.report do
71
+ allocate_strings(10)
72
+ end
73
+ io = StdoutMock.new
74
+ report.pretty_print io
75
+ assert(io.string.include?("\033"), 'includes color information')
76
+ end
77
+
78
+ def test_mono_output_defaults_to_true_when_not_run_from_tty
79
+ report = MemoryProfiler::Reporter.report do
80
+ allocate_strings(10)
81
+ end
82
+ io = StringIO.new
83
+ report.pretty_print io
84
+ assert(!io.string.include?("\033"), 'excludes color information')
85
+ end
86
+
87
+ def test_reports_can_be_reused_with_different_color_options
88
+ report = MemoryProfiler::Reporter.report do
89
+ allocate_strings(10)
90
+ end
91
+
92
+ io = StringIO.new
93
+ report.pretty_print io, color_output: true
94
+ assert(io.string.include?("\033"), 'includes color information')
95
+
96
+ io = StringIO.new
97
+ report.pretty_print io, color_output: false
98
+ assert(!io.string.include?("\033"), 'excludes color information')
99
+ end
100
+
34
101
  end
@@ -5,4 +5,5 @@ class TestResults < Minitest::Test
5
5
  io = StringIO.new
6
6
  MemoryProfiler::Results.new.pretty_print io
7
7
  end
8
- end
8
+
9
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: memory_profiler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-21 00:00:00.000000000 Z
11
+ date: 2015-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -96,6 +96,8 @@ files:
96
96
  - Rakefile
97
97
  - lib/memory_profiler.rb
98
98
  - lib/memory_profiler/helpers.rb
99
+ - lib/memory_profiler/monochrome.rb
100
+ - lib/memory_profiler/polychrome.rb
99
101
  - lib/memory_profiler/reporter.rb
100
102
  - lib/memory_profiler/results.rb
101
103
  - lib/memory_profiler/stat.rb
@@ -129,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
129
131
  version: '0'
130
132
  requirements: []
131
133
  rubyforge_project:
132
- rubygems_version: 2.2.0
134
+ rubygems_version: 2.4.5
133
135
  signing_key:
134
136
  specification_version: 4
135
137
  summary: Memory profiling routines for Ruby Head