Class: Profiler::Collectors::ViewCollector

Inherits:
BaseCollector show all
Defined in:
lib/profiler/collectors/view_collector.rb

Instance Attribute Summary

Attributes inherited from BaseCollector

#profile

Instance Method Summary collapse

Methods inherited from BaseCollector

descendants, #has_data?, inherited, #name, #panel_content, #render_html, #render_mode

Constructor Details

#initialize(profile) ⇒ ViewCollector

Returns a new instance of ViewCollector.



8
9
10
11
12
13
# File 'lib/profiler/collectors/view_collector.rb', line 8

def initialize(profile)
  super
  @views = []
  @partials = []
  @subscriptions = []
end

Instance Method Details

#collectObject



55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/profiler/collectors/view_collector.rb', line 55

def collect
  @subscriptions.each { |sub| ActiveSupport::Notifications.unsubscribe(sub) }

  data = {
    views: @views,
    partials: @partials,
    total_views: @views.size,
    total_partials: @partials.size,
    total_duration: (@views + @partials).sum { |v| v[:duration] }.round(2)
  }

  store_data(data)
end

#iconObject



15
16
17
# File 'lib/profiler/collectors/view_collector.rb', line 15

def icon
  "👁️"
end

#priorityObject



19
20
21
# File 'lib/profiler/collectors/view_collector.rb', line 19

def priority
  40
end

#subscribeObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/profiler/collectors/view_collector.rb', line 34

def subscribe
  return unless defined?(ActiveSupport::Notifications)

  @subscriptions << ActiveSupport::Notifications.monotonic_subscribe("render_template.action_view") do |name, started, finished, unique_id, payload|
    duration = ((finished - started) * 1000).round(2)
    @views << {
      identifier: payload[:identifier],
      layout: payload[:layout],
      duration: duration
    }
  end

  @subscriptions << ActiveSupport::Notifications.monotonic_subscribe("render_partial.action_view") do |name, started, finished, unique_id, payload|
    duration = ((finished - started) * 1000).round(2)
    @partials << {
      identifier: payload[:identifier],
      duration: duration
    }
  end
end

#tab_configObject



23
24
25
26
27
28
29
30
31
32
# File 'lib/profiler/collectors/view_collector.rb', line 23

def tab_config
  {
    key: "view",
    label: "Views",
    icon: icon,
    priority: priority,
    enabled: true,
    default_active: false
  }
end

#toolbar_summaryObject



69
70
71
72
73
74
75
76
# File 'lib/profiler/collectors/view_collector.rb', line 69

def toolbar_summary
  total_duration = (@views + @partials).sum { |v| v[:duration] }.round(2)

  {
    text: "#{@views.size} views, #{@partials.size} partials (#{total_duration}ms)",
    color: "purple"
  }
end