Chromium Code Reviews| Index: blimp/client/support/compositor/display_compositor.cc |
| diff --git a/blimp/client/app/compositor/browser_compositor.cc b/blimp/client/support/compositor/display_compositor.cc |
| similarity index 82% |
| copy from blimp/client/app/compositor/browser_compositor.cc |
| copy to blimp/client/support/compositor/display_compositor.cc |
| index a76bd23ac245529cb6210db8a928f455c76357d7..79369797fc242797a7caaa17ce2e16e6676aaee3 100644 |
| --- a/blimp/client/app/compositor/browser_compositor.cc |
| +++ b/blimp/client/support/compositor/display_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/display_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( |
| +DisplayCompositor::DisplayCompositor( |
| 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() { |
| +DisplayCompositor::~DisplayCompositor() { |
| + SetContextProvider(nullptr); |
| compositor_dependencies_->GetSurfaceManager()->InvalidateSurfaceClientId( |
| surface_id_allocator_->client_id()); |
| } |
| -void BrowserCompositor::SetContentLayer( |
| +void DisplayCompositor::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 DisplayCompositor::SetSize(const gfx::Size& size_in_px) { |
| viewport_size_in_px_ = size_in_px; |
| // Update the host. |
| @@ -118,65 +119,58 @@ 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 DisplayCompositor::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_ = nullptr; |
|
Khushal
2016/09/13 04:47:24
How about just doing context_provider_ = std::move
David Trainor- moved to gerrit
2016/09/13 06:18:04
Done.
|
| - if (widget != gfx::kNullAcceleratedWidget) { |
| - widget_ = widget; |
| + if (context_provider) { |
| + context_provider_ = context_provider; |
| host_->SetVisible(true); |
| if (output_surface_request_pending_) { |
| HandlePendingOutputSurfaceRequest(); |
| } |
| } |
| + |
| + context_provider_ = context_provider; |
| + host_->SetVisible(true); |
|
Khushal
2016/09/13 04:47:24
Eek. Don't do these 2 lines.
David Trainor- moved to gerrit
2016/09/13 06:18:04
Hahah yeah caught this earlier too.
|
| } |
| -void BrowserCompositor::RequestNewOutputSurface() { |
| +void DisplayCompositor::RequestNewOutputSurface() { |
| DCHECK(!output_surface_request_pending_) |
| << "We already have a pending request?"; |
| output_surface_request_pending_ = true; |
| HandlePendingOutputSurfaceRequest(); |
| } |
| -void BrowserCompositor::DidInitializeOutputSurface() { |
| +void DisplayCompositor::DidInitializeOutputSurface() { |
| output_surface_request_pending_ = false; |
| } |
| -void BrowserCompositor::DidFailToInitializeOutputSurface() { |
| +void DisplayCompositor::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 DisplayCompositor::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 +192,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)); |