aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2009-12-25 23:37:16 +0100
committerJosé Valim <jose.valim@gmail.com>2009-12-26 14:11:04 +0100
commitc86424a72d229c519179a6cdf1d37e93b46e1e38 (patch)
treea871abfe4d8064f48744ce75e59e3fc7eebbcb52 /actionpack
parent48273a44c6176b72e432f365c7905fd8c4d4b754 (diff)
downloadrails-c86424a72d229c519179a6cdf1d37e93b46e1e38.tar.gz
rails-c86424a72d229c519179a6cdf1d37e93b46e1e38.tar.bz2
rails-c86424a72d229c519179a6cdf1d37e93b46e1e38.zip
Break instrumentation into several end-points so rendering of partials can be optimized.
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/lib/action_view/render/partials.rb42
-rw-r--r--actionpack/lib/action_view/render/rendering.rb24
-rw-r--r--actionpack/lib/action_view/template.rb6
3 files changed, 42 insertions, 30 deletions
diff --git a/actionpack/lib/action_view/render/partials.rb b/actionpack/lib/action_view/render/partials.rb
index 00b12ad3a9..04edb9ab44 100644
--- a/actionpack/lib/action_view/render/partials.rb
+++ b/actionpack/lib/action_view/render/partials.rb
@@ -205,11 +205,22 @@ module ActionView
end
def render
+ options = @options
+
if @collection = collection
- render_collection
+ ActiveSupport::Notifications.instrument(:render_collection, :path => @path,
+ :count => @collection.size) do
+ render_collection
+ end
else
- @template = template = find_template
- render_template(template, @object || @locals[template.variable_name])
+ content = ActiveSupport::Notifications.instrument(:render_partial, :path => @path) do
+ render_partial
+ end
+
+ if !@block && options[:layout]
+ content = @view._render_layout(find_template(options[:layout]), @locals){ content }
+ end
+ content
end
end
@@ -227,9 +238,7 @@ module ActionView
end
def collection_with_template(template)
- options = @options
-
- segments, locals, as = [], @locals, options[:as] || template.variable_name
+ segments, locals, as = [], @locals, @options[:as] || template.variable_name
counter_name = template.counter_name
locals[counter_name] = -1
@@ -246,9 +255,7 @@ module ActionView
end
def collection_without_template
- options = @options
-
- segments, locals, as = [], @locals, options[:as]
+ segments, locals, as = [], @locals, @options[:as]
index, template = -1, nil
@collection.each do |object|
@@ -263,18 +270,15 @@ module ActionView
segments
end
- def render_template(template, object = @object)
- options, locals, view = @options, @locals, @view
- locals[options[:as] || template.variable_name] = object
+ def render_partial(object = @object)
+ @template = template = find_template
+ locals, view = @locals, @view
- content = template.render(view, locals) do |*name|
- @view._layout_for(*name, &@block)
- end
+ object ||= locals[template.variable_name]
+ locals[@options[:as] || template.variable_name] = object
- if @block || !options[:layout]
- content
- else
- @view._render_layout(find_template(options[:layout]), @locals){ content }
+ template.render(view, locals) do |*name|
+ view._layout_for(*name, &@block)
end
end
diff --git a/actionpack/lib/action_view/render/rendering.rb b/actionpack/lib/action_view/render/rendering.rb
index c4033fad9e..5e7dd3e2df 100644
--- a/actionpack/lib/action_view/render/rendering.rb
+++ b/actionpack/lib/action_view/render/rendering.rb
@@ -77,16 +77,19 @@ module ActionView
end
def _render_inline(inline, layout, options)
- handler = Template.handler_class_for_extension(options[:type] || "erb")
- template = Template.new(options[:inline], "inline template", handler, {})
+ locals = options[:locals]
- locals = options[:locals]
- content = template.render(self, locals)
+ content = ActiveSupport::Notifications.instrument(:render_inline) do
+ handler = Template.handler_class_for_extension(options[:type] || "erb")
+ template = Template.new(options[:inline], "inline template", handler, {})
+ template.render(self, locals)
+ end
_render_text(content, layout, locals)
end
def _render_text(content, layout, locals)
+ ActiveSupport::Notifications.instrument(:render_text)
content = _render_layout(layout, locals){ content } if layout
content
end
@@ -110,8 +113,13 @@ module ActionView
msg
end
- locals = options[:locals] || {}
- content = partial ? _render_partial_object(template, options) : template.render(self, locals)
+ locals = options[:locals] || {}
+
+ content = ActiveSupport::Notifications.instrument(:render_template,
+ :identifier => template.identifier, :layout => (layout ? layout.identifier : nil)) do
+ partial ? _render_partial_object(template, options) : template.render(self, locals)
+ end
+
@_content_for[:layout] = content
if layout
@@ -124,7 +132,9 @@ module ActionView
end
def _render_layout(layout, locals, &block)
- layout.render(self, locals){ |*name| _layout_for(*name, &block) }
+ ActiveSupport::Notifications.instrument(:render_layout, :identifier => layout.identifier) do
+ layout.render(self, locals){ |*name| _layout_for(*name, &block) }
+ end
end
end
end
diff --git a/actionpack/lib/action_view/template.rb b/actionpack/lib/action_view/template.rb
index d46c989d11..adaf6544a7 100644
--- a/actionpack/lib/action_view/template.rb
+++ b/actionpack/lib/action_view/template.rb
@@ -36,10 +36,8 @@ module ActionView
end
def render(view, locals, &block)
- ActiveSupport::Notifications.instrument(:render_template, :identifier => identifier) do
- method_name = compile(locals, view)
- view.send(method_name, locals, &block)
- end
+ method_name = compile(locals, view)
+ view.send(method_name, locals, &block)
rescue Exception => e
if e.is_a?(Template::Error)
e.sub_template_of(self)