| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "cc/output/software_renderer.h" | 5 #include "cc/output/software_renderer.h" |
| 6 | 6 |
| 7 #include "base/debug/trace_event.h" | 7 #include "base/debug/trace_event.h" |
| 8 #include "cc/base/math_util.h" | 8 #include "cc/base/math_util.h" |
| 9 #include "cc/output/compositor_frame.h" | 9 #include "cc/output/compositor_frame.h" |
| 10 #include "cc/output/compositor_frame_ack.h" | 10 #include "cc/output/compositor_frame_ack.h" |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 return SkShader::kClamp_TileMode; | 56 return SkShader::kClamp_TileMode; |
| 57 } | 57 } |
| 58 NOTREACHED(); | 58 NOTREACHED(); |
| 59 return SkShader::kClamp_TileMode; | 59 return SkShader::kClamp_TileMode; |
| 60 } | 60 } |
| 61 | 61 |
| 62 } // anonymous namespace | 62 } // anonymous namespace |
| 63 | 63 |
| 64 scoped_ptr<SoftwareRenderer> SoftwareRenderer::Create( | 64 scoped_ptr<SoftwareRenderer> SoftwareRenderer::Create( |
| 65 RendererClient* client, | 65 RendererClient* client, |
| 66 const LayerTreeSettings* settings, | 66 const RendererSettings* settings, |
| 67 OutputSurface* output_surface, | 67 OutputSurface* output_surface, |
| 68 ResourceProvider* resource_provider) { | 68 ResourceProvider* resource_provider) { |
| 69 return make_scoped_ptr(new SoftwareRenderer( | 69 return make_scoped_ptr(new SoftwareRenderer( |
| 70 client, settings, output_surface, resource_provider)); | 70 client, settings, output_surface, resource_provider)); |
| 71 } | 71 } |
| 72 | 72 |
| 73 SoftwareRenderer::SoftwareRenderer(RendererClient* client, | 73 SoftwareRenderer::SoftwareRenderer(RendererClient* client, |
| 74 const LayerTreeSettings* settings, | 74 const RendererSettings* settings, |
| 75 OutputSurface* output_surface, | 75 OutputSurface* output_surface, |
| 76 ResourceProvider* resource_provider) | 76 ResourceProvider* resource_provider) |
| 77 : DirectRenderer(client, settings, output_surface, resource_provider), | 77 : DirectRenderer(client, settings, output_surface, resource_provider), |
| 78 is_scissor_enabled_(false), | 78 is_scissor_enabled_(false), |
| 79 is_backbuffer_discarded_(false), | 79 is_backbuffer_discarded_(false), |
| 80 output_device_(output_surface->software_device()), | 80 output_device_(output_surface->software_device()), |
| 81 current_canvas_(NULL) { | 81 current_canvas_(NULL) { |
| 82 if (resource_provider_) { | 82 if (resource_provider_) { |
| 83 capabilities_.max_texture_size = resource_provider_->max_texture_size(); | 83 capabilities_.max_texture_size = resource_provider_->max_texture_size(); |
| 84 capabilities_.best_texture_format = | 84 capabilities_.best_texture_format = |
| (...skipping 16 matching lines...) Expand all Loading... |
| 101 | 101 |
| 102 void SoftwareRenderer::BeginDrawingFrame(DrawingFrame* frame) { | 102 void SoftwareRenderer::BeginDrawingFrame(DrawingFrame* frame) { |
| 103 TRACE_EVENT0("cc", "SoftwareRenderer::BeginDrawingFrame"); | 103 TRACE_EVENT0("cc", "SoftwareRenderer::BeginDrawingFrame"); |
| 104 root_canvas_ = output_device_->BeginPaint( | 104 root_canvas_ = output_device_->BeginPaint( |
| 105 gfx::ToEnclosingRect(frame->root_damage_rect)); | 105 gfx::ToEnclosingRect(frame->root_damage_rect)); |
| 106 } | 106 } |
| 107 | 107 |
| 108 void SoftwareRenderer::FinishDrawingFrame(DrawingFrame* frame) { | 108 void SoftwareRenderer::FinishDrawingFrame(DrawingFrame* frame) { |
| 109 TRACE_EVENT0("cc", "SoftwareRenderer::FinishDrawingFrame"); | 109 TRACE_EVENT0("cc", "SoftwareRenderer::FinishDrawingFrame"); |
| 110 current_framebuffer_lock_ = nullptr; | 110 current_framebuffer_lock_ = nullptr; |
| 111 current_framebuffer_canvas_.clear(); |
| 111 current_canvas_ = NULL; | 112 current_canvas_ = NULL; |
| 112 root_canvas_ = NULL; | 113 root_canvas_ = NULL; |
| 113 | 114 |
| 114 current_frame_data_.reset(new SoftwareFrameData); | 115 current_frame_data_.reset(new SoftwareFrameData); |
| 115 output_device_->EndPaint(current_frame_data_.get()); | 116 output_device_->EndPaint(current_frame_data_.get()); |
| 116 } | 117 } |
| 117 | 118 |
| 118 void SoftwareRenderer::SwapBuffers(const CompositorFrameMetadata& metadata) { | 119 void SoftwareRenderer::SwapBuffers(const CompositorFrameMetadata& metadata) { |
| 119 TRACE_EVENT0("cc,benchmark", "SoftwareRenderer::SwapBuffers"); | 120 TRACE_EVENT0("cc,benchmark", "SoftwareRenderer::SwapBuffers"); |
| 120 CompositorFrame compositor_frame; | 121 CompositorFrame compositor_frame; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 144 is_scissor_enabled_ = false; | 145 is_scissor_enabled_ = false; |
| 145 SkISize size = current_canvas_->getDeviceSize(); | 146 SkISize size = current_canvas_->getDeviceSize(); |
| 146 SetClipRect(gfx::Rect(size.width(), size.height())); | 147 SetClipRect(gfx::Rect(size.width(), size.height())); |
| 147 } | 148 } |
| 148 | 149 |
| 149 void SoftwareRenderer::Finish() {} | 150 void SoftwareRenderer::Finish() {} |
| 150 | 151 |
| 151 void SoftwareRenderer::BindFramebufferToOutputSurface(DrawingFrame* frame) { | 152 void SoftwareRenderer::BindFramebufferToOutputSurface(DrawingFrame* frame) { |
| 152 DCHECK(!output_surface_->HasExternalStencilTest()); | 153 DCHECK(!output_surface_->HasExternalStencilTest()); |
| 153 current_framebuffer_lock_ = nullptr; | 154 current_framebuffer_lock_ = nullptr; |
| 155 current_framebuffer_canvas_.clear(); |
| 154 current_canvas_ = root_canvas_; | 156 current_canvas_ = root_canvas_; |
| 155 } | 157 } |
| 156 | 158 |
| 157 bool SoftwareRenderer::BindFramebufferToTexture( | 159 bool SoftwareRenderer::BindFramebufferToTexture( |
| 158 DrawingFrame* frame, | 160 DrawingFrame* frame, |
| 159 const ScopedResource* texture, | 161 const ScopedResource* texture, |
| 160 const gfx::Rect& target_rect) { | 162 const gfx::Rect& target_rect) { |
| 161 current_framebuffer_lock_ = make_scoped_ptr( | 163 current_framebuffer_lock_ = make_scoped_ptr( |
| 162 new ResourceProvider::ScopedWriteLockSoftware( | 164 new ResourceProvider::ScopedWriteLockSoftware( |
| 163 resource_provider_, texture->id())); | 165 resource_provider_, texture->id())); |
| 164 current_canvas_ = current_framebuffer_lock_->sk_canvas(); | 166 current_framebuffer_canvas_ = |
| 167 skia::AdoptRef(new SkCanvas(current_framebuffer_lock_->sk_bitmap())); |
| 168 current_canvas_ = current_framebuffer_canvas_.get(); |
| 165 InitializeViewport(frame, | 169 InitializeViewport(frame, |
| 166 target_rect, | 170 target_rect, |
| 167 gfx::Rect(target_rect.size()), | 171 gfx::Rect(target_rect.size()), |
| 168 target_rect.size()); | 172 target_rect.size()); |
| 169 return true; | 173 return true; |
| 170 } | 174 } |
| 171 | 175 |
| 172 void SoftwareRenderer::SetScissorTestRect(const gfx::Rect& scissor_rect) { | 176 void SoftwareRenderer::SetScissorTestRect(const gfx::Rect& scissor_rect) { |
| 173 is_scissor_enabled_ = true; | 177 is_scissor_enabled_ = true; |
| 174 scissor_rect_ = scissor_rect; | 178 scissor_rect_ = scissor_rect; |
| (...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 600 } | 604 } |
| 601 | 605 |
| 602 void SoftwareRenderer::DidChangeVisibility() { | 606 void SoftwareRenderer::DidChangeVisibility() { |
| 603 if (visible()) | 607 if (visible()) |
| 604 EnsureBackbuffer(); | 608 EnsureBackbuffer(); |
| 605 else | 609 else |
| 606 DiscardBackbuffer(); | 610 DiscardBackbuffer(); |
| 607 } | 611 } |
| 608 | 612 |
| 609 } // namespace cc | 613 } // namespace cc |
| OLD | NEW |