| Index: blimp/client/support/compositor/blimp_embedder_compositor.cc
|
| diff --git a/blimp/client/app/compositor/browser_compositor.cc b/blimp/client/support/compositor/blimp_embedder_compositor.cc
|
| similarity index 82%
|
| copy from blimp/client/app/compositor/browser_compositor.cc
|
| copy to blimp/client/support/compositor/blimp_embedder_compositor.cc
|
| index a76bd23ac245529cb6210db8a928f455c76357d7..0cb81f89529bac7ce1ebcc026690427f34659254 100644
|
| --- a/blimp/client/app/compositor/browser_compositor.cc
|
| +++ b/blimp/client/support/compositor/blimp_embedder_compositor.cc
|
| @@ -2,7 +2,7 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "blimp/client/app/compositor/browser_compositor.h"
|
| +#include "blimp/client/support/compositor/blimp_embedder_compositor.h"
|
|
|
| #include "base/bind.h"
|
| #include "base/lazy_instance.h"
|
| @@ -67,12 +67,11 @@ base::LazyInstance<SimpleTaskGraphRunner> g_task_graph_runner =
|
|
|
| } // namespace
|
|
|
| -BrowserCompositor::BrowserCompositor(
|
| +BlimpEmbedderCompositor::BlimpEmbedderCompositor(
|
| CompositorDependencies* compositor_dependencies)
|
| : compositor_dependencies_(compositor_dependencies),
|
| surface_id_allocator_(base::MakeUnique<cc::SurfaceIdAllocator>(
|
| compositor_dependencies->AllocateSurfaceClientId())),
|
| - widget_(gfx::kNullAcceleratedWidget),
|
| output_surface_request_pending_(false),
|
| root_layer_(cc::Layer::Create()) {
|
| compositor_dependencies_->GetSurfaceManager()->RegisterSurfaceClientId(
|
| @@ -92,20 +91,22 @@ BrowserCompositor::BrowserCompositor(
|
| root_layer_->SetBackgroundColor(SK_ColorWHITE);
|
| host_->GetLayerTree()->SetRootLayer(root_layer_);
|
| host_->set_surface_client_id(surface_id_allocator_->client_id());
|
| + host_->SetVisible(true);
|
| }
|
|
|
| -BrowserCompositor::~BrowserCompositor() {
|
| +BlimpEmbedderCompositor::~BlimpEmbedderCompositor() {
|
| + SetContextProvider(nullptr);
|
| compositor_dependencies_->GetSurfaceManager()->InvalidateSurfaceClientId(
|
| surface_id_allocator_->client_id());
|
| }
|
|
|
| -void BrowserCompositor::SetContentLayer(
|
| +void BlimpEmbedderCompositor::SetContentLayer(
|
| scoped_refptr<cc::Layer> content_layer) {
|
| root_layer_->RemoveAllChildren();
|
| root_layer_->AddChild(content_layer);
|
| }
|
|
|
| -void BrowserCompositor::SetSize(const gfx::Size& size_in_px) {
|
| +void BlimpEmbedderCompositor::SetSize(const gfx::Size& size_in_px) {
|
| viewport_size_in_px_ = size_in_px;
|
|
|
| // Update the host.
|
| @@ -118,20 +119,18 @@ void BrowserCompositor::SetSize(const gfx::Size& size_in_px) {
|
| }
|
| }
|
|
|
| -void BrowserCompositor::SetAcceleratedWidget(gfx::AcceleratedWidget widget) {
|
| - // Kill all references to the old widget.
|
| - if (widget_ != gfx::kNullAcceleratedWidget) {
|
| - // We are always visible if we have a widget.
|
| +void BlimpEmbedderCompositor::SetContextProvider(
|
| + scoped_refptr<cc::ContextProvider> context_provider) {
|
| + if (context_provider_) {
|
| DCHECK(host_->visible());
|
| host_->SetVisible(false);
|
| host_->ReleaseOutputSurface();
|
| display_.reset();
|
| }
|
|
|
| - widget_ = gfx::kNullAcceleratedWidget;
|
| + context_provider_ = std::move(context_provider);
|
|
|
| - if (widget != gfx::kNullAcceleratedWidget) {
|
| - widget_ = widget;
|
| + if (context_provider_) {
|
| host_->SetVisible(true);
|
| if (output_surface_request_pending_) {
|
| HandlePendingOutputSurfaceRequest();
|
| @@ -139,44 +138,35 @@ void BrowserCompositor::SetAcceleratedWidget(gfx::AcceleratedWidget widget) {
|
| }
|
| }
|
|
|
| -void BrowserCompositor::RequestNewOutputSurface() {
|
| +void BlimpEmbedderCompositor::RequestNewOutputSurface() {
|
| DCHECK(!output_surface_request_pending_)
|
| << "We already have a pending request?";
|
| output_surface_request_pending_ = true;
|
| HandlePendingOutputSurfaceRequest();
|
| }
|
|
|
| -void BrowserCompositor::DidInitializeOutputSurface() {
|
| +void BlimpEmbedderCompositor::DidInitializeOutputSurface() {
|
| output_surface_request_pending_ = false;
|
| }
|
|
|
| -void BrowserCompositor::DidFailToInitializeOutputSurface() {
|
| +void BlimpEmbedderCompositor::DidFailToInitializeOutputSurface() {
|
| NOTREACHED() << "Can't fail to initialize the OutputSurface here";
|
| }
|
|
|
| -void BrowserCompositor::DidCompleteSwapBuffers() {
|
| - if (!did_complete_swap_buffers_.is_null()) {
|
| - did_complete_swap_buffers_.Run();
|
| - }
|
| -}
|
| -
|
| -void BrowserCompositor::HandlePendingOutputSurfaceRequest() {
|
| +void BlimpEmbedderCompositor::HandlePendingOutputSurfaceRequest() {
|
| DCHECK(output_surface_request_pending_);
|
|
|
| // Can't handle the request right now since we don't have a widget.
|
| if (!host_->visible())
|
| return;
|
|
|
| - DCHECK_NE(gfx::kNullAcceleratedWidget, widget_);
|
| + DCHECK(context_provider_);
|
|
|
| gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager =
|
| compositor_dependencies_->GetGpuMemoryBufferManager();
|
|
|
| - scoped_refptr<cc::ContextProvider> context_provider =
|
| - BlimpContextProvider::Create(widget_, gpu_memory_buffer_manager);
|
| -
|
| std::unique_ptr<cc::OutputSurface> display_output_surface =
|
| - base::MakeUnique<DisplayOutputSurface>(context_provider);
|
| + base::MakeUnique<DisplayOutputSurface>(context_provider_);
|
|
|
| auto* task_runner = base::ThreadTaskRunnerHandle::Get().get();
|
| std::unique_ptr<cc::SyntheticBeginFrameSource> begin_frame_source(
|
| @@ -198,7 +188,7 @@ void BrowserCompositor::HandlePendingOutputSurfaceRequest() {
|
| std::unique_ptr<cc::OutputSurface> delegated_output_surface =
|
| base::MakeUnique<cc::SurfaceDisplayOutputSurface>(
|
| compositor_dependencies_->GetSurfaceManager(),
|
| - surface_id_allocator_.get(), display_.get(), context_provider,
|
| + surface_id_allocator_.get(), display_.get(), context_provider_,
|
| nullptr);
|
|
|
| host_->SetOutputSurface(std::move(delegated_output_surface));
|
|
|