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

Unified Diff: services/ui/surfaces/display_compositor.cc

Issue 2481263002: Introduce Display Compositor mojo interface. Use InProcessContextProvider. (Closed)
Patch Set: Speculative fix for android build issue Created 4 years, 1 month 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: services/ui/surfaces/display_compositor.cc
diff --git a/services/ui/surfaces/display_compositor.cc b/services/ui/surfaces/display_compositor.cc
index 53c85aa4ecd5b57235c476df6bf8adaa36f28721..79abc2a89934c6391009f21c19fa75c009677e47 100644
--- a/services/ui/surfaces/display_compositor.cc
+++ b/services/ui/surfaces/display_compositor.cc
@@ -4,16 +4,50 @@
#include "services/ui/surfaces/display_compositor.h"
+#include "cc/output/in_process_context_provider.h"
#include "cc/surfaces/surface.h"
+#include "gpu/command_buffer/client/shared_memory_limits.h"
+#include "gpu/ipc/gpu_in_process_thread_service.h"
+#include "mojo/public/cpp/bindings/strong_binding.h"
+#include "services/ui/surfaces/gpu_compositor_frame_sink.h"
namespace ui {
DisplayCompositor::DisplayCompositor(
+ scoped_refptr<gpu::InProcessCommandBuffer::Service> gpu_service,
+ std::unique_ptr<MusGpuMemoryBufferManager> gpu_memory_buffer_manager,
+ gpu::ImageFactory* image_factory,
cc::mojom::DisplayCompositorClientPtr client)
- : client_(std::move(client)) {
+ : gpu_service_(std::move(gpu_service)),
+ gpu_memory_buffer_manager_(std::move(gpu_memory_buffer_manager)),
+ image_factory_(image_factory),
+ client_(std::move(client)) {
manager_.AddObserver(this);
}
+void DisplayCompositor::CreateCompositorFrameSink(
+ const cc::FrameSinkId& frame_sink_id,
+ gpu::SurfaceHandle surface_handle,
+ cc::mojom::MojoCompositorFrameSinkRequest request,
+ cc::mojom::MojoCompositorFrameSinkPrivateRequest private_request,
+ cc::mojom::MojoCompositorFrameSinkClientPtr client) {
+ // We cannot create more than one CompositorFrameSink with a given
+ // |frame_sink_id|.
+ DCHECK_EQ(0u, compositor_frame_sinks_.count(frame_sink_id));
+ scoped_refptr<cc::InProcessContextProvider> context_provider;
+ if (surface_handle != gpu::kNullSurfaceHandle) {
+ context_provider = new cc::InProcessContextProvider(
+ gpu_service_, surface_handle, gpu_memory_buffer_manager_.get(),
+ image_factory_, gpu::SharedMemoryLimits(),
+ nullptr /* shared_context */);
+ }
+ compositor_frame_sinks_[frame_sink_id] =
+ base::MakeUnique<GpuCompositorFrameSink>(
+ this, frame_sink_id, surface_handle, gpu_memory_buffer_manager_.get(),
+ std::move(context_provider), std::move(request),
+ std::move(private_request), std::move(client));
+}
+
void DisplayCompositor::AddRootSurfaceReference(const cc::SurfaceId& child_id) {
AddSurfaceReference(manager_.GetRootSurfaceId(), child_id);
}
@@ -93,6 +127,23 @@ DisplayCompositor::~DisplayCompositor() {
manager_.RemoveObserver(this);
}
+void DisplayCompositor::OnCompositorFrameSinkClientConnectionLost(
+ const cc::FrameSinkId& frame_sink_id,
+ bool destroy_compositor_frame_sink) {
+ if (destroy_compositor_frame_sink)
+ compositor_frame_sinks_.erase(frame_sink_id);
+ // TODO(fsamuel): Tell the display compositor host that the client connection
+ // has been lost so that it can drop its private connection and allow a new
+ // client instance to create a new CompositorFrameSink.
+}
+
+void DisplayCompositor::OnCompositorFrameSinkPrivateConnectionLost(
+ const cc::FrameSinkId& frame_sink_id,
+ bool destroy_compositor_frame_sink) {
+ if (destroy_compositor_frame_sink)
+ compositor_frame_sinks_.erase(frame_sink_id);
+}
+
void DisplayCompositor::OnSurfaceCreated(const cc::SurfaceId& surface_id,
const gfx::Size& frame_size,
float device_scale_factor) {

Powered by Google App Engine
This is Rietveld 408576698