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

Unified Diff: blimp/client/app/compositor/browser_compositor.cc

Issue 2320923002: Add a full Blimp integration test. (Closed)
Patch Set: Fix build break with chrome embedder 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
« no previous file with comments | « blimp/client/app/compositor/browser_compositor.h ('k') | blimp/client/core/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: blimp/client/app/compositor/browser_compositor.cc
diff --git a/blimp/client/app/compositor/browser_compositor.cc b/blimp/client/app/compositor/browser_compositor.cc
index 81e278eb340cf6a64b55f072c62ca3d3497b5538..8eb71db5935d8c55af5a6f13219e6c7b278ef76c 100644
--- a/blimp/client/app/compositor/browser_compositor.cc
+++ b/blimp/client/app/compositor/browser_compositor.cc
@@ -4,154 +4,28 @@
#include "blimp/client/app/compositor/browser_compositor.h"
-#include "base/bind.h"
-#include "base/lazy_instance.h"
-#include "base/threading/thread_task_runner_handle.h"
#include "blimp/client/public/compositor/compositor_dependencies.h"
#include "blimp/client/support/compositor/blimp_context_provider.h"
-#include "cc/animation/animation_host.h"
-#include "cc/layers/layer.h"
-#include "cc/output/compositor_frame.h"
-#include "cc/output/texture_mailbox_deleter.h"
-#include "cc/raster/single_thread_task_graph_runner.h"
-#include "cc/surfaces/display.h"
-#include "cc/surfaces/surface_display_output_surface.h"
-#include "cc/surfaces/surface_id_allocator.h"
-#include "cc/surfaces/surface_manager.h"
-#include "cc/trees/layer_tree_host.h"
-#include "gpu/command_buffer/client/context_support.h"
-#include "gpu/command_buffer/client/gles2_lib.h"
+#include "cc/output/context_provider.h"
namespace blimp {
namespace client {
-namespace {
-
-class SimpleTaskGraphRunner : public cc::SingleThreadTaskGraphRunner {
- public:
- SimpleTaskGraphRunner() {
- Start("BlimpBrowserCompositorWorker",
- base::SimpleThread::Options(base::ThreadPriority::BACKGROUND));
- }
-
- ~SimpleTaskGraphRunner() override { Shutdown(); }
-};
-
-class DisplayOutputSurface : public cc::OutputSurface {
- public:
- explicit DisplayOutputSurface(
- scoped_refptr<cc::ContextProvider> context_provider)
- : cc::OutputSurface(std::move(context_provider), nullptr, nullptr) {}
-
- ~DisplayOutputSurface() override = default;
-
- // cc::OutputSurface implementation
- void SwapBuffers(cc::CompositorFrame frame) override {
- // See cc::OutputSurface::SwapBuffers() comment for details.
- context_provider_->ContextSupport()->Swap();
- cc::OutputSurface::PostSwapBuffersComplete();
- }
-
- uint32_t GetFramebufferCopyTextureFormat() override {
- // We assume we have an alpha channel from the BlimpContextProvider, so use
- // GL_RGBA here.
- return GL_RGBA;
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(DisplayOutputSurface);
-};
-
-base::LazyInstance<SimpleTaskGraphRunner> g_task_graph_runner =
- LAZY_INSTANCE_INITIALIZER;
-
-} // namespace
-
BrowserCompositor::BrowserCompositor(
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(
- surface_id_allocator_->client_id());
-
- cc::LayerTreeHost::InitParams params;
- params.client = this;
- params.gpu_memory_buffer_manager =
- compositor_dependencies_->GetGpuMemoryBufferManager();
- params.task_graph_runner = g_task_graph_runner.Pointer();
- cc::LayerTreeSettings settings;
- params.settings = &settings;
- params.main_task_runner = base::ThreadTaskRunnerHandle::Get();
- params.animation_host = cc::AnimationHost::CreateMainInstance();
- host_ = cc::LayerTreeHost::CreateSingleThreaded(this, &params);
-
- root_layer_->SetBackgroundColor(SK_ColorWHITE);
- host_->GetLayerTree()->SetRootLayer(root_layer_);
- host_->SetSurfaceClientId(surface_id_allocator_->client_id());
-}
-
-BrowserCompositor::~BrowserCompositor() {
- compositor_dependencies_->GetSurfaceManager()->InvalidateSurfaceClientId(
- surface_id_allocator_->client_id());
-}
-
-void BrowserCompositor::SetContentLayer(
- scoped_refptr<cc::Layer> content_layer) {
- root_layer_->RemoveAllChildren();
- root_layer_->AddChild(content_layer);
-}
-
-void BrowserCompositor::SetSize(const gfx::Size& size_in_px) {
- viewport_size_in_px_ = size_in_px;
+ : BlimpEmbedderCompositor(compositor_dependencies) {}
- // Update the host.
- host_->GetLayerTree()->SetViewportSize(viewport_size_in_px_);
- root_layer_->SetBounds(viewport_size_in_px_);
-
- // Update the display.
- if (display_) {
- display_->Resize(viewport_size_in_px_);
- }
-}
+BrowserCompositor::~BrowserCompositor() = default;
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.
- DCHECK(host_->IsVisible());
- host_->SetVisible(false);
- host_->ReleaseOutputSurface();
- display_.reset();
- }
-
- widget_ = gfx::kNullAcceleratedWidget;
+ scoped_refptr<cc::ContextProvider> provider;
if (widget != gfx::kNullAcceleratedWidget) {
- widget_ = widget;
- host_->SetVisible(true);
- if (output_surface_request_pending_) {
- HandlePendingOutputSurfaceRequest();
- }
+ provider = BlimpContextProvider::Create(
+ widget, compositor_dependencies()->GetGpuMemoryBufferManager());
}
-}
-void BrowserCompositor::RequestNewOutputSurface() {
- DCHECK(!output_surface_request_pending_)
- << "We already have a pending request?";
- output_surface_request_pending_ = true;
- HandlePendingOutputSurfaceRequest();
-}
-
-void BrowserCompositor::DidInitializeOutputSurface() {
- output_surface_request_pending_ = false;
-}
-
-void BrowserCompositor::DidFailToInitializeOutputSurface() {
- NOTREACHED() << "Can't fail to initialize the OutputSurface here";
+ SetContextProvider(provider);
}
void BrowserCompositor::DidCompleteSwapBuffers() {
@@ -160,49 +34,5 @@ void BrowserCompositor::DidCompleteSwapBuffers() {
}
}
-void BrowserCompositor::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_);
-
- 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);
-
- auto* task_runner = base::ThreadTaskRunnerHandle::Get().get();
- std::unique_ptr<cc::SyntheticBeginFrameSource> begin_frame_source(
- new cc::DelayBasedBeginFrameSource(
- base::MakeUnique<cc::DelayBasedTimeSource>(task_runner)));
- std::unique_ptr<cc::DisplayScheduler> scheduler(new cc::DisplayScheduler(
- begin_frame_source.get(), task_runner,
- display_output_surface->capabilities().max_frames_pending));
-
- display_ = base::MakeUnique<cc::Display>(
- nullptr /*shared_bitmap_manager*/, gpu_memory_buffer_manager,
- host_->GetSettings().renderer_settings, std::move(begin_frame_source),
- std::move(display_output_surface), std::move(scheduler),
- base::MakeUnique<cc::TextureMailboxDeleter>(task_runner));
- display_->SetVisible(true);
- display_->Resize(viewport_size_in_px_);
-
- // The Browser compositor and display share the same context provider.
- std::unique_ptr<cc::OutputSurface> delegated_output_surface =
- base::MakeUnique<cc::SurfaceDisplayOutputSurface>(
- compositor_dependencies_->GetSurfaceManager(),
- surface_id_allocator_.get(), display_.get(), context_provider,
- nullptr);
-
- host_->SetOutputSurface(std::move(delegated_output_surface));
-}
-
} // namespace client
} // namespace blimp
« no previous file with comments | « blimp/client/app/compositor/browser_compositor.h ('k') | blimp/client/core/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698