class Rack::MiniProfiler::TimerStruct::Client
This class holds the client timings
Public Class Methods
init_from_form_data(env, page_struct)
click to toggle source
# File lib/mini_profiler/timer_struct/client.rb, line 38 def self.init_from_form_data(env, page_struct) timings = [] clientTimes, clientPerf, baseTime = nil form = env['rack.request.form_hash'] clientPerf = form['clientPerformance'] if form clientTimes = clientPerf['timing'] if clientPerf baseTime = clientTimes['navigationStart'].to_i if clientTimes return unless clientTimes && baseTime probes = form['clientProbes'] translated = {} if probes && !["null", ""].include?(probes) probes.each do |id, val| name = val["n"] translated[name] ||= {} if translated[name][:start] translated[name][:finish] = val["d"] else translated[name][:start] = val["d"] end end end translated.each do |name, data| h = {"Name" => name, "Start" => data[:start].to_i - baseTime} h["Duration"] = data[:finish].to_i - data[:start].to_i if data[:finish] timings.push(h) end clientTimes.keys.find_all{|k| k =~ /Start$/ }.each do |k| start = clientTimes[k].to_i - baseTime finish = clientTimes[k.sub(/Start$/, "End")].to_i - baseTime duration = 0 duration = finish - start if finish > start name = k.sub(/Start$/, "").split(/(?=[A-Z])/).map{|s| s.capitalize}.join(' ') timings.push({"Name" => name, "Start" => start, "Duration" => duration}) if start >= 0 end clientTimes.keys.find_all{|k| !(k =~ /(End|Start)$/)}.each do |k| timings.push("Name" => k, "Start" => clientTimes[k].to_i - baseTime, "Duration" => -1) end TimerStruct::Client.new.tap do |rval| rval[:redirect_count] = env['rack.request.form_hash']['clientPerformance']['navigation']['redirect_count'] rval[:timings] = timings end end
init_instrumentation()
click to toggle source
# File lib/mini_profiler/timer_struct/client.rb, line 8 def self.init_instrumentation %Q{ <script type="text/javascript"> mPt=function(){var t=[];return{t:t,probe:function(n){t.push({d:new Date(),n:n})}}}() </script> } end
instrument(name, orig)
click to toggle source
used by Railtie to instrument asset_tag for JS / CSS
# File lib/mini_profiler/timer_struct/client.rb, line 17 def self.instrument(name, orig) probe = "<script>mPt.probe('#{name}')</script>" wrapped = probe wrapped << orig wrapped << probe wrapped end
new(env={})
click to toggle source
Calls superclass method
Rack::MiniProfiler::TimerStruct::Base.new
# File lib/mini_profiler/timer_struct/client.rb, line 26 def initialize(env={}) super end
Public Instance Methods
redirect_count()
click to toggle source
# File lib/mini_profiler/timer_struct/client.rb, line 30 def redirect_count self[:redirect_count] end
timings()
click to toggle source
# File lib/mini_profiler/timer_struct/client.rb, line 34 def timings self[:timings] end