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)); |