rack-mini-profiler 0.1.19 → 0.1.20
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.
Potentially problematic release.
This version of rack-mini-profiler might be problematic. Click here for more details.
- data/CHANGELOG +10 -0
- data/lib/mini_profiler/profiler.rb +62 -0
- data/rack-mini-profiler.gemspec +1 -1
- metadata +4 -4
data/CHANGELOG
CHANGED
@@ -81,3 +81,13 @@
|
|
81
81
|
|
82
82
|
* 1.17
|
83
83
|
* pp=sample was bust unless stacktrace was installed
|
84
|
+
|
85
|
+
10-September-2012 - Sam
|
86
|
+
|
87
|
+
* 1.19
|
88
|
+
* fix compat issue with 1.8.7
|
89
|
+
|
90
|
+
12-September-2012 - Sam
|
91
|
+
|
92
|
+
* 1.20
|
93
|
+
* Added pp=profile-gc , it allows you to profile the GC in Ruby 1.9.3
|
@@ -208,6 +208,10 @@ module Rack
|
|
208
208
|
return [status,headers,body]
|
209
209
|
end
|
210
210
|
|
211
|
+
if query_string =~ /pp=profile-gc/
|
212
|
+
return profile_gc(env)
|
213
|
+
end
|
214
|
+
|
211
215
|
MiniProfiler.create_current(env, @config)
|
212
216
|
MiniProfiler.deauthorize_request if @config.authorization_mode == :whitelist
|
213
217
|
if query_string =~ /pp=normal-backtrace/
|
@@ -385,12 +389,70 @@ module Rack
|
|
385
389
|
pp=sample : sample stack traces and return a report isolating heavy usage (experimental works best with the stacktrace gem)
|
386
390
|
pp=disable : disable profiling for this session
|
387
391
|
pp=enable : enable profiling for this session (if previously disabled)
|
392
|
+
pp=profile-gc: perform gc profiling on this request (ruby 1.9.3 only)
|
388
393
|
"
|
389
394
|
|
390
395
|
client_settings.write!(headers)
|
391
396
|
[200, headers, [body]]
|
392
397
|
end
|
393
398
|
|
399
|
+
|
400
|
+
def object_space_stats
|
401
|
+
stats = {}
|
402
|
+
ObjectSpace.each_object { |o|
|
403
|
+
stats[o.class] ||= 1
|
404
|
+
stats[o.class] += 1
|
405
|
+
}
|
406
|
+
stats
|
407
|
+
end
|
408
|
+
|
409
|
+
def diff_object_stats(before,after)
|
410
|
+
diff = {}
|
411
|
+
after.each do |k,v|
|
412
|
+
diff[k] = v - (before[k] || 0)
|
413
|
+
end
|
414
|
+
before.each do |k,v|
|
415
|
+
diff[k] = 0 - v unless after[k]
|
416
|
+
end
|
417
|
+
|
418
|
+
diff
|
419
|
+
end
|
420
|
+
|
421
|
+
def profile_gc(env)
|
422
|
+
|
423
|
+
body = "";
|
424
|
+
|
425
|
+
stat_before = object_space_stats
|
426
|
+
begin
|
427
|
+
GC::Profiler.clear
|
428
|
+
GC::Profiler.enable
|
429
|
+
@app.call(env)
|
430
|
+
body << GC::Profiler.result
|
431
|
+
ensure
|
432
|
+
GC::Profiler.disable
|
433
|
+
end
|
434
|
+
stat_after = object_space_stats
|
435
|
+
|
436
|
+
diff = diff_object_stats(stat_before,stat_after)
|
437
|
+
|
438
|
+
body << "
|
439
|
+
ObjectSpace delta caused by request:
|
440
|
+
--------------------------------------------\n"
|
441
|
+
diff.to_a.reject{|k,v| v == 0}.sort{|x,y| y[1] <=> x[1]}.each do |k,v|
|
442
|
+
body << "#{k} : #{v}\n" if v != 0
|
443
|
+
end
|
444
|
+
|
445
|
+
body << "\n
|
446
|
+
ObjectSpace stats:
|
447
|
+
-----------------\n"
|
448
|
+
|
449
|
+
stat_after.to_a.sort{|x,y| y[1] <=> x[1]}.each do |k,v|
|
450
|
+
body << "#{k} : #{v}\n"
|
451
|
+
end
|
452
|
+
|
453
|
+
return [200, {'Content-Type' => 'text/plain'}, body]
|
454
|
+
end
|
455
|
+
|
394
456
|
def analyze(traces, page_struct)
|
395
457
|
headers = {'Content-Type' => 'text/plain'}
|
396
458
|
body = "Collected: #{traces.count} stack traces. Duration(ms): #{page_struct.duration_ms}"
|
data/rack-mini-profiler.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = "rack-mini-profiler"
|
3
|
-
s.version = "0.1.
|
3
|
+
s.version = "0.1.20"
|
4
4
|
s.summary = "Profiles loading speed for rack applications."
|
5
5
|
s.authors = ["Aleks Totic","Sam Saffron", "Robin Ward"]
|
6
6
|
s.description = "Page loading speed displayed on every page. Optimize while you develop, performance is a feature."
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-mini-profiler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.20
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2012-09-
|
14
|
+
date: 2012-09-11 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rack
|
@@ -131,7 +131,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
131
131
|
version: '0'
|
132
132
|
segments:
|
133
133
|
- 0
|
134
|
-
hash: -
|
134
|
+
hash: -250357363
|
135
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
136
136
|
none: false
|
137
137
|
requirements:
|
@@ -140,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
140
140
|
version: '0'
|
141
141
|
segments:
|
142
142
|
- 0
|
143
|
-
hash: -
|
143
|
+
hash: -250357363
|
144
144
|
requirements: []
|
145
145
|
rubyforge_project:
|
146
146
|
rubygems_version: 1.8.24
|