| Index: components/display_compositor/display_compositor.cc
|
| diff --git a/components/display_compositor/display_compositor.cc b/components/display_compositor/display_compositor.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9e7042d80e0942fae40683007cce7f7fb1ede9ac
|
| --- /dev/null
|
| +++ b/components/display_compositor/display_compositor.cc
|
| @@ -0,0 +1,102 @@
|
| +// Copyright 2017 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "components/display_compositor/display_compositor.h"
|
| +
|
| +#include "cc/base/switches.h"
|
| +#include "cc/surfaces/surface.h"
|
| +#include "components/display_compositor/gpu_offscreen_compositor_frame_sink.h"
|
| +#include "mojo/public/cpp/bindings/strong_binding.h"
|
| +
|
| +namespace display_compositor {
|
| +
|
| +DisplayCompositor::DisplayCompositor()
|
| + : surface_manager_(cc::SurfaceManager::LifetimeType::SEQUENCES),
|
| + binding_(this) {
|
| + surface_manager_.AddObserver(this);
|
| +}
|
| +
|
| +DisplayCompositor::DisplayCompositor(
|
| + cc::mojom::DisplayCompositorRequest request,
|
| + cc::mojom::DisplayCompositorClientPtr client)
|
| + : surface_manager_(cc::SurfaceManager::LifetimeType::SEQUENCES),
|
| + client_(std::move(client)),
|
| + binding_(this, std::move(request)) {
|
| + surface_manager_.AddObserver(this);
|
| +}
|
| +
|
| +DisplayCompositor::~DisplayCompositor() {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| + surface_manager_.RemoveObserver(this);
|
| +}
|
| +
|
| +void DisplayCompositor::Bind(cc::mojom::DisplayCompositorRequest request,
|
| + cc::mojom::DisplayCompositorClientPtr client) {
|
| + binding_.Bind(std::move(request));
|
| + client_ = std::move(client);
|
| +}
|
| +
|
| +void DisplayCompositor::OnClientConnectionLost(
|
| + const cc::FrameSinkId& frame_sink_id,
|
| + bool destroy_compositor_frame_sink) {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| + if (destroy_compositor_frame_sink)
|
| + DestroyCompositorFrameSink(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::OnPrivateConnectionLost(
|
| + const cc::FrameSinkId& frame_sink_id,
|
| + bool destroy_compositor_frame_sink) {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| + if (destroy_compositor_frame_sink)
|
| + DestroyCompositorFrameSink(frame_sink_id);
|
| +}
|
| +
|
| +void DisplayCompositor::CreateDisplayCompositorFrameSink(
|
| + const cc::FrameSinkId& frame_sink_id,
|
| + gpu::SurfaceHandle surface_handle,
|
| + cc::mojom::MojoCompositorFrameSinkAssociatedRequest request,
|
| + cc::mojom::MojoCompositorFrameSinkPrivateRequest private_request,
|
| + cc::mojom::MojoCompositorFrameSinkClientPtr client,
|
| + cc::mojom::DisplayPrivateAssociatedRequest display_private_request) {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| + DCHECK_NE(surface_handle, gpu::kNullSurfaceHandle);
|
| + DCHECK_EQ(0u, compositor_frame_sinks_.count(frame_sink_id));
|
| + // TODO(fsamuel, kylechar): Implement this.
|
| + NOTREACHED();
|
| +}
|
| +
|
| +void DisplayCompositor::CreateOffscreenCompositorFrameSink(
|
| + const cc::FrameSinkId& frame_sink_id,
|
| + cc::mojom::MojoCompositorFrameSinkRequest request,
|
| + cc::mojom::MojoCompositorFrameSinkPrivateRequest private_request,
|
| + cc::mojom::MojoCompositorFrameSinkClientPtr client) {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| + DCHECK_EQ(0u, compositor_frame_sinks_.count(frame_sink_id));
|
| +
|
| + compositor_frame_sinks_[frame_sink_id] =
|
| + base::MakeUnique<GpuOffscreenCompositorFrameSink>(
|
| + this, &surface_manager_, frame_sink_id, std::move(request),
|
| + std::move(private_request), std::move(client));
|
| +}
|
| +
|
| +void DisplayCompositor::DestroyCompositorFrameSink(cc::FrameSinkId sink_id) {
|
| + compositor_frame_sinks_.erase(sink_id);
|
| +}
|
| +
|
| +void DisplayCompositor::OnSurfaceCreated(const cc::SurfaceInfo& surface_info) {
|
| + DCHECK(thread_checker_.CalledOnValidThread());
|
| + DCHECK_GT(surface_info.device_scale_factor(), 0.0f);
|
| +
|
| + if (client_)
|
| + client_->OnSurfaceCreated(surface_info);
|
| +}
|
| +
|
| +void DisplayCompositor::OnSurfaceDamaged(const cc::SurfaceId& surface_id,
|
| + bool* changed) {}
|
| +
|
| +} // namespace ui
|
|
|