Chromium Code Reviews| Index: blimp/client/support/compositor/blimp_embedder_compositor.cc |
| diff --git a/blimp/client/support/compositor/blimp_embedder_compositor.cc b/blimp/client/support/compositor/blimp_embedder_compositor.cc |
| index 066fda089a1e928efcf38dd6754e8ffcb950410e..8cc092fd3dc006380209d0d2f2da3019914bd483 100644 |
| --- a/blimp/client/support/compositor/blimp_embedder_compositor.cc |
| +++ b/blimp/client/support/compositor/blimp_embedder_compositor.cc |
| @@ -6,6 +6,7 @@ |
| #include "base/bind.h" |
| #include "base/lazy_instance.h" |
| +#include "base/memory/weak_ptr.h" |
| #include "base/threading/thread_task_runner_handle.h" |
| #include "blimp/client/public/compositor/compositor_dependencies.h" |
| #include "blimp/client/support/compositor/blimp_context_provider.h" |
| @@ -41,8 +42,11 @@ class SimpleTaskGraphRunner : public cc::SingleThreadTaskGraphRunner { |
| class DisplayOutputSurface : public cc::OutputSurface { |
| public: |
| explicit DisplayOutputSurface( |
| - scoped_refptr<cc::ContextProvider> context_provider) |
| - : cc::OutputSurface(std::move(context_provider)) {} |
| + scoped_refptr<cc::ContextProvider> context_provider, |
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner) |
| + : cc::OutputSurface(std::move(context_provider)), |
| + task_runner_(std::move(task_runner)), |
| + weak_ptr_factory_(this) {} |
| ~DisplayOutputSurface() override = default; |
| @@ -55,9 +59,10 @@ class DisplayOutputSurface : public cc::OutputSurface { |
| context_provider()->ContextGL()->BindFramebuffer(GL_FRAMEBUFFER, 0); |
| } |
| void SwapBuffers(cc::OutputSurfaceFrame frame) override { |
| - // See cc::OutputSurface::SwapBuffers() comment for details. |
| context_provider_->ContextSupport()->Swap(); |
| - cc::OutputSurface::PostSwapBuffersComplete(); |
| + task_runner_->PostTask( |
|
Khushal
2016/10/10 17:40:10
Comment here that acks for submitted frames must b
danakj
2016/10/10 20:28:19
Done.
|
| + FROM_HERE, base::Bind(&DisplayOutputSurface::SwapBuffersCallback, |
| + weak_ptr_factory_.GetWeakPtr())); |
| } |
| cc::OverlayCandidateValidator* GetOverlayCandidateValidator() const override { |
| return nullptr; |
| @@ -74,6 +79,11 @@ class DisplayOutputSurface : public cc::OutputSurface { |
| void ApplyExternalStencil() override {} |
| private: |
| + void SwapBuffersCallback() { client_->DidSwapBuffersComplete(); } |
| + |
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner_; |
| + base::WeakPtrFactory<DisplayOutputSurface> weak_ptr_factory_; |
| + |
| DISALLOW_COPY_AND_ASSIGN(DisplayOutputSurface); |
| }; |
| @@ -179,22 +189,22 @@ void BlimpEmbedderCompositor::HandlePendingCompositorFrameSinkRequest() { |
| gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager = |
| compositor_dependencies_->GetGpuMemoryBufferManager(); |
| + auto task_runner = base::ThreadTaskRunnerHandle::Get(); |
| auto display_output_surface = |
| - base::MakeUnique<DisplayOutputSurface>(context_provider_); |
| + base::MakeUnique<DisplayOutputSurface>(context_provider_, task_runner); |
| - auto* task_runner = base::ThreadTaskRunnerHandle::Get().get(); |
| std::unique_ptr<cc::SyntheticBeginFrameSource> begin_frame_source( |
| new cc::DelayBasedBeginFrameSource( |
| - base::MakeUnique<cc::DelayBasedTimeSource>(task_runner))); |
| + base::MakeUnique<cc::DelayBasedTimeSource>(task_runner.get()))); |
| std::unique_ptr<cc::DisplayScheduler> scheduler(new cc::DisplayScheduler( |
| - begin_frame_source.get(), task_runner, |
| + begin_frame_source.get(), task_runner.get(), |
| display_output_surface->capabilities().max_frames_pending)); |
| display_ = base::MakeUnique<cc::Display>( |
| nullptr /*shared_bitmap_manager*/, gpu_memory_buffer_manager, |
| host_->GetSettings().renderer_settings, std::move(begin_frame_source), |
| std::move(display_output_surface), std::move(scheduler), |
| - base::MakeUnique<cc::TextureMailboxDeleter>(task_runner)); |
| + base::MakeUnique<cc::TextureMailboxDeleter>(task_runner.get())); |
| display_->SetVisible(true); |
| display_->Resize(viewport_size_in_px_); |