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
# 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