diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2015-09-14 15:29:19 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2015-09-14 15:29:19 -0700 |
commit | 8e489db9dee1f4cfb0c3a259bd59626d86eacb07 (patch) | |
tree | 9b8ecd63550a327b2d264fca9e40c7801a936c6a /actionpack | |
parent | 9808cdfa03b41173b13e03469a0f456d0b975c95 (diff) | |
download | rails-8e489db9dee1f4cfb0c3a259bd59626d86eacb07.tar.gz rails-8e489db9dee1f4cfb0c3a259bd59626d86eacb07.tar.bz2 rails-8e489db9dee1f4cfb0c3a259bd59626d86eacb07.zip |
eagerly allocate the renderer object
this means the reader doesn't need to lock, but does have the added cost
of a new object created for every controller
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/lib/action_controller/base.rb | 1 | ||||
-rw-r--r-- | actionpack/lib/action_controller/metal/rendering.rb | 14 | ||||
-rw-r--r-- | actionpack/test/controller/renderer_test.rb | 4 |
3 files changed, 10 insertions, 9 deletions
diff --git a/actionpack/lib/action_controller/base.rb b/actionpack/lib/action_controller/base.rb index 0727bb8369..04e5922ce8 100644 --- a/actionpack/lib/action_controller/base.rb +++ b/actionpack/lib/action_controller/base.rb @@ -248,6 +248,7 @@ module ActionController MODULES.each do |mod| include mod end + setup_renderer! # Define some internal variables that should not be propagated to the view. PROTECTED_IVARS = AbstractController::Rendering::DEFAULT_PROTECTED_INSTANCE_VARIABLES + [ diff --git a/actionpack/lib/action_controller/metal/rendering.rb b/actionpack/lib/action_controller/metal/rendering.rb index 5055a88217..00b551af94 100644 --- a/actionpack/lib/action_controller/metal/rendering.rb +++ b/actionpack/lib/action_controller/metal/rendering.rb @@ -11,20 +11,16 @@ module ActionController # Documentation at ActionController::Renderer#render delegate :render, to: :renderer - RENDERER_LOCK = Mutex.new - - attr_writer :renderer - # Returns a renderer instance (inherited from ActionController::Renderer) # for the controller. - def renderer - @renderer || RENDERER_LOCK.synchronize do - @renderer ||= Renderer.for(self) - end + attr_reader :renderer + + def setup_renderer! # :nodoc: + @renderer = Renderer.for(self) end def inherited(klass) - klass.renderer = nil + klass.setup_renderer! super end end diff --git a/actionpack/test/controller/renderer_test.rb b/actionpack/test/controller/renderer_test.rb index b55a25430b..1a273adec4 100644 --- a/actionpack/test/controller/renderer_test.rb +++ b/actionpack/test/controller/renderer_test.rb @@ -1,6 +1,10 @@ require 'abstract_unit' class RendererTest < ActiveSupport::TestCase + test 'action controller base has a renderer' do + assert ActionController::Base.renderer + end + test 'creating with a controller' do controller = CommentsController renderer = ActionController::Renderer.for controller |