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

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

Issue 2274323002: Expose Blimp dependencies to the embedder (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@khushal_baseline_1
Patch Set: Addressed Khushal's initial comments Created 4 years, 4 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/app/compositor/browser_compositor.cc
diff --git a/blimp/client/app/compositor/browser_compositor.cc b/blimp/client/app/compositor/browser_compositor.cc
index 899db6abc14651a1db594d29ced5e9f2dae414cf..2d4fb7f46d31fc1f648a277ef0450b6472dbad1c 100644
--- a/blimp/client/app/compositor/browser_compositor.cc
+++ b/blimp/client/app/compositor/browser_compositor.cc
@@ -4,10 +4,10 @@
#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/feature/compositor/blimp_context_provider.h"
-#include "blimp/client/feature/compositor/blimp_gpu_memory_buffer_manager.h"
+#include "blimp/client/public/compositor/compositor_dependencies.h"
#include "cc/animation/animation_host.h"
#include "cc/layers/layer.h"
#include "cc/output/compositor_frame.h"
@@ -19,6 +19,7 @@
#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"
namespace blimp {
namespace client {
@@ -51,8 +52,9 @@ class DisplayOutputSurface : public cc::OutputSurface {
}
uint32_t GetFramebufferCopyTextureFormat() override {
- auto* gl = static_cast<BlimpContextProvider*>(context_provider());
- return gl->GetCopyTextureInternalFormat();
+ // We assume we have an alpha channel from the BlimpContextProvider, so use
+ // GL_RGBA here.
+ return GL_RGBA;
}
private:
@@ -62,44 +64,24 @@ class DisplayOutputSurface : public cc::OutputSurface {
base::LazyInstance<SimpleTaskGraphRunner> g_task_graph_runner =
LAZY_INSTANCE_INITIALIZER;
-base::LazyInstance<cc::SurfaceManager> g_surface_manager =
- LAZY_INSTANCE_INITIALIZER;
-
-base::LazyInstance<BlimpGpuMemoryBufferManager> g_gpu_memory_buffer_manager =
- LAZY_INSTANCE_INITIALIZER;
-
-uint32_t g_surface_id = 0;
-
} // namespace
-// static
-cc::SurfaceManager* BrowserCompositor::GetSurfaceManager() {
- return g_surface_manager.Pointer();
-}
-
-// static
-BlimpGpuMemoryBufferManager* BrowserCompositor::GetGpuMemoryBufferManager() {
- return g_gpu_memory_buffer_manager.Pointer();
-}
-
-// static
-uint32_t BrowserCompositor::AllocateSurfaceClientId() {
- return ++g_surface_id;
-}
-
-BrowserCompositor::BrowserCompositor()
- : surface_id_allocator_(base::MakeUnique<cc::SurfaceIdAllocator>(
- BrowserCompositor::AllocateSurfaceClientId())),
+BrowserCompositor::BrowserCompositor(
+ CompositorDependencies* compositor_dependencies)
+ : compositor_dependencies_(compositor_dependencies),
+ surface_id_allocator_(base::MakeUnique<cc::SurfaceIdAllocator>(
+ compositor_dependencies->AllocateSurfaceId())),
widget_(gfx::kNullAcceleratedWidget),
output_surface_request_pending_(false),
- root_layer_(cc::Layer::Create()) {
- BrowserCompositor::GetSurfaceManager()->RegisterSurfaceClientId(
+ root_layer_(cc::Layer::Create()),
+ weak_ptr_factory_(this) {
+ compositor_dependencies_->GetSurfaceManager()->RegisterSurfaceClientId(
surface_id_allocator_->client_id());
cc::LayerTreeHost::InitParams params;
params.client = this;
params.gpu_memory_buffer_manager =
- BrowserCompositor::GetGpuMemoryBufferManager();
+ compositor_dependencies_->GetGpuMemoryBufferManager();
params.task_graph_runner = g_task_graph_runner.Pointer();
cc::LayerTreeSettings settings;
params.settings = &settings;
@@ -113,7 +95,7 @@ BrowserCompositor::BrowserCompositor()
}
BrowserCompositor::~BrowserCompositor() {
- BrowserCompositor::GetSurfaceManager()->InvalidateSurfaceClientId(
+ compositor_dependencies_->GetSurfaceManager()->InvalidateSurfaceClientId(
surface_id_allocator_->client_id());
}
@@ -153,34 +135,27 @@ void BrowserCompositor::SetAcceleratedWidget(gfx::AcceleratedWidget widget) {
if (widget != gfx::kNullAcceleratedWidget) {
widget_ = widget;
host_->SetVisible(true);
- if (output_surface_request_pending_)
- HandlePendingOutputSurfaceRequest();
+ if (output_surface_request_pending_) {
+ // Request a ContextProvider now that we have a valid widget.
+ compositor_dependencies_->GetContextProvider(
+ base::Bind(&BrowserCompositor::OnContextProviderCreated,
Khushal 2016/08/25 05:02:53 I didn't see this earlier, but we are creating an
David Trainor- moved to gerrit 2016/08/26 17:15:54 Hah yeah I ran into this this morning before I saw
+ weak_ptr_factory_.GetWeakPtr()));
+ }
}
}
-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::OnContextProviderCreated(
+ scoped_refptr<cc::ContextProvider> provider) {
+ DCHECK(output_surface_request_pending_);
-void BrowserCompositor::DidFailToInitializeOutputSurface() {
- NOTREACHED() << "Can't fail to initialize the OutputSurface here";
-}
+ // TODO(dtrainor, khushalsagar): Handle ContextProvider creation failures.
+ LOG_IF(FATAL, !provider)
+ << "Failed ContextProvider requests are unsupported.";
-void BrowserCompositor::DidCompleteSwapBuffers() {
- if (!did_complete_swap_buffers_.is_null()) {
- did_complete_swap_buffers_.Run();
- }
-}
-
-void BrowserCompositor::HandlePendingOutputSurfaceRequest() {
- DCHECK(output_surface_request_pending_);
+ // While we were waiting we state changed and we no longer require an
+ // OutputSurface. Bail out.
+ if (widget_ == gfx::kNullAcceleratedWidget)
+ return;
// Can't handle the request right now since we don't have a widget.
if (!host_->visible())
@@ -188,12 +163,11 @@ void BrowserCompositor::HandlePendingOutputSurfaceRequest() {
DCHECK_NE(gfx::kNullAcceleratedWidget, widget_);
- scoped_refptr<cc::ContextProvider> context_provider =
- BlimpContextProvider::Create(
- widget_, BrowserCompositor::GetGpuMemoryBufferManager());
+ gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager =
+ compositor_dependencies_->GetGpuMemoryBufferManager();
std::unique_ptr<cc::OutputSurface> display_output_surface =
- base::MakeUnique<DisplayOutputSurface>(context_provider);
+ base::MakeUnique<DisplayOutputSurface>(provider);
auto* task_runner = base::ThreadTaskRunnerHandle::Get().get();
std::unique_ptr<cc::SyntheticBeginFrameSource> begin_frame_source(
@@ -204,8 +178,7 @@ void BrowserCompositor::HandlePendingOutputSurfaceRequest() {
display_output_surface->capabilities().max_frames_pending));
display_ = base::MakeUnique<cc::Display>(
- nullptr /*shared_bitmap_manager*/,
- BrowserCompositor::GetGpuMemoryBufferManager(),
+ nullptr /*shared_bitmap_manager*/, gpu_memory_buffer_manager,
host_->settings().renderer_settings, std::move(begin_frame_source),
std::move(display_output_surface), std::move(scheduler),
base::MakeUnique<cc::TextureMailboxDeleter>(task_runner));
@@ -215,11 +188,37 @@ void BrowserCompositor::HandlePendingOutputSurfaceRequest() {
// The Browser compositor and display share the same context provider.
std::unique_ptr<cc::OutputSurface> delegated_output_surface =
base::MakeUnique<cc::SurfaceDisplayOutputSurface>(
- BrowserCompositor::GetSurfaceManager(), surface_id_allocator_.get(),
- display_.get(), context_provider, nullptr);
+ compositor_dependencies_->GetSurfaceManager(),
+ surface_id_allocator_.get(), display_.get(), provider, nullptr);
host_->SetOutputSurface(std::move(delegated_output_surface));
}
+void BrowserCompositor::RequestNewOutputSurface() {
+ DCHECK(!output_surface_request_pending_)
+ << "We already have a pending request?";
+ output_surface_request_pending_ = true;
+ if (widget_ != gfx::kNullAcceleratedWidget) {
+ // Request a ContextProvider if we have a valid widget.
+ compositor_dependencies_->GetContextProvider(
+ base::Bind(&BrowserCompositor::OnContextProviderCreated,
+ weak_ptr_factory_.GetWeakPtr()));
+ }
+}
+
+void BrowserCompositor::DidInitializeOutputSurface() {
+ output_surface_request_pending_ = false;
+}
+
+void BrowserCompositor::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();
+ }
+}
+
} // namespace client
} // namespace blimp

Powered by Google App Engine
This is Rietveld 408576698