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 81e278eb340cf6a64b55f072c62ca3d3497b5538..9b508ab2dbc1d361524be3e099bb78283c102bd2 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_->SetSurfaceClientId(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_->IsVisible()); |
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_->IsVisible()) |
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)); |