Index: mandoline/ui/aura/surface_binding.cc |
diff --git a/mandoline/ui/aura/surface_binding.cc b/mandoline/ui/aura/surface_binding.cc |
index 0307112933fceeb8ce58269451d00152e885bbbb..5630862bc321f375093d8e30aa8067a227c82f77 100644 |
--- a/mandoline/ui/aura/surface_binding.cc |
+++ b/mandoline/ui/aura/surface_binding.cc |
@@ -35,10 +35,7 @@ namespace { |
class OutputSurfaceImpl : public cc::OutputSurface { |
public: |
OutputSurfaceImpl(mojo::View* view, |
- const scoped_refptr<cc::ContextProvider>& context_provider, |
- mojo::Surface* surface, |
- uint32_t id_namespace, |
- uint32_t* next_local_id); |
+ const scoped_refptr<cc::ContextProvider>& context_provider); |
~OutputSurfaceImpl() override; |
// cc::OutputSurface: |
@@ -46,10 +43,7 @@ class OutputSurfaceImpl : public cc::OutputSurface { |
private: |
mojo::View* view_; |
- mojo::Surface* surface_; |
- uint32_t id_namespace_; |
- uint32_t* next_local_id_; // Owned by PerViewManagerState. |
- uint32_t local_id_; |
+ mojo::CompositorFrameReceiverPtr receiver_; |
gfx::Size surface_size_; |
DISALLOW_COPY_AND_ASSIGN(OutputSurfaceImpl); |
@@ -57,41 +51,20 @@ class OutputSurfaceImpl : public cc::OutputSurface { |
OutputSurfaceImpl::OutputSurfaceImpl( |
mojo::View* view, |
- const scoped_refptr<cc::ContextProvider>& context_provider, |
- mojo::Surface* surface, |
- uint32_t id_namespace, |
- uint32_t* next_local_id) |
+ const scoped_refptr<cc::ContextProvider>& context_provider) |
: cc::OutputSurface(context_provider), |
- view_(view), |
- surface_(surface), |
- id_namespace_(id_namespace), |
- next_local_id_(next_local_id), |
- local_id_(0u) { |
+ view_(view) { |
capabilities_.delegated_rendering = true; |
capabilities_.max_frames_pending = 1; |
+ view->RequestCompositorFrameReceiver(GetProxy(&receiver_)); |
} |
OutputSurfaceImpl::~OutputSurfaceImpl() { |
} |
void OutputSurfaceImpl::SwapBuffers(cc::CompositorFrame* frame) { |
- gfx::Size frame_size = |
- frame->delegated_frame_data->render_pass_list.back()->output_rect.size(); |
- if (frame_size != surface_size_) { |
- if (local_id_ != 0u) |
- surface_->DestroySurface(local_id_); |
- local_id_ = (*next_local_id_)++; |
- surface_->CreateSurface(local_id_); |
- auto qualified_id = mojo::SurfaceId::New(); |
- qualified_id->local = local_id_; |
- qualified_id->id_namespace = id_namespace_; |
- view_->SetSurfaceId(qualified_id.Pass()); |
- surface_size_ = frame_size; |
- } |
- |
- surface_->SubmitFrame(local_id_, |
- mojo::CompositorFrame::From(*frame), |
- mojo::Closure()); |
+ receiver_->SubmitCompositorFrame(mojo::CompositorFrame::From(*frame), |
+ mojo::Closure()); |
rjkroege
2015/08/19 23:45:44
are you correctly interlocking?
Fady Samuel
2015/08/20 16:22:44
I'm not sure what you mean here. We submit frames
|
client_->DidSwapBuffers(); |
client_->DidSwapBuffersComplete(); |
@@ -177,8 +150,7 @@ SurfaceBinding::PerViewManagerState::CreateOutputSurface(mojo::View* view) { |
gpu_->CreateOffscreenGLES2Context(GetProxy(&cb)); |
scoped_refptr<cc::ContextProvider> context_provider( |
new mojo::ContextProviderMojo(cb.PassInterface().PassHandle())); |
- return make_scoped_ptr(new OutputSurfaceImpl( |
- view, context_provider, surface_.get(), id_namespace_, &next_local_id_)); |
+ return make_scoped_ptr(new OutputSurfaceImpl(view, context_provider)); |
} |
SurfaceBinding::PerViewManagerState::PerViewManagerState( |