| 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..0bc623ec897eb83a6da7f13b57c05504ba52a8f4 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,12 @@ 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();
|
| + // The ack for SwapBuffers must be run asynchronously, that will be
|
| + // satisfied since we will go through a PostTask here.
|
| + task_runner_->PostTask(
|
| + FROM_HERE, base::Bind(&DisplayOutputSurface::SwapBuffersCallback,
|
| + weak_ptr_factory_.GetWeakPtr()));
|
| }
|
| cc::OverlayCandidateValidator* GetOverlayCandidateValidator() const override {
|
| return nullptr;
|
| @@ -74,6 +81,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 +191,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_);
|
|
|
|
|