Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Unified Diff: blimp/client/support/compositor/display_compositor.cc

Issue 2320923002: Add a full Blimp integration test. (Closed)
Patch Set: Fixed this a bit more. Still some thread violations :(. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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));

Powered by Google App Engine
This is Rietveld 408576698