| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/renderer/android/synchronous_compositor_output_surface.h" | 5 #include "content/renderer/android/synchronous_compositor_output_surface.h" |
| 6 | 6 |
| 7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "cc/output/compositor_frame.h" | 10 #include "cc/output/compositor_frame.h" |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 55 SynchronousCompositorOutputSurface* surface_; | 55 SynchronousCompositorOutputSurface* surface_; |
| 56 SkCanvas null_canvas_; | 56 SkCanvas null_canvas_; |
| 57 | 57 |
| 58 DISALLOW_COPY_AND_ASSIGN(SoftwareDevice); | 58 DISALLOW_COPY_AND_ASSIGN(SoftwareDevice); |
| 59 }; | 59 }; |
| 60 | 60 |
| 61 SynchronousCompositorOutputSurface::SynchronousCompositorOutputSurface( | 61 SynchronousCompositorOutputSurface::SynchronousCompositorOutputSurface( |
| 62 const scoped_refptr<cc::ContextProvider>& context_provider, | 62 const scoped_refptr<cc::ContextProvider>& context_provider, |
| 63 const scoped_refptr<cc::ContextProvider>& worker_context_provider, | 63 const scoped_refptr<cc::ContextProvider>& worker_context_provider, |
| 64 int routing_id, | 64 int routing_id, |
| 65 uint32_t output_surface_id, |
| 65 SynchronousCompositorRegistry* registry, | 66 SynchronousCompositorRegistry* registry, |
| 66 scoped_refptr<FrameSwapMessageQueue> frame_swap_message_queue) | 67 scoped_refptr<FrameSwapMessageQueue> frame_swap_message_queue) |
| 67 : cc::OutputSurface( | 68 : cc::OutputSurface( |
| 68 context_provider, | 69 context_provider, |
| 69 worker_context_provider, | 70 worker_context_provider, |
| 70 scoped_ptr<cc::SoftwareOutputDevice>(new SoftwareDevice(this))), | 71 scoped_ptr<cc::SoftwareOutputDevice>(new SoftwareDevice(this))), |
| 71 routing_id_(routing_id), | 72 routing_id_(routing_id), |
| 73 output_surface_id_(output_surface_id), |
| 72 registry_(registry), | 74 registry_(registry), |
| 73 registered_(false), | 75 registered_(false), |
| 74 sync_client_(nullptr), | 76 sync_client_(nullptr), |
| 75 current_sw_canvas_(nullptr), | 77 current_sw_canvas_(nullptr), |
| 76 memory_policy_(0u), | 78 memory_policy_(0u), |
| 77 did_swap_(false), | 79 did_swap_(false), |
| 78 frame_swap_message_queue_(frame_swap_message_queue) { | 80 frame_swap_message_queue_(frame_swap_message_queue) { |
| 79 thread_checker_.DetachFromThread(); | 81 thread_checker_.DetachFromThread(); |
| 80 DCHECK(registry_); | 82 DCHECK(registry_); |
| 81 capabilities_.adjust_deadline_for_parent = false; | 83 capabilities_.adjust_deadline_for_parent = false; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 void SynchronousCompositorOutputSurface::Reshape(const gfx::Size& size, | 122 void SynchronousCompositorOutputSurface::Reshape(const gfx::Size& size, |
| 121 float scale_factor, | 123 float scale_factor, |
| 122 bool has_alpha) { | 124 bool has_alpha) { |
| 123 // Intentional no-op: surface size is controlled by the embedder. | 125 // Intentional no-op: surface size is controlled by the embedder. |
| 124 } | 126 } |
| 125 | 127 |
| 126 void SynchronousCompositorOutputSurface::SwapBuffers( | 128 void SynchronousCompositorOutputSurface::SwapBuffers( |
| 127 cc::CompositorFrame* frame) { | 129 cc::CompositorFrame* frame) { |
| 128 DCHECK(CalledOnValidThread()); | 130 DCHECK(CalledOnValidThread()); |
| 129 DCHECK(sync_client_); | 131 DCHECK(sync_client_); |
| 130 sync_client_->SwapBuffers(frame); | 132 sync_client_->SwapBuffers(output_surface_id_, frame); |
| 131 client_->DidSwapBuffers(); | 133 client_->DidSwapBuffers(); |
| 132 did_swap_ = true; | 134 did_swap_ = true; |
| 133 } | 135 } |
| 134 | 136 |
| 135 void SynchronousCompositorOutputSurface::Invalidate() { | 137 void SynchronousCompositorOutputSurface::Invalidate() { |
| 136 DCHECK(CalledOnValidThread()); | 138 DCHECK(CalledOnValidThread()); |
| 137 if (sync_client_) | 139 if (sync_client_) |
| 138 sync_client_->Invalidate(); | 140 sync_client_->Invalidate(); |
| 139 } | 141 } |
| 140 | 142 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 gfx::Transform adjusted_transform = transform; | 186 gfx::Transform adjusted_transform = transform; |
| 185 adjusted_transform.matrix().postTranslate(-viewport.x(), -viewport.y(), 0); | 187 adjusted_transform.matrix().postTranslate(-viewport.x(), -viewport.y(), 0); |
| 186 did_swap_ = false; | 188 did_swap_ = false; |
| 187 client_->OnDraw(adjusted_transform, viewport, clip, software_draw); | 189 client_->OnDraw(adjusted_transform, viewport, clip, software_draw); |
| 188 | 190 |
| 189 if (did_swap_) | 191 if (did_swap_) |
| 190 client_->DidSwapBuffersComplete(); | 192 client_->DidSwapBuffersComplete(); |
| 191 } | 193 } |
| 192 | 194 |
| 193 void SynchronousCompositorOutputSurface::ReturnResources( | 195 void SynchronousCompositorOutputSurface::ReturnResources( |
| 196 uint32_t output_surface_id, |
| 194 const cc::CompositorFrameAck& frame_ack) { | 197 const cc::CompositorFrameAck& frame_ack) { |
| 195 ReclaimResources(&frame_ack); | 198 if (output_surface_id_ == output_surface_id) |
| 199 ReclaimResources(&frame_ack); |
| 196 } | 200 } |
| 197 | 201 |
| 198 void SynchronousCompositorOutputSurface::SetMemoryPolicy(size_t bytes_limit) { | 202 void SynchronousCompositorOutputSurface::SetMemoryPolicy(size_t bytes_limit) { |
| 199 DCHECK(CalledOnValidThread()); | 203 DCHECK(CalledOnValidThread()); |
| 200 bool became_zero = memory_policy_.bytes_limit_when_visible && !bytes_limit; | 204 bool became_zero = memory_policy_.bytes_limit_when_visible && !bytes_limit; |
| 201 bool became_non_zero = | 205 bool became_non_zero = |
| 202 !memory_policy_.bytes_limit_when_visible && bytes_limit; | 206 !memory_policy_.bytes_limit_when_visible && bytes_limit; |
| 203 memory_policy_.bytes_limit_when_visible = bytes_limit; | 207 memory_policy_.bytes_limit_when_visible = bytes_limit; |
| 204 memory_policy_.num_resources_limit = kNumResourcesLimit; | 208 memory_policy_.num_resources_limit = kNumResourcesLimit; |
| 205 | 209 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 229 scoped_ptr<FrameSwapMessageQueue::SendMessageScope> send_message_scope = | 233 scoped_ptr<FrameSwapMessageQueue::SendMessageScope> send_message_scope = |
| 230 frame_swap_message_queue_->AcquireSendMessageScope(); | 234 frame_swap_message_queue_->AcquireSendMessageScope(); |
| 231 frame_swap_message_queue_->DrainMessages(messages); | 235 frame_swap_message_queue_->DrainMessages(messages); |
| 232 } | 236 } |
| 233 | 237 |
| 234 bool SynchronousCompositorOutputSurface::CalledOnValidThread() const { | 238 bool SynchronousCompositorOutputSurface::CalledOnValidThread() const { |
| 235 return thread_checker_.CalledOnValidThread(); | 239 return thread_checker_.CalledOnValidThread(); |
| 236 } | 240 } |
| 237 | 241 |
| 238 } // namespace content | 242 } // namespace content |
| OLD | NEW |