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

Unified Diff: services/ui/ws/server_window_compositor_frame_sink_manager.cc

Issue 2576723002: Split cc::mojom::DisplayCompositor::CreateCompositorFrameSink() into CreateDisplayCompositorFrameSi… (Closed)
Patch Set: In DisplayCompositor::CreateDisplayCompositorFrameSink, let a local variable hold the result of Cre… Created 4 years 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 | « services/ui/ws/server_window_compositor_frame_sink_manager.h ('k') | services/ui/ws/window_tree.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/ui/ws/server_window_compositor_frame_sink_manager.cc
diff --git a/services/ui/ws/server_window_compositor_frame_sink_manager.cc b/services/ui/ws/server_window_compositor_frame_sink_manager.cc
index 2b9b57223cd71efff366c0dd628cf7df333ceaeb..b89eb1940b467eac29ab2a550d701a795aa3b60c 100644
--- a/services/ui/ws/server_window_compositor_frame_sink_manager.cc
+++ b/services/ui/ws/server_window_compositor_frame_sink_manager.cc
@@ -35,36 +35,22 @@ bool ServerWindowCompositorFrameSinkManager::ShouldDraw() {
return !waiting_for_initial_frames_;
}
-void ServerWindowCompositorFrameSinkManager::CreateCompositorFrameSink(
- mojom::CompositorFrameSinkType compositor_frame_sink_type,
+void ServerWindowCompositorFrameSinkManager::CreateDisplayCompositorFrameSink(
gfx::AcceleratedWidget widget,
cc::mojom::MojoCompositorFrameSinkRequest request,
cc::mojom::MojoCompositorFrameSinkClientPtr client) {
- cc::FrameSinkId frame_sink_id(
- WindowIdToTransportId(window_->id()),
- static_cast<uint32_t>(compositor_frame_sink_type));
- CompositorFrameSinkData& data =
- type_to_compositor_frame_sink_map_[compositor_frame_sink_type];
- cc::mojom::MojoCompositorFrameSinkPrivateRequest private_request;
- if (data.pending_compositor_frame_sink_request.is_pending()) {
- private_request = std::move(data.pending_compositor_frame_sink_request);
- } else {
- private_request = mojo::GetProxy(&data.compositor_frame_sink);
- }
-
- // TODO(fsamuel): AcceleratedWidget cannot be transported over IPC for Mac or
- // Android. We should instead use GpuSurfaceTracker here on those platforms.
- window_->delegate()->GetDisplayCompositor()->CreateCompositorFrameSink(
- frame_sink_id, widget, std::move(request), std::move(private_request),
- std::move(client));
+ CreateCompositorFrameSinkInternal(mojom::CompositorFrameSinkType::DEFAULT,
+ widget, std::move(request),
+ std::move(client));
+}
- if (window_->parent()) {
- window_->delegate()
- ->GetRootWindow(window_)
- ->GetOrCreateCompositorFrameSinkManager()
- ->AddChildFrameSinkId(mojom::CompositorFrameSinkType::DEFAULT,
- frame_sink_id);
- }
+void ServerWindowCompositorFrameSinkManager::CreateOffscreenCompositorFrameSink(
+ mojom::CompositorFrameSinkType compositor_frame_sink_type,
+ cc::mojom::MojoCompositorFrameSinkRequest request,
+ cc::mojom::MojoCompositorFrameSinkClientPtr client) {
+ CreateCompositorFrameSinkInternal(compositor_frame_sink_type,
+ gfx::kNullAcceleratedWidget,
+ std::move(request), std::move(client));
}
void ServerWindowCompositorFrameSinkManager::AddChildFrameSinkId(
@@ -142,6 +128,49 @@ bool ServerWindowCompositorFrameSinkManager::
latest_submitted_frame_size.height() >= window_->bounds().height();
}
+void ServerWindowCompositorFrameSinkManager::CreateCompositorFrameSinkInternal(
+ mojom::CompositorFrameSinkType compositor_frame_sink_type,
+ gfx::AcceleratedWidget widget,
+ cc::mojom::MojoCompositorFrameSinkRequest request,
+ cc::mojom::MojoCompositorFrameSinkClientPtr client) {
+ cc::FrameSinkId frame_sink_id(
+ WindowIdToTransportId(window_->id()),
+ static_cast<uint32_t>(compositor_frame_sink_type));
+ CompositorFrameSinkData& data =
+ type_to_compositor_frame_sink_map_[compositor_frame_sink_type];
+ cc::mojom::MojoCompositorFrameSinkPrivateRequest private_request;
+ if (data.pending_compositor_frame_sink_request.is_pending()) {
+ private_request = std::move(data.pending_compositor_frame_sink_request);
+ } else {
+ private_request = mojo::GetProxy(&data.compositor_frame_sink);
+ }
+
+ if (widget != gfx::kNullAcceleratedWidget) {
+ // TODO(fsamuel): AcceleratedWidget cannot be transported over IPC for Mac
+ // or Android. We should instead use GpuSurfaceTracker here on those
+ // platforms.
+ window_->delegate()
+ ->GetDisplayCompositor()
+ ->CreateDisplayCompositorFrameSink(
+ frame_sink_id, widget, std::move(request),
+ std::move(private_request), std::move(client));
+ } else {
+ window_->delegate()
+ ->GetDisplayCompositor()
+ ->CreateOffscreenCompositorFrameSink(frame_sink_id, std::move(request),
+ std::move(private_request),
+ std::move(client));
+ }
+
+ if (window_->parent()) {
+ window_->delegate()
+ ->GetRootWindow(window_)
+ ->GetOrCreateCompositorFrameSinkManager()
+ ->AddChildFrameSinkId(mojom::CompositorFrameSinkType::DEFAULT,
+ frame_sink_id);
+ }
+}
+
CompositorFrameSinkData::CompositorFrameSinkData() {}
CompositorFrameSinkData::~CompositorFrameSinkData() {}
« no previous file with comments | « services/ui/ws/server_window_compositor_frame_sink_manager.h ('k') | services/ui/ws/window_tree.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698