| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "mandoline/ui/aura/surface_binding.h" | 5 #include "mandoline/ui/aura/surface_binding.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 | 27 |
| 28 namespace mandoline { | 28 namespace mandoline { |
| 29 namespace { | 29 namespace { |
| 30 | 30 |
| 31 // OutputSurface --------------------------------------------------------------- | 31 // OutputSurface --------------------------------------------------------------- |
| 32 | 32 |
| 33 // OutputSurface implementation for a view. Pushes the surface id to View when | 33 // OutputSurface implementation for a view. Pushes the surface id to View when |
| 34 // appropriate. | 34 // appropriate. |
| 35 class OutputSurfaceImpl : public cc::OutputSurface { | 35 class OutputSurfaceImpl : public cc::OutputSurface { |
| 36 public: | 36 public: |
| 37 OutputSurfaceImpl(mojo::View* view, | 37 OutputSurfaceImpl( |
| 38 const scoped_refptr<cc::ContextProvider>& context_provider, | 38 mojo::View* view, |
| 39 mojo::Surface* surface, | 39 const scoped_refptr<cc::ContextProvider>& context_provider, |
| 40 uint32_t id_namespace, | 40 const scoped_refptr<cc::ContextProvider>& worker_context_provider, |
| 41 uint32_t* next_local_id); | 41 mojo::Surface* surface, |
| 42 uint32_t id_namespace, |
| 43 uint32_t* next_local_id); |
| 42 ~OutputSurfaceImpl() override; | 44 ~OutputSurfaceImpl() override; |
| 43 | 45 |
| 44 // cc::OutputSurface: | 46 // cc::OutputSurface: |
| 45 void SwapBuffers(cc::CompositorFrame* frame) override; | 47 void SwapBuffers(cc::CompositorFrame* frame) override; |
| 46 | 48 |
| 47 private: | 49 private: |
| 48 mojo::View* view_; | 50 mojo::View* view_; |
| 49 mojo::Surface* surface_; | 51 mojo::Surface* surface_; |
| 50 uint32_t id_namespace_; | 52 uint32_t id_namespace_; |
| 51 uint32_t* next_local_id_; // Owned by PerViewManagerState. | 53 uint32_t* next_local_id_; // Owned by PerViewManagerState. |
| 52 uint32_t local_id_; | 54 uint32_t local_id_; |
| 53 gfx::Size surface_size_; | 55 gfx::Size surface_size_; |
| 54 | 56 |
| 55 DISALLOW_COPY_AND_ASSIGN(OutputSurfaceImpl); | 57 DISALLOW_COPY_AND_ASSIGN(OutputSurfaceImpl); |
| 56 }; | 58 }; |
| 57 | 59 |
| 58 OutputSurfaceImpl::OutputSurfaceImpl( | 60 OutputSurfaceImpl::OutputSurfaceImpl( |
| 59 mojo::View* view, | 61 mojo::View* view, |
| 60 const scoped_refptr<cc::ContextProvider>& context_provider, | 62 const scoped_refptr<cc::ContextProvider>& context_provider, |
| 63 const scoped_refptr<cc::ContextProvider>& worker_context_provider, |
| 61 mojo::Surface* surface, | 64 mojo::Surface* surface, |
| 62 uint32_t id_namespace, | 65 uint32_t id_namespace, |
| 63 uint32_t* next_local_id) | 66 uint32_t* next_local_id) |
| 64 : cc::OutputSurface(context_provider), | 67 : cc::OutputSurface(context_provider, worker_context_provider), |
| 65 view_(view), | 68 view_(view), |
| 66 surface_(surface), | 69 surface_(surface), |
| 67 id_namespace_(id_namespace), | 70 id_namespace_(id_namespace), |
| 68 next_local_id_(next_local_id), | 71 next_local_id_(next_local_id), |
| 69 local_id_(0u) { | 72 local_id_(0u) { |
| 70 capabilities_.delegated_rendering = true; | 73 capabilities_.delegated_rendering = true; |
| 71 capabilities_.max_frames_pending = 1; | 74 capabilities_.max_frames_pending = 1; |
| 72 } | 75 } |
| 73 | 76 |
| 74 OutputSurfaceImpl::~OutputSurfaceImpl() { | 77 OutputSurfaceImpl::~OutputSurfaceImpl() { |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 (*view_map)[view_manager]->Init(); | 168 (*view_map)[view_manager]->Init(); |
| 166 } | 169 } |
| 167 return (*view_map)[view_manager]; | 170 return (*view_map)[view_manager]; |
| 168 } | 171 } |
| 169 | 172 |
| 170 scoped_ptr<cc::OutputSurface> | 173 scoped_ptr<cc::OutputSurface> |
| 171 SurfaceBinding::PerViewManagerState::CreateOutputSurface(mojo::View* view) { | 174 SurfaceBinding::PerViewManagerState::CreateOutputSurface(mojo::View* view) { |
| 172 // TODO(sky): figure out lifetime here. Do I need to worry about the return | 175 // TODO(sky): figure out lifetime here. Do I need to worry about the return |
| 173 // value outliving this? | 176 // value outliving this? |
| 174 mojo::CommandBufferPtr cb; | 177 mojo::CommandBufferPtr cb; |
| 178 mojo::CommandBufferPtr worker_cb; |
| 175 gpu_->CreateOffscreenGLES2Context(GetProxy(&cb)); | 179 gpu_->CreateOffscreenGLES2Context(GetProxy(&cb)); |
| 180 gpu_->CreateOffscreenGLES2Context(GetProxy(&worker_cb)); |
| 176 scoped_refptr<cc::ContextProvider> context_provider( | 181 scoped_refptr<cc::ContextProvider> context_provider( |
| 177 new mojo::ContextProviderMojo(cb.PassInterface().PassHandle())); | 182 new mojo::ContextProviderMojo(cb.PassInterface().PassHandle())); |
| 183 scoped_refptr<cc::ContextProvider> worker_context_provider( |
| 184 new mojo::ContextProviderMojo(worker_cb.PassInterface().PassHandle())); |
| 178 return make_scoped_ptr(new OutputSurfaceImpl( | 185 return make_scoped_ptr(new OutputSurfaceImpl( |
| 179 view, context_provider, surface_.get(), id_namespace_, &next_local_id_)); | 186 view, context_provider, worker_context_provider, surface_.get(), |
| 187 id_namespace_, &next_local_id_)); |
| 180 } | 188 } |
| 181 | 189 |
| 182 SurfaceBinding::PerViewManagerState::PerViewManagerState( | 190 SurfaceBinding::PerViewManagerState::PerViewManagerState( |
| 183 mojo::Shell* shell, | 191 mojo::Shell* shell, |
| 184 mojo::ViewManager* view_manager) | 192 mojo::ViewManager* view_manager) |
| 185 : shell_(shell), | 193 : shell_(shell), |
| 186 view_manager_(view_manager), | 194 view_manager_(view_manager), |
| 187 returner_binding_(this), | 195 returner_binding_(this), |
| 188 id_namespace_(0u), | 196 id_namespace_(0u), |
| 189 next_local_id_(0u) { | 197 next_local_id_(0u) { |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 250 } | 258 } |
| 251 | 259 |
| 252 SurfaceBinding::~SurfaceBinding() { | 260 SurfaceBinding::~SurfaceBinding() { |
| 253 } | 261 } |
| 254 | 262 |
| 255 scoped_ptr<cc::OutputSurface> SurfaceBinding::CreateOutputSurface() { | 263 scoped_ptr<cc::OutputSurface> SurfaceBinding::CreateOutputSurface() { |
| 256 return state_->CreateOutputSurface(view_); | 264 return state_->CreateOutputSurface(view_); |
| 257 } | 265 } |
| 258 | 266 |
| 259 } // namespace mandoline | 267 } // namespace mandoline |
| OLD | NEW |