1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
module Peek
module Views
class GC < View
attr_reader :invokes
attr_reader :invoke_time
attr_reader :use_size
attr_reader :total_size
attr_reader :total_object
attr_reader :gc_time
def results
parse_result
{
:invokes => invokes,
:invoke_time => "%.2f" % invoke_time,
:use_size => use_size,
:total_size => total_size,
:total_object => total_object,
:gc_time => "%.2f" % gc_time
}
end
def parse_result
results = ::GC::Profiler.result.split("\n")
@invokes = 0
@invoke_time = 0.0
@use_size = 0
@total_size = 0
@total_object = 0
@gc_time = 0.0
return if results.empty?
@invokes = results.first.scan(/\s+\d+(?:\.\d+)?/).first.strip
results[2..-1].each do |line|
_, invoke_time, use_size, total_size, total_object, gc_time = line.scan(/\s+\-?\d+(?:\.\d+)?/).collect(&:strip)
@invoke_time += invoke_time.to_f
@use_size += use_size.to_i
@total_size += total_size.to_i
@total_object += total_object.to_i
@gc_time += gc_time.to_f
end
end
private
def setup_subscribers
# Reset each counter when a new request starts
before_request do |name, start, finish, id, payload|
::GC::Profiler.enable
::GC::Profiler.clear
end
# Once the action is finished
subscribe 'process_action.action_controller' do |name, start, finish, id, payload|
::GC::Profiler.disable
::GC::Profiler.clear
end
end
end
end
end
|