Allow cc to depend on viz/client, instead of vice-versa.
After this viz/client/ does not use cc/ (only cc/base/), and does not
include any mojo-bindings-specific code. We add a negative DEPS rule for
them with a comment, as well as mentioning it in the viz/README.md for
the client/ directory.
The ClientLayerTreeFrameSink from viz/client/ moves to cc/mojo_embedder/
which is a separate component from cc that is able to depend on mojo
bindings. This keeps viz/client/ and cc/ agnostic to the means for
communicating with viz, as webview uses classic IPC to get to the viz
process, and deprecated browser compositor uses in-process communication
with viz.
The public viz mojoms had dependencies on cc/ in their typemaps but they
were incorrect as the types have all moved to the viz component, so these
DEPS are updated to reflect that.
After this, allowed dependencies look like:
aura,content -> cc/mojo_embedder -> cc,mojo-bindings
cc -> viz/client,viz/common
R=kylechar@chromium.org
TBR=dcheng
Bug: 722935
Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel;luci.chromium.try:linux_optional_gpu_tests_rel;luci.chromium.try:mac_optional_gpu_tests_rel;luci.chromium.try:win_optional_gpu_tests_rel;master.tryserver.blink:linux_trusty_blink_rel
Change-Id: Iec542fcc20f7b2bd2a42737c51dc30e0a4180de6
Reviewed-on: https://chromium-review.googlesource.com/1072314
Commit-Queue: danakj <danakj@chromium.org>
Reviewed-by: kylechar <kylechar@chromium.org>
Reviewed-by: Sadrul Chowdhury <sadrul@chromium.org>
Reviewed-by: Avi Drissman <avi@chromium.org>
Cr-Commit-Position: refs/heads/master@{#561965}
diff --git a/cc/BUILD.gn b/cc/BUILD.gn
index 4f6b936..af63935 100644
--- a/cc/BUILD.gn
+++ b/cc/BUILD.gn
@@ -369,7 +369,7 @@
"//base",
"//base/third_party/dynamic_annotations",
"//components/ukm",
- "//components/viz/common",
+ "//components/viz/client",
"//gpu",
"//gpu/command_buffer/client:gles2_interface",
"//gpu/command_buffer/client:raster_interface",
@@ -536,6 +536,7 @@
"//cc/paint",
"//components/ukm",
"//components/ukm:test_support",
+ "//components/viz/client",
"//components/viz/common",
"//components/viz/service",
"//components/viz/test:test_support",
@@ -618,6 +619,7 @@
"layers/video_frame_provider_client_impl_unittest.cc",
"layers/video_layer_impl_unittest.cc",
"layers/viewport_unittest.cc",
+ "mojo_embedder/async_layer_tree_frame_sink_unittest.cc",
"paint/discardable_image_map_unittest.cc",
"paint/display_item_list_unittest.cc",
"paint/filter_operations_unittest.cc",
@@ -729,8 +731,10 @@
":cc",
":test_support",
"//base/test:test_support",
+ "//cc/mojo_embedder",
"//cc/paint",
"//components/ukm:test_support",
+ "//components/viz/client",
"//components/viz/common",
"//components/viz/service",
"//components/viz/test:test_support",
diff --git a/cc/DEPS b/cc/DEPS
index 2e684073..cd44e0c 100644
--- a/cc/DEPS
+++ b/cc/DEPS
@@ -1,5 +1,6 @@
include_rules = [
"+components/ukm/test_ukm_recorder.h",
+ "+components/viz/client",
"+components/viz/common",
"+gpu/GLES2",
"+gpu/command_buffer/client/context_support.h",
@@ -31,6 +32,10 @@
"+ui/latency/latency_info.h",
"+ui/gfx",
"+ui/gl",
+
+ # Do not use mojo bindings in cc/. This library should be agnostic about how
+ # to communicate with viz.
+ "-mojo/public/cpp/bindings",
]
specific_include_rules = {
diff --git a/cc/mojo_embedder/BUILD.gn b/cc/mojo_embedder/BUILD.gn
new file mode 100644
index 0000000..3abdc4c
--- /dev/null
+++ b/cc/mojo_embedder/BUILD.gn
@@ -0,0 +1,24 @@
+# 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.
+
+import("//cc/cc.gni")
+
+cc_component("mojo_embedder") {
+ output_name = "cc_mojo_embedder"
+ sources = [
+ "async_layer_tree_frame_sink.cc",
+ "async_layer_tree_frame_sink.h",
+ ]
+
+ defines = [ "CC_MOJO_EMBEDDER_IMPLEMENTATION" ]
+
+ deps = [
+ "//base",
+ "//cc",
+ "//components/viz/client",
+ "//components/viz/common",
+ "//mojo/public/cpp/bindings",
+ "//services/viz/public/interfaces",
+ ]
+}
diff --git a/cc/mojo_embedder/DEPS b/cc/mojo_embedder/DEPS
new file mode 100644
index 0000000..d5c8e6fc
--- /dev/null
+++ b/cc/mojo_embedder/DEPS
@@ -0,0 +1,4 @@
+include_rules = [
+ "+mojo/public/cpp/bindings",
+ "+services/viz/public/interfaces/compositing",
+]
diff --git a/cc/mojo_embedder/README.md b/cc/mojo_embedder/README.md
new file mode 100644
index 0000000..2585c58
--- /dev/null
+++ b/cc/mojo_embedder/README.md
@@ -0,0 +1,4 @@
+# cc/mojo_embedder/
+
+This directory contains mojo bindings for connecting cc to viz via mojo.
+
diff --git a/components/viz/client/client_layer_tree_frame_sink.cc b/cc/mojo_embedder/async_layer_tree_frame_sink.cc
similarity index 68%
rename from components/viz/client/client_layer_tree_frame_sink.cc
rename to cc/mojo_embedder/async_layer_tree_frame_sink.cc
index c779823..b705f42 100644
--- a/components/viz/client/client_layer_tree_frame_sink.cc
+++ b/cc/mojo_embedder/async_layer_tree_frame_sink.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 "components/viz/client/client_layer_tree_frame_sink.h"
+#include "cc/mojo_embedder/async_layer_tree_frame_sink.h"
#include <utility>
@@ -15,33 +15,32 @@
#include "components/viz/common/hit_test/hit_test_region_list.h"
#include "components/viz/common/quads/compositor_frame.h"
-namespace viz {
+namespace cc {
+namespace mojo_embedder {
-ClientLayerTreeFrameSink::InitParams::InitParams() = default;
+AsyncLayerTreeFrameSink::InitParams::InitParams() = default;
+AsyncLayerTreeFrameSink::InitParams::~InitParams() = default;
-ClientLayerTreeFrameSink::InitParams::~InitParams() = default;
+AsyncLayerTreeFrameSink::UnboundMessagePipes::UnboundMessagePipes() = default;
+AsyncLayerTreeFrameSink::UnboundMessagePipes::~UnboundMessagePipes() = default;
-ClientLayerTreeFrameSink::UnboundMessagePipes::UnboundMessagePipes() = default;
-
-ClientLayerTreeFrameSink::UnboundMessagePipes::~UnboundMessagePipes() = default;
-
-bool ClientLayerTreeFrameSink::UnboundMessagePipes::HasUnbound() const {
+bool AsyncLayerTreeFrameSink::UnboundMessagePipes::HasUnbound() const {
return client_request.is_pending() &&
(compositor_frame_sink_info.is_valid() ^
compositor_frame_sink_associated_info.is_valid());
}
-ClientLayerTreeFrameSink::UnboundMessagePipes::UnboundMessagePipes(
+AsyncLayerTreeFrameSink::UnboundMessagePipes::UnboundMessagePipes(
UnboundMessagePipes&& other) = default;
-ClientLayerTreeFrameSink::ClientLayerTreeFrameSink(
- scoped_refptr<ContextProvider> context_provider,
- scoped_refptr<RasterContextProvider> worker_context_provider,
+AsyncLayerTreeFrameSink::AsyncLayerTreeFrameSink(
+ scoped_refptr<viz::ContextProvider> context_provider,
+ scoped_refptr<viz::RasterContextProvider> worker_context_provider,
InitParams* params)
- : cc::LayerTreeFrameSink(std::move(context_provider),
- std::move(worker_context_provider),
- std::move(params->compositor_task_runner),
- params->gpu_memory_buffer_manager),
+ : LayerTreeFrameSink(std::move(context_provider),
+ std::move(worker_context_provider),
+ std::move(params->compositor_task_runner),
+ params->gpu_memory_buffer_manager),
hit_test_data_provider_(std::move(params->hit_test_data_provider)),
local_surface_id_provider_(std::move(params->local_surface_id_provider)),
synthetic_begin_frame_source_(
@@ -54,28 +53,27 @@
DETACH_FROM_THREAD(thread_checker_);
}
-ClientLayerTreeFrameSink::~ClientLayerTreeFrameSink() {}
+AsyncLayerTreeFrameSink::~AsyncLayerTreeFrameSink() {}
-bool ClientLayerTreeFrameSink::BindToClient(
- cc::LayerTreeFrameSinkClient* client) {
+bool AsyncLayerTreeFrameSink::BindToClient(LayerTreeFrameSinkClient* client) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- if (!cc::LayerTreeFrameSink::BindToClient(client))
+ if (!LayerTreeFrameSink::BindToClient(client))
return false;
DCHECK(pipes_.HasUnbound());
if (pipes_.compositor_frame_sink_info.is_valid()) {
compositor_frame_sink_.Bind(std::move(pipes_.compositor_frame_sink_info));
compositor_frame_sink_.set_connection_error_with_reason_handler(
- base::Bind(&ClientLayerTreeFrameSink::OnMojoConnectionError,
- weak_factory_.GetWeakPtr()));
+ base::BindOnce(&AsyncLayerTreeFrameSink::OnMojoConnectionError,
+ weak_factory_.GetWeakPtr()));
compositor_frame_sink_ptr_ = compositor_frame_sink_.get();
} else if (pipes_.compositor_frame_sink_associated_info.is_valid()) {
compositor_frame_sink_associated_.Bind(
std::move(pipes_.compositor_frame_sink_associated_info));
compositor_frame_sink_associated_.set_connection_error_with_reason_handler(
- base::Bind(&ClientLayerTreeFrameSink::OnMojoConnectionError,
- weak_factory_.GetWeakPtr()));
+ base::BindOnce(&AsyncLayerTreeFrameSink::OnMojoConnectionError,
+ weak_factory_.GetWeakPtr()));
compositor_frame_sink_ptr_ = compositor_frame_sink_associated_.get();
}
client_binding_.Bind(std::move(pipes_.client_request),
@@ -84,7 +82,7 @@
if (synthetic_begin_frame_source_) {
client->SetBeginFrameSource(synthetic_begin_frame_source_.get());
} else {
- begin_frame_source_ = std::make_unique<ExternalBeginFrameSource>(this);
+ begin_frame_source_ = std::make_unique<viz::ExternalBeginFrameSource>(this);
begin_frame_source_->OnSetBeginFrameSourcePaused(begin_frames_paused_);
client->SetBeginFrameSource(begin_frame_source_.get());
}
@@ -95,7 +93,7 @@
return true;
}
-void ClientLayerTreeFrameSink::DetachFromClient() {
+void AsyncLayerTreeFrameSink::DetachFromClient() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
client_->SetBeginFrameSource(nullptr);
begin_frame_source_.reset();
@@ -104,22 +102,23 @@
compositor_frame_sink_.reset();
compositor_frame_sink_associated_.reset();
compositor_frame_sink_ptr_ = nullptr;
- cc::LayerTreeFrameSink::DetachFromClient();
+ LayerTreeFrameSink::DetachFromClient();
}
-void ClientLayerTreeFrameSink::SetLocalSurfaceId(
- const LocalSurfaceId& local_surface_id) {
+void AsyncLayerTreeFrameSink::SetLocalSurfaceId(
+ const viz::LocalSurfaceId& local_surface_id) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK(local_surface_id.is_valid());
DCHECK(enable_surface_synchronization_);
local_surface_id_ = local_surface_id;
}
-void ClientLayerTreeFrameSink::SubmitCompositorFrame(CompositorFrame frame) {
+void AsyncLayerTreeFrameSink::SubmitCompositorFrame(
+ viz::CompositorFrame frame) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK(compositor_frame_sink_ptr_);
DCHECK(frame.metadata.begin_frame_ack.has_damage);
- DCHECK_LE(BeginFrameArgs::kStartingFrameNumber,
+ DCHECK_LE(viz::BeginFrameArgs::kStartingFrameNumber,
frame.metadata.begin_frame_ack.sequence_number);
if (!enable_surface_synchronization_) {
@@ -142,7 +141,7 @@
TRACE_EVENT_CATEGORY_GROUP_ENABLED(TRACE_DISABLED_BY_DEFAULT("cc.debug.ipc"),
&tracing_enabled);
- base::Optional<HitTestRegionList> hit_test_region_list;
+ base::Optional<viz::HitTestRegionList> hit_test_region_list;
if (hit_test_data_provider_)
hit_test_region_list = hit_test_data_provider_->GetHitTestData(frame);
else
@@ -158,33 +157,35 @@
: 0);
}
-void ClientLayerTreeFrameSink::DidNotProduceFrame(const BeginFrameAck& ack) {
+void AsyncLayerTreeFrameSink::DidNotProduceFrame(
+ const viz::BeginFrameAck& ack) {
DCHECK(compositor_frame_sink_ptr_);
DCHECK(!ack.has_damage);
- DCHECK_LE(BeginFrameArgs::kStartingFrameNumber, ack.sequence_number);
+ DCHECK_LE(viz::BeginFrameArgs::kStartingFrameNumber, ack.sequence_number);
compositor_frame_sink_ptr_->DidNotProduceFrame(ack);
}
-void ClientLayerTreeFrameSink::DidAllocateSharedBitmap(
+void AsyncLayerTreeFrameSink::DidAllocateSharedBitmap(
mojo::ScopedSharedBufferHandle buffer,
- const SharedBitmapId& id) {
+ const viz::SharedBitmapId& id) {
DCHECK(compositor_frame_sink_ptr_);
compositor_frame_sink_ptr_->DidAllocateSharedBitmap(std::move(buffer), id);
}
-void ClientLayerTreeFrameSink::DidDeleteSharedBitmap(const SharedBitmapId& id) {
+void AsyncLayerTreeFrameSink::DidDeleteSharedBitmap(
+ const viz::SharedBitmapId& id) {
DCHECK(compositor_frame_sink_ptr_);
compositor_frame_sink_ptr_->DidDeleteSharedBitmap(id);
}
-void ClientLayerTreeFrameSink::DidReceiveCompositorFrameAck(
- const std::vector<ReturnedResource>& resources) {
+void AsyncLayerTreeFrameSink::DidReceiveCompositorFrameAck(
+ const std::vector<viz::ReturnedResource>& resources) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
client_->ReclaimResources(resources);
client_->DidReceiveCompositorFrameAck();
}
-void ClientLayerTreeFrameSink::DidPresentCompositorFrame(
+void AsyncLayerTreeFrameSink::DidPresentCompositorFrame(
uint32_t presentation_token,
base::TimeTicks time,
base::TimeDelta refresh,
@@ -193,42 +194,42 @@
client_->DidPresentCompositorFrame(presentation_token, time, refresh, flags);
}
-void ClientLayerTreeFrameSink::DidDiscardCompositorFrame(
+void AsyncLayerTreeFrameSink::DidDiscardCompositorFrame(
uint32_t presentation_token) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
client_->DidDiscardCompositorFrame(presentation_token);
}
-void ClientLayerTreeFrameSink::OnBeginFrame(const BeginFrameArgs& args) {
+void AsyncLayerTreeFrameSink::OnBeginFrame(const viz::BeginFrameArgs& args) {
if (!needs_begin_frames_) {
// We had a race with SetNeedsBeginFrame(false) and still need to let the
// sink know that we didn't use this BeginFrame.
DidNotProduceFrame(
- BeginFrameAck(args.source_id, args.sequence_number, false));
+ viz::BeginFrameAck(args.source_id, args.sequence_number, false));
}
if (begin_frame_source_)
begin_frame_source_->OnBeginFrame(args);
}
-void ClientLayerTreeFrameSink::OnBeginFramePausedChanged(bool paused) {
+void AsyncLayerTreeFrameSink::OnBeginFramePausedChanged(bool paused) {
begin_frames_paused_ = paused;
if (begin_frame_source_)
begin_frame_source_->OnSetBeginFrameSourcePaused(paused);
}
-void ClientLayerTreeFrameSink::ReclaimResources(
- const std::vector<ReturnedResource>& resources) {
+void AsyncLayerTreeFrameSink::ReclaimResources(
+ const std::vector<viz::ReturnedResource>& resources) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
client_->ReclaimResources(resources);
}
-void ClientLayerTreeFrameSink::OnNeedsBeginFrames(bool needs_begin_frames) {
+void AsyncLayerTreeFrameSink::OnNeedsBeginFrames(bool needs_begin_frames) {
DCHECK(compositor_frame_sink_ptr_);
needs_begin_frames_ = needs_begin_frames;
compositor_frame_sink_ptr_->SetNeedsBeginFrame(needs_begin_frames);
}
-void ClientLayerTreeFrameSink::OnMojoConnectionError(
+void AsyncLayerTreeFrameSink::OnMojoConnectionError(
uint32_t custom_reason,
const std::string& description) {
if (custom_reason)
@@ -237,4 +238,5 @@
client_->DidLoseLayerTreeFrameSink();
}
-} // namespace viz
+} // namespace mojo_embedder
+} // namespace cc
diff --git a/cc/mojo_embedder/async_layer_tree_frame_sink.h b/cc/mojo_embedder/async_layer_tree_frame_sink.h
new file mode 100644
index 0000000..1810393
--- /dev/null
+++ b/cc/mojo_embedder/async_layer_tree_frame_sink.h
@@ -0,0 +1,151 @@
+// 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.
+
+#ifndef CC_MOJO_EMBEDDER_ASYNC_LAYER_TREE_FRAME_SINK_H_
+#define CC_MOJO_EMBEDDER_ASYNC_LAYER_TREE_FRAME_SINK_H_
+
+#include <memory>
+#include <string>
+#include <vector>
+
+#include "base/macros.h"
+#include "base/memory/weak_ptr.h"
+#include "base/single_thread_task_runner.h"
+#include "cc/mojo_embedder/mojo_embedder_export.h"
+#include "cc/trees/layer_tree_frame_sink.h"
+#include "components/viz/common/frame_sinks/begin_frame_source.h"
+#include "components/viz/common/gpu/context_provider.h"
+#include "components/viz/common/surfaces/parent_local_surface_id_allocator.h"
+#include "components/viz/common/surfaces/surface_id.h"
+#include "mojo/public/cpp/bindings/binding.h"
+#include "services/viz/public/interfaces/compositing/compositor_frame_sink.mojom.h"
+
+namespace viz {
+class HitTestDataProvider;
+class LocalSurfaceIdProvider;
+} // namespace viz
+
+namespace cc {
+namespace mojo_embedder {
+
+// A mojo-based implementation of LayerTreeFrameSink. The typically-used
+// implementation for cc instances that do not share a process with the viz
+// display compositor.
+class CC_MOJO_EMBEDDER_EXPORT AsyncLayerTreeFrameSink
+ : public LayerTreeFrameSink,
+ public viz::mojom::CompositorFrameSinkClient,
+ public viz::ExternalBeginFrameSourceClient {
+ public:
+ struct CC_MOJO_EMBEDDER_EXPORT UnboundMessagePipes {
+ UnboundMessagePipes();
+ ~UnboundMessagePipes();
+ UnboundMessagePipes(UnboundMessagePipes&& other);
+
+ bool HasUnbound() const;
+
+ // Only one of |compositor_frame_sink_info| or
+ // |compositor_frame_sink_associated_info| should be set.
+ viz::mojom::CompositorFrameSinkPtrInfo compositor_frame_sink_info;
+ viz::mojom::CompositorFrameSinkAssociatedPtrInfo
+ compositor_frame_sink_associated_info;
+ viz::mojom::CompositorFrameSinkClientRequest client_request;
+ };
+
+ struct CC_MOJO_EMBEDDER_EXPORT InitParams {
+ InitParams();
+ ~InitParams();
+
+ scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner;
+ gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager = nullptr;
+ std::unique_ptr<viz::SyntheticBeginFrameSource>
+ synthetic_begin_frame_source;
+ std::unique_ptr<viz::HitTestDataProvider> hit_test_data_provider;
+ std::unique_ptr<viz::LocalSurfaceIdProvider> local_surface_id_provider;
+ UnboundMessagePipes pipes;
+ bool enable_surface_synchronization = false;
+ bool wants_animate_only_begin_frames = false;
+ };
+
+ AsyncLayerTreeFrameSink(
+ scoped_refptr<viz::ContextProvider> context_provider,
+ scoped_refptr<viz::RasterContextProvider> worker_context_provider,
+ InitParams* params);
+
+ ~AsyncLayerTreeFrameSink() override;
+
+ const viz::HitTestDataProvider* hit_test_data_provider() const {
+ return hit_test_data_provider_.get();
+ }
+
+ const viz::LocalSurfaceId& local_surface_id() const {
+ return local_surface_id_;
+ }
+
+ // LayerTreeFrameSink implementation.
+ bool BindToClient(LayerTreeFrameSinkClient* client) override;
+ void DetachFromClient() override;
+ void SetLocalSurfaceId(const viz::LocalSurfaceId& local_surface_id) override;
+ void SubmitCompositorFrame(viz::CompositorFrame frame) override;
+ void DidNotProduceFrame(const viz::BeginFrameAck& ack) override;
+ void DidAllocateSharedBitmap(mojo::ScopedSharedBufferHandle buffer,
+ const viz::SharedBitmapId& id) override;
+ void DidDeleteSharedBitmap(const viz::SharedBitmapId& id) override;
+
+ private:
+ // mojom::CompositorFrameSinkClient implementation:
+ void DidReceiveCompositorFrameAck(
+ const std::vector<viz::ReturnedResource>& resources) override;
+ void DidPresentCompositorFrame(uint32_t presentation_token,
+ base::TimeTicks time,
+ base::TimeDelta refresh,
+ uint32_t flags) override;
+ void DidDiscardCompositorFrame(uint32_t presentation_token) override;
+ void OnBeginFrame(const viz::BeginFrameArgs& begin_frame_args) override;
+ void OnBeginFramePausedChanged(bool paused) override;
+ void ReclaimResources(
+ const std::vector<viz::ReturnedResource>& resources) override;
+
+ // ExternalBeginFrameSourceClient implementation.
+ void OnNeedsBeginFrames(bool needs_begin_frames) override;
+
+ void OnMojoConnectionError(uint32_t custom_reason,
+ const std::string& description);
+
+ bool begin_frames_paused_ = false;
+ bool needs_begin_frames_ = false;
+ viz::LocalSurfaceId local_surface_id_;
+ std::unique_ptr<viz::HitTestDataProvider> hit_test_data_provider_;
+ std::unique_ptr<viz::LocalSurfaceIdProvider> local_surface_id_provider_;
+ std::unique_ptr<viz::ExternalBeginFrameSource> begin_frame_source_;
+ std::unique_ptr<viz::SyntheticBeginFrameSource> synthetic_begin_frame_source_;
+
+ // Message pipes that will be bound when BindToClient() is called.
+ UnboundMessagePipes pipes_;
+
+ // One of |compositor_frame_sink_| or |compositor_frame_sink_associated_| will
+ // be bound after calling BindToClient(). |compositor_frame_sink_ptr_| will
+ // point to message pipe we want to use.
+ viz::mojom::CompositorFrameSink* compositor_frame_sink_ptr_ = nullptr;
+ viz::mojom::CompositorFrameSinkPtr compositor_frame_sink_;
+ viz::mojom::CompositorFrameSinkAssociatedPtr
+ compositor_frame_sink_associated_;
+ mojo::Binding<viz::mojom::CompositorFrameSinkClient> client_binding_;
+
+ THREAD_CHECKER(thread_checker_);
+ const bool enable_surface_synchronization_;
+ const bool wants_animate_only_begin_frames_;
+
+ viz::LocalSurfaceId last_submitted_local_surface_id_;
+ float last_submitted_device_scale_factor_ = 1.f;
+ gfx::Size last_submitted_size_in_pixels_;
+
+ base::WeakPtrFactory<AsyncLayerTreeFrameSink> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(AsyncLayerTreeFrameSink);
+};
+
+} // namespace mojo_embedder
+} // namespace cc
+
+#endif // CC_MOJO_EMBEDDER_ASYNC_LAYER_TREE_FRAME_SINK_H_
diff --git a/components/viz/client/client_layer_tree_frame_sink_unittest.cc b/cc/mojo_embedder/async_layer_tree_frame_sink_unittest.cc
similarity index 72%
rename from components/viz/client/client_layer_tree_frame_sink_unittest.cc
rename to cc/mojo_embedder/async_layer_tree_frame_sink_unittest.cc
index a554f5c8..70643db 100644
--- a/components/viz/client/client_layer_tree_frame_sink_unittest.cc
+++ b/cc/mojo_embedder/async_layer_tree_frame_sink_unittest.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 "components/viz/client/client_layer_tree_frame_sink.h"
+#include "cc/mojo_embedder/async_layer_tree_frame_sink.h"
#include <memory>
@@ -19,13 +19,14 @@
#include "services/viz/public/interfaces/compositing/compositor_frame_sink.mojom.h"
#include "testing/gtest/include/gtest/gtest.h"
-namespace viz {
+namespace cc {
+namespace mojo_embedder {
namespace {
// Used to track the thread DidLoseLayerTreeFrameSink() is called on (and quit
// a RunLoop).
class ThreadTrackingLayerTreeFrameSinkClient
- : public cc::FakeLayerTreeFrameSinkClient {
+ : public FakeLayerTreeFrameSinkClient {
public:
ThreadTrackingLayerTreeFrameSinkClient(
base::PlatformThreadId* called_thread_id,
@@ -33,10 +34,10 @@
: called_thread_id_(called_thread_id), run_loop_(run_loop) {}
~ThreadTrackingLayerTreeFrameSinkClient() override = default;
- // cc::FakeLayerTreeFrameSinkClient:
+ // FakeLayerTreeFrameSinkClient:
void DidLoseLayerTreeFrameSink() override {
EXPECT_FALSE(did_lose_layer_tree_frame_sink_called());
- cc::FakeLayerTreeFrameSinkClient::DidLoseLayerTreeFrameSink();
+ FakeLayerTreeFrameSinkClient::DidLoseLayerTreeFrameSink();
*called_thread_id_ = base::PlatformThread::CurrentId();
run_loop_->Quit();
}
@@ -48,31 +49,32 @@
DISALLOW_COPY_AND_ASSIGN(ThreadTrackingLayerTreeFrameSinkClient);
};
-TEST(ClientLayerTreeFrameSinkTest,
+TEST(AsyncLayerTreeFrameSinkTest,
DidLoseLayerTreeFrameSinkCalledOnConnectionError) {
base::Thread bg_thread("BG Thread");
bg_thread.Start();
- scoped_refptr<TestContextProvider> provider = TestContextProvider::Create();
- TestGpuMemoryBufferManager test_gpu_memory_buffer_manager;
+ scoped_refptr<viz::TestContextProvider> provider =
+ viz::TestContextProvider::Create();
+ viz::TestGpuMemoryBufferManager test_gpu_memory_buffer_manager;
- mojom::CompositorFrameSinkPtrInfo sink_info;
- mojom::CompositorFrameSinkRequest sink_request =
+ viz::mojom::CompositorFrameSinkPtrInfo sink_info;
+ viz::mojom::CompositorFrameSinkRequest sink_request =
mojo::MakeRequest(&sink_info);
- mojom::CompositorFrameSinkClientPtr client;
- mojom::CompositorFrameSinkClientRequest client_request =
+ viz::mojom::CompositorFrameSinkClientPtr client;
+ viz::mojom::CompositorFrameSinkClientRequest client_request =
mojo::MakeRequest(&client);
- ClientLayerTreeFrameSink::InitParams init_params;
+ AsyncLayerTreeFrameSink::InitParams init_params;
init_params.compositor_task_runner = bg_thread.task_runner();
init_params.gpu_memory_buffer_manager = &test_gpu_memory_buffer_manager;
init_params.pipes.compositor_frame_sink_info = std::move(sink_info);
init_params.pipes.client_request = std::move(client_request);
init_params.local_surface_id_provider =
- std::make_unique<DefaultLocalSurfaceIdProvider>();
+ std::make_unique<viz::DefaultLocalSurfaceIdProvider>();
init_params.enable_surface_synchronization = true;
- ClientLayerTreeFrameSink layer_tree_frame_sink(std::move(provider), nullptr,
- &init_params);
+ AsyncLayerTreeFrameSink layer_tree_frame_sink(std::move(provider), nullptr,
+ &init_params);
base::PlatformThreadId called_thread_id = base::kInvalidThreadId;
base::RunLoop close_run_loop;
@@ -80,7 +82,7 @@
&close_run_loop);
auto bind_in_background =
- [](ClientLayerTreeFrameSink* layer_tree_frame_sink,
+ [](AsyncLayerTreeFrameSink* layer_tree_frame_sink,
ThreadTrackingLayerTreeFrameSinkClient* frame_sink_client) {
layer_tree_frame_sink->BindToClient(frame_sink_client);
};
@@ -91,7 +93,7 @@
// Closes the pipe, which should trigger calling DidLoseLayerTreeFrameSink()
// (and quitting the RunLoop). There is no need to wait for BindToClient()
// to complete as mojo::Binding error callbacks are processed asynchronously.
- sink_request = mojom::CompositorFrameSinkRequest();
+ sink_request = viz::mojom::CompositorFrameSinkRequest();
close_run_loop.Run();
EXPECT_NE(base::kInvalidThreadId, called_thread_id);
@@ -99,12 +101,11 @@
// DetachFromClient() has to be called on the background thread.
base::RunLoop detach_run_loop;
- auto detach_in_background =
- [](ClientLayerTreeFrameSink* layer_tree_frame_sink,
- base::RunLoop* detach_run_loop) {
- layer_tree_frame_sink->DetachFromClient();
- detach_run_loop->Quit();
- };
+ auto detach_in_background = [](AsyncLayerTreeFrameSink* layer_tree_frame_sink,
+ base::RunLoop* detach_run_loop) {
+ layer_tree_frame_sink->DetachFromClient();
+ detach_run_loop->Quit();
+ };
bg_thread.task_runner()->PostTask(
FROM_HERE, base::BindOnce(detach_in_background,
base::Unretained(&layer_tree_frame_sink),
@@ -113,4 +114,5 @@
}
} // namespace
-} // namespace viz
+} // namespace mojo_embedder
+} // namespace cc
diff --git a/cc/mojo_embedder/mojo_embedder_export.h b/cc/mojo_embedder/mojo_embedder_export.h
new file mode 100644
index 0000000..2eb16adb
--- /dev/null
+++ b/cc/mojo_embedder/mojo_embedder_export.h
@@ -0,0 +1,29 @@
+// 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.
+
+#ifndef CC_MOJO_EMBEDDER_MOJO_EMBEDDER_EXPORT_H_
+#define CC_MOJO_EMBEDDER_MOJO_EMBEDDER_EXPORT_H_
+
+#if defined(COMPONENT_BUILD)
+#if defined(WIN32)
+
+#if defined(CC_MOJO_EMBEDDER_IMPLEMENTATION)
+#define CC_MOJO_EMBEDDER_EXPORT __declspec(dllexport)
+#else
+#define CC_MOJO_EMBEDDER_EXPORT __declspec(dllimport)
+#endif // defined(CC_MOJO_EMBEDDER_IMPLEMENTATION)
+
+#else // defined(WIN32)
+#if defined(CC_MOJO_EMBEDDER_IMPLEMENTATION)
+#define CC_MOJO_EMBEDDER_EXPORT __attribute__((visibility("default")))
+#else
+#define CC_MOJO_EMBEDDER_EXPORT
+#endif
+#endif
+
+#else // defined(COMPONENT_BUILD)
+#define CC_MOJO_EMBEDDER_EXPORT
+#endif
+
+#endif // CC_MOJO_EMBEDDER_MOJO_EMBEDDER_EXPORT_H_
diff --git a/components/viz/README.md b/components/viz/README.md
index c7b048b..74ed1c37 100644
--- a/components/viz/README.md
+++ b/components/viz/README.md
@@ -71,7 +71,10 @@
### client <a name="directory-structure-client"></a>
Client library for accessing Viz services. May be used from privileged (eg
-browser) or unprivileged (eg renderer) processes.
+browser) or unprivileged (eg renderer) processes. The client library should
+remain agnostic about *how* to communicate with viz (in other words should not
+use mojo bindings), as some viz clients use mojo but others use it in-process
+or via other IPC mechanisms.
| Can depend on: |
|:---------------|
diff --git a/components/viz/client/BUILD.gn b/components/viz/client/BUILD.gn
index 4bbeeb8..7a70c1e 100644
--- a/components/viz/client/BUILD.gn
+++ b/components/viz/client/BUILD.gn
@@ -6,8 +6,6 @@
viz_component("client") {
sources = [
- "client_layer_tree_frame_sink.cc",
- "client_layer_tree_frame_sink.h",
"frame_eviction_manager.cc",
"frame_eviction_manager.h",
"frame_evictor.cc",
@@ -23,17 +21,16 @@
public_deps = [
"//base",
- "//cc",
"//components/viz/common",
- "//mojo/public/cpp/bindings",
- "//services/viz/public/interfaces",
+ ]
+ deps = [
+ "//cc/base",
]
}
viz_source_set("unit_tests") {
testonly = true
sources = [
- "client_layer_tree_frame_sink_unittest.cc",
"hit_test_data_provider_draw_quad_unittest.cc",
]
@@ -41,7 +38,6 @@
":client",
"//base",
"//base/test:test_support",
- "//cc:test_support",
"//components/viz/client",
"//components/viz/test:test_support",
"//mojo/public/cpp/bindings",
diff --git a/components/viz/client/DEPS b/components/viz/client/DEPS
index db90fed94..8c795b8 100644
--- a/components/viz/client/DEPS
+++ b/components/viz/client/DEPS
@@ -1,19 +1,18 @@
# Please consult components/viz/README.md about allowable dependencies.
include_rules = [
- "+cc",
- "-cc/test",
"-components/viz/common/features.h",
"-components/viz/common/switches.h",
"+components/viz/client",
- "+mojo/public/cpp/bindings",
- "+mojo/public/cpp/system",
- "+services/viz/public/interfaces",
+
+ # Do not use mojo bindings in viz/client/. This library should be agnostic
+ # about how to communicate with viz.
+ "-mojo/public/cpp/bindings",
]
specific_include_rules = {
".*unittest\.cc": [
- "+cc/test",
"+components/viz/test",
+ "+mojo/public/cpp",
],
}
diff --git a/components/viz/client/client_layer_tree_frame_sink.h b/components/viz/client/client_layer_tree_frame_sink.h
deleted file mode 100644
index 33f06266..0000000
--- a/components/viz/client/client_layer_tree_frame_sink.h
+++ /dev/null
@@ -1,140 +0,0 @@
-// 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.
-
-#ifndef COMPONENTS_VIZ_CLIENT_CLIENT_LAYER_TREE_FRAME_SINK_H_
-#define COMPONENTS_VIZ_CLIENT_CLIENT_LAYER_TREE_FRAME_SINK_H_
-
-#include <memory>
-#include <string>
-#include <vector>
-
-#include "base/macros.h"
-#include "base/memory/weak_ptr.h"
-#include "base/single_thread_task_runner.h"
-#include "cc/trees/layer_tree_frame_sink.h"
-#include "components/viz/client/viz_client_export.h"
-#include "components/viz/common/frame_sinks/begin_frame_source.h"
-#include "components/viz/common/gpu/context_provider.h"
-#include "components/viz/common/surfaces/parent_local_surface_id_allocator.h"
-#include "components/viz/common/surfaces/surface_id.h"
-#include "mojo/public/cpp/bindings/binding.h"
-#include "services/viz/public/interfaces/compositing/compositor_frame_sink.mojom.h"
-
-namespace viz {
-
-class HitTestDataProvider;
-class LocalSurfaceIdProvider;
-
-class VIZ_CLIENT_EXPORT ClientLayerTreeFrameSink
- : public cc::LayerTreeFrameSink,
- public mojom::CompositorFrameSinkClient,
- public ExternalBeginFrameSourceClient {
- public:
- struct VIZ_CLIENT_EXPORT UnboundMessagePipes {
- UnboundMessagePipes();
- ~UnboundMessagePipes();
- UnboundMessagePipes(UnboundMessagePipes&& other);
-
- bool HasUnbound() const;
-
- // Only one of |compositor_frame_sink_info| or
- // |compositor_frame_sink_associated_info| should be set.
- mojom::CompositorFrameSinkPtrInfo compositor_frame_sink_info;
- mojom::CompositorFrameSinkAssociatedPtrInfo
- compositor_frame_sink_associated_info;
- mojom::CompositorFrameSinkClientRequest client_request;
- };
-
- struct VIZ_CLIENT_EXPORT InitParams {
- InitParams();
- ~InitParams();
-
- scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner;
- gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager = nullptr;
- std::unique_ptr<SyntheticBeginFrameSource> synthetic_begin_frame_source;
- std::unique_ptr<HitTestDataProvider> hit_test_data_provider;
- std::unique_ptr<LocalSurfaceIdProvider> local_surface_id_provider;
- UnboundMessagePipes pipes;
- bool enable_surface_synchronization = false;
- bool wants_animate_only_begin_frames = false;
- };
-
- ClientLayerTreeFrameSink(
- scoped_refptr<ContextProvider> context_provider,
- scoped_refptr<RasterContextProvider> worker_context_provider,
- InitParams* params);
-
- ~ClientLayerTreeFrameSink() override;
-
- const HitTestDataProvider* hit_test_data_provider() const {
- return hit_test_data_provider_.get();
- }
-
- const LocalSurfaceId& local_surface_id() const { return local_surface_id_; }
-
- // cc::LayerTreeFrameSink implementation.
- bool BindToClient(cc::LayerTreeFrameSinkClient* client) override;
- void DetachFromClient() override;
- void SetLocalSurfaceId(const LocalSurfaceId& local_surface_id) override;
- void SubmitCompositorFrame(CompositorFrame frame) override;
- void DidNotProduceFrame(const BeginFrameAck& ack) override;
- void DidAllocateSharedBitmap(mojo::ScopedSharedBufferHandle buffer,
- const SharedBitmapId& id) override;
- void DidDeleteSharedBitmap(const SharedBitmapId& id) override;
-
- private:
- // mojom::CompositorFrameSinkClient implementation:
- void DidReceiveCompositorFrameAck(
- const std::vector<ReturnedResource>& resources) override;
- void DidPresentCompositorFrame(uint32_t presentation_token,
- base::TimeTicks time,
- base::TimeDelta refresh,
- uint32_t flags) override;
- void DidDiscardCompositorFrame(uint32_t presentation_token) override;
- void OnBeginFrame(const BeginFrameArgs& begin_frame_args) override;
- void OnBeginFramePausedChanged(bool paused) override;
- void ReclaimResources(
- const std::vector<ReturnedResource>& resources) override;
-
- // ExternalBeginFrameSourceClient implementation.
- void OnNeedsBeginFrames(bool needs_begin_frames) override;
-
- void OnMojoConnectionError(uint32_t custom_reason,
- const std::string& description);
-
- bool begin_frames_paused_ = false;
- bool needs_begin_frames_ = false;
- LocalSurfaceId local_surface_id_;
- std::unique_ptr<HitTestDataProvider> hit_test_data_provider_;
- std::unique_ptr<LocalSurfaceIdProvider> local_surface_id_provider_;
- std::unique_ptr<ExternalBeginFrameSource> begin_frame_source_;
- std::unique_ptr<SyntheticBeginFrameSource> synthetic_begin_frame_source_;
-
- // Message pipes that will be bound when BindToClient() is called.
- UnboundMessagePipes pipes_;
-
- // One of |compositor_frame_sink_| or |compositor_frame_sink_associated_| will
- // be bound after calling BindToClient(). |compositor_frame_sink_ptr_| will
- // point to message pipe we want to use.
- mojom::CompositorFrameSink* compositor_frame_sink_ptr_ = nullptr;
- mojom::CompositorFrameSinkPtr compositor_frame_sink_;
- mojom::CompositorFrameSinkAssociatedPtr compositor_frame_sink_associated_;
- mojo::Binding<mojom::CompositorFrameSinkClient> client_binding_;
-
- THREAD_CHECKER(thread_checker_);
- const bool enable_surface_synchronization_;
- const bool wants_animate_only_begin_frames_;
-
- LocalSurfaceId last_submitted_local_surface_id_;
- float last_submitted_device_scale_factor_ = 1.f;
- gfx::Size last_submitted_size_in_pixels_;
-
- base::WeakPtrFactory<ClientLayerTreeFrameSink> weak_factory_;
-
- DISALLOW_COPY_AND_ASSIGN(ClientLayerTreeFrameSink);
-};
-
-} // namespace viz
-
-#endif // COMPONENTS_VIZ_CLIENT_CLIENT_LAYER_TREE_FRAME_SINK_H_
diff --git a/components/viz/client/hit_test_data_provider_draw_quad_unittest.cc b/components/viz/client/hit_test_data_provider_draw_quad_unittest.cc
index 2e27702b..e67bbd4 100644
--- a/components/viz/client/hit_test_data_provider_draw_quad_unittest.cc
+++ b/components/viz/client/hit_test_data_provider_draw_quad_unittest.cc
@@ -11,14 +11,13 @@
#include "base/run_loop.h"
#include "base/single_thread_task_runner.h"
#include "base/threading/thread.h"
-#include "cc/test/fake_layer_tree_frame_sink_client.h"
#include "components/viz/client/local_surface_id_provider.h"
+#include "components/viz/common/hit_test/hit_test_region_list.h"
#include "components/viz/common/quads/surface_draw_quad.h"
#include "components/viz/test/compositor_frame_helpers.h"
#include "components/viz/test/test_context_provider.h"
#include "components/viz/test/test_gpu_memory_buffer_manager.h"
#include "mojo/public/cpp/bindings/interface_request.h"
-#include "services/viz/public/interfaces/compositing/compositor_frame_sink.mojom.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace viz {
diff --git a/components/viz/common/BUILD.gn b/components/viz/common/BUILD.gn
index 34f30dd..26f76875 100644
--- a/components/viz/common/BUILD.gn
+++ b/components/viz/common/BUILD.gn
@@ -166,7 +166,6 @@
"//gpu/command_buffer/client:raster_interface",
"//gpu/vulkan:buildflags",
"//mojo/public/cpp/bindings",
- "//skia",
"//third_party/libyuv",
"//ui/gfx",
"//ui/gfx:color_space",
@@ -200,6 +199,7 @@
"//gpu/command_buffer/client",
"//gpu/command_buffer/common",
"//mojo/public/cpp/bindings",
+ "//skia",
]
}
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn
index f211920..5aaa29c 100644
--- a/content/browser/BUILD.gn
+++ b/content/browser/BUILD.gn
@@ -39,6 +39,7 @@
"//base/third_party/dynamic_annotations",
"//cc",
"//cc/animation",
+ "//cc/mojo_embedder",
"//cc/paint",
"//components/cbor",
"//components/discardable_memory/common",
diff --git a/content/browser/compositor/viz_process_transport_factory.cc b/content/browser/compositor/viz_process_transport_factory.cc
index 7f02b82..c87467e6 100644
--- a/content/browser/compositor/viz_process_transport_factory.cc
+++ b/content/browser/compositor/viz_process_transport_factory.cc
@@ -10,8 +10,8 @@
#include "base/command_line.h"
#include "base/debug/dump_without_crashing.h"
#include "base/single_thread_task_runner.h"
+#include "cc/mojo_embedder/async_layer_tree_frame_sink.h"
#include "cc/raster/single_thread_task_graph_runner.h"
-#include "components/viz/client/client_layer_tree_frame_sink.h"
#include "components/viz/client/hit_test_data_provider_draw_quad.h"
#include "components/viz/client/local_surface_id_provider.h"
#include "components/viz/common/gpu/context_provider.h"
@@ -513,7 +513,7 @@
std::move(root_params));
// Create LayerTreeFrameSink with the browser end of CompositorFrameSink.
- viz::ClientLayerTreeFrameSink::InitParams params;
+ cc::mojo_embedder::AsyncLayerTreeFrameSink::InitParams params;
params.compositor_task_runner = compositor->task_runner();
params.gpu_memory_buffer_manager = GetGpuMemoryBufferManager();
params.pipes.compositor_frame_sink_associated_info = std::move(sink_info);
@@ -533,7 +533,7 @@
worker_context = worker_context_provider_;
}
compositor->SetLayerTreeFrameSink(
- std::make_unique<viz::ClientLayerTreeFrameSink>(
+ std::make_unique<cc::mojo_embedder::AsyncLayerTreeFrameSink>(
std::move(compositor_context), std::move(worker_context), ¶ms));
#if defined(OS_WIN)
diff --git a/content/browser/renderer_host/compositor_impl_android.cc b/content/browser/renderer_host/compositor_impl_android.cc
index 12b20bd..0e61cc5 100644
--- a/content/browser/renderer_host/compositor_impl_android.cc
+++ b/content/browser/renderer_host/compositor_impl_android.cc
@@ -34,11 +34,11 @@
#include "cc/base/switches.h"
#include "cc/input/input_handler.h"
#include "cc/layers/layer.h"
+#include "cc/mojo_embedder/async_layer_tree_frame_sink.h"
#include "cc/raster/single_thread_task_graph_runner.h"
#include "cc/resources/ui_resource_manager.h"
#include "cc/trees/layer_tree_host.h"
#include "cc/trees/layer_tree_settings.h"
-#include "components/viz/client/client_layer_tree_frame_sink.h"
#include "components/viz/client/frame_eviction_manager.h"
#include "components/viz/client/hit_test_data_provider_draw_quad.h"
#include "components/viz/client/local_surface_id_provider.h"
@@ -1227,7 +1227,7 @@
std::move(root_params));
// Create LayerTreeFrameSink with the browser end of CompositorFrameSink.
- viz::ClientLayerTreeFrameSink::InitParams params;
+ cc::mojo_embedder::AsyncLayerTreeFrameSink::InitParams params;
params.compositor_task_runner = task_runner;
params.gpu_memory_buffer_manager = BrowserMainLoop::GetInstance()
->gpu_channel_establish_factory()
@@ -1240,8 +1240,9 @@
params.hit_test_data_provider =
std::make_unique<viz::HitTestDataProviderDrawQuad>(
/*should_ask_for_child_region=*/false);
- auto layer_tree_frame_sink = std::make_unique<viz::ClientLayerTreeFrameSink>(
- std::move(context_provider), nullptr, ¶ms);
+ auto layer_tree_frame_sink =
+ std::make_unique<cc::mojo_embedder::AsyncLayerTreeFrameSink>(
+ std::move(context_provider), nullptr, ¶ms);
host_->SetLayerTreeFrameSink(std::move(layer_tree_frame_sink));
CompositorDependencies::Get().display_private->SetDisplayVisible(true);
}
diff --git a/content/renderer/BUILD.gn b/content/renderer/BUILD.gn
index 4f9c35e6..6b75c9a 100644
--- a/content/renderer/BUILD.gn
+++ b/content/renderer/BUILD.gn
@@ -671,6 +671,7 @@
"//base:i18n",
"//cc",
"//cc/animation",
+ "//cc/mojo_embedder",
"//cc/paint",
"//components/discardable_memory/client",
"//components/metrics",
diff --git a/content/renderer/mus/BUILD.gn b/content/renderer/mus/BUILD.gn
index 718ad1c..297195a 100644
--- a/content/renderer/mus/BUILD.gn
+++ b/content/renderer/mus/BUILD.gn
@@ -21,6 +21,7 @@
deps = [
"//base",
"//cc",
+ "//cc/mojo_embedder",
"//components/viz/client",
"//content/common",
"//content/public/child:child_sources",
diff --git a/content/renderer/mus/mus_embedded_frame.cc b/content/renderer/mus/mus_embedded_frame.cc
index 25c6d8d..e0fdd26 100644
--- a/content/renderer/mus/mus_embedded_frame.cc
+++ b/content/renderer/mus/mus_embedded_frame.cc
@@ -9,7 +9,7 @@
#include "base/command_line.h"
#include "base/lazy_instance.h"
#include "cc/base/switches.h"
-#include "components/viz/client/client_layer_tree_frame_sink.h"
+#include "cc/mojo_embedder/async_layer_tree_frame_sink.h"
#include "components/viz/client/hit_test_data_provider.h"
#include "components/viz/client/local_surface_id_provider.h"
#include "content/renderer/mus/renderer_window_tree_client.h"
diff --git a/content/renderer/mus/renderer_window_tree_client.cc b/content/renderer/mus/renderer_window_tree_client.cc
index 77db183f..e91f34f 100644
--- a/content/renderer/mus/renderer_window_tree_client.cc
+++ b/content/renderer/mus/renderer_window_tree_client.cc
@@ -9,7 +9,7 @@
#include "base/command_line.h"
#include "base/lazy_instance.h"
#include "cc/base/switches.h"
-#include "components/viz/client/client_layer_tree_frame_sink.h"
+#include "cc/mojo_embedder/async_layer_tree_frame_sink.h"
#include "components/viz/client/hit_test_data_provider.h"
#include "components/viz/client/hit_test_data_provider_draw_quad.h"
#include "components/viz/client/local_surface_id_provider.h"
@@ -133,7 +133,7 @@
viz::mojom::CompositorFrameSinkClientPtr client;
viz::mojom::CompositorFrameSinkClientRequest client_request =
mojo::MakeRequest(&client);
- viz::ClientLayerTreeFrameSink::InitParams params;
+ cc::mojo_embedder::AsyncLayerTreeFrameSink::InitParams params;
params.gpu_memory_buffer_manager = gpu_memory_buffer_manager;
params.pipes.compositor_frame_sink_info = std::move(sink_info);
params.pipes.client_request = std::move(client_request);
@@ -145,9 +145,10 @@
std::make_unique<viz::HitTestDataProviderDrawQuad>(
true /* should_ask_for_child_region */);
}
- auto frame_sink = std::make_unique<viz::ClientLayerTreeFrameSink>(
- std::move(context_provider), nullptr /* worker_context_provider */,
- ¶ms);
+ auto frame_sink =
+ std::make_unique<cc::mojo_embedder::AsyncLayerTreeFrameSink>(
+ std::move(context_provider), nullptr /* worker_context_provider */,
+ ¶ms);
tree_->AttachCompositorFrameSink(root_window_id_, std::move(sink_request),
std::move(client));
callback.Run(std::move(frame_sink));
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index eda23cc..adbef4b 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -42,6 +42,7 @@
#include "build/build_config.h"
#include "cc/base/histograms.h"
#include "cc/base/switches.h"
+#include "cc/mojo_embedder/async_layer_tree_frame_sink.h"
#include "cc/raster/task_graph_runner.h"
#include "cc/trees/layer_tree_frame_sink.h"
#include "cc/trees/layer_tree_host_common.h"
@@ -49,7 +50,6 @@
#include "components/discardable_memory/client/client_discardable_shared_memory_manager.h"
#include "components/metrics/public/interfaces/single_sample_metrics.mojom.h"
#include "components/metrics/single_sample_metrics.h"
-#include "components/viz/client/client_layer_tree_frame_sink.h"
#include "components/viz/client/hit_test_data_provider.h"
#include "components/viz/client/hit_test_data_provider_draw_quad.h"
#include "components/viz/client/local_surface_id_provider.h"
@@ -172,7 +172,6 @@
#include "ui/base/ui_base_switches.h"
#include "ui/display/display_switches.h"
-
#if defined(OS_ANDROID)
#include <cpu-features.h>
#include "content/renderer/android/synchronous_layer_tree_frame_sink.h"
@@ -1994,7 +1993,7 @@
const base::CommandLine& command_line =
*base::CommandLine::ForCurrentProcess();
- viz::ClientLayerTreeFrameSink::InitParams params;
+ cc::mojo_embedder::AsyncLayerTreeFrameSink::InitParams params;
params.compositor_task_runner = compositor_task_runner_;
params.enable_surface_synchronization =
features::IsSurfaceSynchronizationEnabled();
@@ -2055,7 +2054,7 @@
frame_sink_provider_->RegisterRenderFrameMetadataObserver(
routing_id, std::move(render_frame_metadata_observer_client_request),
std::move(render_frame_metadata_observer_ptr));
- callback.Run(std::make_unique<viz::ClientLayerTreeFrameSink>(
+ callback.Run(std::make_unique<cc::mojo_embedder::AsyncLayerTreeFrameSink>(
nullptr, nullptr, ¶ms));
return;
}
@@ -2147,7 +2146,7 @@
routing_id, std::move(render_frame_metadata_observer_client_request),
std::move(render_frame_metadata_observer_ptr));
params.gpu_memory_buffer_manager = GetGpuMemoryBufferManager();
- callback.Run(std::make_unique<viz::ClientLayerTreeFrameSink>(
+ callback.Run(std::make_unique<cc::mojo_embedder::AsyncLayerTreeFrameSink>(
std::move(context_provider), std::move(worker_context_provider),
¶ms));
}
diff --git a/services/viz/BUILD.gn b/services/viz/BUILD.gn
index 9be502a..95a9913 100644
--- a/services/viz/BUILD.gn
+++ b/services/viz/BUILD.gn
@@ -25,7 +25,6 @@
deps = [
"//base",
- "//cc",
"//components/viz/service",
"//components/viz/service/main",
"//mojo/public/cpp/system",
diff --git a/services/viz/public/cpp/compositing/begin_frame_args_for_blink.typemap b/services/viz/public/cpp/compositing/begin_frame_args_for_blink.typemap
index 2f3eb95..57f42ce 100644
--- a/services/viz/public/cpp/compositing/begin_frame_args_for_blink.typemap
+++ b/services/viz/public/cpp/compositing/begin_frame_args_for_blink.typemap
@@ -3,13 +3,12 @@
# found in the LICENSE file.
mojom = "//services/viz/public/interfaces/compositing/begin_frame_args.mojom"
-
+deps = [
+ "//components/viz/common",
+]
public_headers = [ "//components/viz/common/frame_sinks/begin_frame_args.h" ]
traits_headers =
[ "//services/viz/public/cpp/compositing/begin_frame_args_struct_traits.h" ]
-deps = [
- "//cc",
-]
type_mappings = [
"viz.mojom.BeginFrameArgs=viz::BeginFrameArgs",
"viz.mojom.BeginFrameAck=viz::BeginFrameAck",
diff --git a/services/viz/public/cpp/compositing/compositor_frame.typemap b/services/viz/public/cpp/compositing/compositor_frame.typemap
index 1f865796..2da5712 100644
--- a/services/viz/public/cpp/compositing/compositor_frame.typemap
+++ b/services/viz/public/cpp/compositing/compositor_frame.typemap
@@ -3,13 +3,13 @@
# found in the LICENSE file.
mojom = "//services/viz/public/interfaces/compositing/compositor_frame.mojom"
+deps = [
+ "//components/viz/common",
+]
public_headers = [ "//components/viz/common/quads/compositor_frame.h" ]
traits_headers =
[ "//services/viz/public/cpp/compositing/compositor_frame_struct_traits.h" ]
sources = [
"//services/viz/public/cpp/compositing/compositor_frame_struct_traits.cc",
]
-deps = [
- "//cc",
-]
type_mappings = [ "viz.mojom.CompositorFrame=viz::CompositorFrame[move_only]" ]
diff --git a/services/viz/public/cpp/compositing/compositor_frame_for_blink.typemap b/services/viz/public/cpp/compositing/compositor_frame_for_blink.typemap
index aa213ad..0e3e6854 100644
--- a/services/viz/public/cpp/compositing/compositor_frame_for_blink.typemap
+++ b/services/viz/public/cpp/compositing/compositor_frame_for_blink.typemap
@@ -23,7 +23,7 @@
"//ui/latency/mojo/latency_info_struct_traits.h",
]
public_deps = [
- "//cc",
+ "//components/viz/common",
"//gpu/ipc/common:interfaces",
"//services/viz/public/interfaces",
"//skia/public/interfaces",
diff --git a/services/viz/public/cpp/compositing/copy_output_request.typemap b/services/viz/public/cpp/compositing/copy_output_request.typemap
index 972f50a..29c9b96f 100644
--- a/services/viz/public/cpp/compositing/copy_output_request.typemap
+++ b/services/viz/public/cpp/compositing/copy_output_request.typemap
@@ -3,8 +3,13 @@
# found in the LICENSE file.
mojom = "//services/viz/public/interfaces/compositing/copy_output_request.mojom"
+deps = [
+ "//components/viz/common",
+]
public_headers = [ "//components/viz/common/frame_sinks/copy_output_request.h" ]
-traits_headers = [ "//services/viz/public/cpp/compositing/copy_output_request_struct_traits.h" ]
+traits_headers = [
+ "//services/viz/public/cpp/compositing/copy_output_request_struct_traits.h",
+]
sources = [
"//services/viz/public/cpp/compositing/copy_output_request_struct_traits.cc",
]
diff --git a/services/viz/public/cpp/compositing/copy_output_result.typemap b/services/viz/public/cpp/compositing/copy_output_result.typemap
index 60449c8e..7b1188ce 100644
--- a/services/viz/public/cpp/compositing/copy_output_result.typemap
+++ b/services/viz/public/cpp/compositing/copy_output_result.typemap
@@ -7,8 +7,7 @@
traits_headers = [
"//services/viz/public/cpp/compositing/copy_output_result_struct_traits.h",
]
-public_deps = [
- "//cc",
+deps = [
"//components/viz/common",
]
sources = [
diff --git a/services/viz/public/cpp/compositing/filter_operation.typemap b/services/viz/public/cpp/compositing/filter_operation.typemap
index 8dc0a6f9..9e9dd65c 100644
--- a/services/viz/public/cpp/compositing/filter_operation.typemap
+++ b/services/viz/public/cpp/compositing/filter_operation.typemap
@@ -3,6 +3,9 @@
# found in the LICENSE file.
mojom = "//services/viz/public/interfaces/compositing/filter_operation.mojom"
+deps = [
+ "//cc/paint",
+]
public_headers = [ "//cc/paint/filter_operation.h" ]
traits_headers =
[ "//services/viz/public/cpp/compositing/filter_operation_struct_traits.h" ]
diff --git a/services/viz/public/cpp/compositing/filter_operations.typemap b/services/viz/public/cpp/compositing/filter_operations.typemap
index 77b56b1..b85b129 100644
--- a/services/viz/public/cpp/compositing/filter_operations.typemap
+++ b/services/viz/public/cpp/compositing/filter_operations.typemap
@@ -3,6 +3,9 @@
# found in the LICENSE file.
mojom = "//services/viz/public/interfaces/compositing/filter_operations.mojom"
+deps = [
+ "//cc/paint",
+]
public_headers = [ "//cc/paint/filter_operations.h" ]
traits_headers = [
"//services/viz/public/cpp/compositing/filter_operations_struct_traits.h",
diff --git a/services/viz/public/cpp/compositing/resource_settings.typemap b/services/viz/public/cpp/compositing/resource_settings.typemap
index 3969caa0..d15d93e 100644
--- a/services/viz/public/cpp/compositing/resource_settings.typemap
+++ b/services/viz/public/cpp/compositing/resource_settings.typemap
@@ -8,7 +8,7 @@
"//services/viz/public/cpp/compositing/resource_settings_struct_traits.h",
]
deps = [
- "//cc",
+ "//components/viz/common",
"//ui/gfx/mojo",
]
sources = [
diff --git a/services/viz/public/interfaces/compositing/begin_frame_args.mojom b/services/viz/public/interfaces/compositing/begin_frame_args.mojom
index d440f60f..123a24a 100644
--- a/services/viz/public/interfaces/compositing/begin_frame_args.mojom
+++ b/services/viz/public/interfaces/compositing/begin_frame_args.mojom
@@ -13,7 +13,7 @@
BEGIN_FRAME_ARGS_TYPE_MAX
};
-// See cc/output/begin_frame_args.h.
+// See components/viz/common/frame_sinks/begin_frame_args.h.
struct BeginFrameArgs {
mojo_base.mojom.TimeTicks frame_time;
mojo_base.mojom.TimeTicks deadline;
@@ -25,7 +25,7 @@
bool animate_only;
};
-// See cc/output/begin_frame_args.h.
+// See components/viz/common/frame_sinks/begin_frame_args.h.
struct BeginFrameAck {
uint64 source_id;
uint64 sequence_number;
diff --git a/services/viz/public/interfaces/compositing/transferable_resource.mojom b/services/viz/public/interfaces/compositing/transferable_resource.mojom
index 41dfede5..e2aed0f 100644
--- a/services/viz/public/interfaces/compositing/transferable_resource.mojom
+++ b/services/viz/public/interfaces/compositing/transferable_resource.mojom
@@ -24,7 +24,7 @@
R16_EXT,
};
-// See cc/resources/transferable_resource.h.
+// See components/viz/common/resources/transferable_resource.h.
struct TransferableResource {
uint32 id;
ResourceFormat format;
diff --git a/ui/aura/BUILD.gn b/ui/aura/BUILD.gn
index c5eb719e..5c31061d 100644
--- a/ui/aura/BUILD.gn
+++ b/ui/aura/BUILD.gn
@@ -156,6 +156,7 @@
"//base:i18n",
"//base/third_party/dynamic_annotations",
"//cc",
+ "//cc/mojo_embedder",
"//components/discardable_memory/client",
"//components/discardable_memory/public/interfaces",
"//components/viz/client",
@@ -391,6 +392,7 @@
deps = [
":test_support",
"//base/test:test_support",
+ "//cc/mojo_embedder",
"//components/viz/client",
"//mojo/edk",
"//net",
diff --git a/ui/aura/mus/DEPS b/ui/aura/mus/DEPS
index a79ec49..9e4ff45 100644
--- a/ui/aura/mus/DEPS
+++ b/ui/aura/mus/DEPS
@@ -1,5 +1,6 @@
include_rules = [
"+cc/base/switches.h",
+ "+cc/mojo_embedder/async_layer_tree_frame_sink.h",
"+cc/trees/layer_tree_frame_sink_client.h",
"+cc/trees/layer_tree_frame_sink.h",
"+cc/scheduler/begin_frame_source.h",
diff --git a/ui/aura/mus/mus_context_factory.cc b/ui/aura/mus/mus_context_factory.cc
index 73badbb..ab80166 100644
--- a/ui/aura/mus/mus_context_factory.cc
+++ b/ui/aura/mus/mus_context_factory.cc
@@ -6,6 +6,7 @@
#include "base/command_line.h"
#include "cc/base/switches.h"
+#include "cc/mojo_embedder/async_layer_tree_frame_sink.h"
#include "components/viz/common/gpu/context_provider.h"
#include "components/viz/host/renderer_settings_creation.h"
#include "services/ui/public/cpp/gpu/gpu.h"
diff --git a/ui/aura/mus/window_port_mus.cc b/ui/aura/mus/window_port_mus.cc
index e09b18b6..074d5453 100644
--- a/ui/aura/mus/window_port_mus.cc
+++ b/ui/aura/mus/window_port_mus.cc
@@ -4,6 +4,7 @@
#include "ui/aura/mus/window_port_mus.h"
+#include "cc/mojo_embedder/async_layer_tree_frame_sink.h"
#include "components/viz/client/local_surface_id_provider.h"
#include "components/viz/host/host_frame_sink_manager.h"
#include "ui/aura/client/aura_constants.h"
@@ -110,7 +111,7 @@
std::move(callback));
}
-std::unique_ptr<viz::ClientLayerTreeFrameSink>
+std::unique_ptr<cc::mojo_embedder::AsyncLayerTreeFrameSink>
WindowPortMus::RequestLayerTreeFrameSink(
scoped_refptr<viz::ContextProvider> context_provider,
gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager) {
@@ -121,7 +122,7 @@
viz::mojom::CompositorFrameSinkClientRequest client_request =
mojo::MakeRequest(&client);
- viz::ClientLayerTreeFrameSink::InitParams params;
+ cc::mojo_embedder::AsyncLayerTreeFrameSink::InitParams params;
params.gpu_memory_buffer_manager = gpu_memory_buffer_manager;
params.pipes.compositor_frame_sink_info = std::move(sink_info);
params.pipes.client_request = std::move(client_request);
@@ -131,9 +132,10 @@
std::make_unique<viz::DefaultLocalSurfaceIdProvider>();
params.enable_surface_synchronization = true;
- auto layer_tree_frame_sink = std::make_unique<viz::ClientLayerTreeFrameSink>(
- std::move(context_provider), nullptr /* worker_context_provider */,
- ¶ms);
+ auto layer_tree_frame_sink =
+ std::make_unique<cc::mojo_embedder::AsyncLayerTreeFrameSink>(
+ std::move(context_provider), nullptr /* worker_context_provider */,
+ ¶ms);
window_tree_client_->AttachCompositorFrameSink(
server_id(), std::move(sink_request), std::move(client));
return layer_tree_frame_sink;
diff --git a/ui/aura/mus/window_port_mus.h b/ui/aura/mus/window_port_mus.h
index b4ac32f..a23afac 100644
--- a/ui/aura/mus/window_port_mus.h
+++ b/ui/aura/mus/window_port_mus.h
@@ -14,7 +14,7 @@
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/optional.h"
-#include "components/viz/client/client_layer_tree_frame_sink.h"
+#include "components/viz/common/surfaces/parent_local_surface_id_allocator.h"
#include "components/viz/common/surfaces/surface_info.h"
#include "services/ui/public/interfaces/cursor/cursor.mojom.h"
#include "services/ui/public/interfaces/window_tree.mojom.h"
@@ -27,12 +27,14 @@
#include "ui/gfx/geometry/rect.h"
#include "ui/platform_window/mojo/text_input_state.mojom.h"
-namespace gfx {
-class Insets;
+namespace cc {
+namespace mojo_embedder {
+class AsyncLayerTreeFrameSink;
+}
}
-namespace viz {
-class ClientLayerTreeFrameSink;
+namespace gfx {
+class Insets;
}
namespace aura {
@@ -98,7 +100,8 @@
uint32_t flags,
ui::mojom::WindowTree::EmbedCallback callback);
- std::unique_ptr<viz::ClientLayerTreeFrameSink> RequestLayerTreeFrameSink(
+ std::unique_ptr<cc::mojo_embedder::AsyncLayerTreeFrameSink>
+ RequestLayerTreeFrameSink(
scoped_refptr<viz::ContextProvider> context_provider,
gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager);
diff --git a/ui/aura/mus/window_port_mus_unittest.cc b/ui/aura/mus/window_port_mus_unittest.cc
index cec1293c..c6e5312 100644
--- a/ui/aura/mus/window_port_mus_unittest.cc
+++ b/ui/aura/mus/window_port_mus_unittest.cc
@@ -4,7 +4,7 @@
#include "ui/aura/mus/window_port_mus.h"
-#include "components/viz/client/client_layer_tree_frame_sink.h"
+#include "cc/mojo_embedder/async_layer_tree_frame_sink.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/aura/local/layer_tree_frame_sink_local.h"
#include "ui/aura/mus/client_surface_embedder.h"
@@ -49,7 +49,8 @@
auto mus_frame_sink = GetFrameSinkFor(&window);
ASSERT_TRUE(mus_frame_sink);
auto frame_sink_local_surface_id =
- static_cast<viz::ClientLayerTreeFrameSink*>(mus_frame_sink.get())
+ static_cast<cc::mojo_embedder::AsyncLayerTreeFrameSink*>(
+ mus_frame_sink.get())
->local_surface_id();
EXPECT_TRUE(frame_sink_local_surface_id.is_valid());
EXPECT_EQ(frame_sink_local_surface_id, local_surface_id);
diff --git a/ui/compositor/BUILD.gn b/ui/compositor/BUILD.gn
index 264368d..e7675de1 100644
--- a/ui/compositor/BUILD.gn
+++ b/ui/compositor/BUILD.gn
@@ -81,13 +81,14 @@
defines = [ "COMPOSITOR_IMPLEMENTATION" ]
+ public_deps = [
+ "//cc",
+ ]
deps = [
"//base",
"//base/third_party/dynamic_annotations",
- "//cc",
"//cc/animation",
"//cc/paint",
- "//components/viz/common",
"//components/viz/host",
"//components/viz/service",
"//gpu/command_buffer/common",