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

Side by Side Diff: services/ui/ws/server_window_compositor_frame_sink_manager.cc

Issue 2711913006: Move FrameSink hierarchy registration to DisplayCompositor interface (Closed)
Patch Set: Fix mojom Formatting Created 3 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "services/ui/ws/server_window_compositor_frame_sink_manager.h" 5 #include "services/ui/ws/server_window_compositor_frame_sink_manager.h"
6 6
7 #include "cc/ipc/display_compositor.mojom.h" 7 #include "cc/ipc/display_compositor.mojom.h"
8 #include "mojo/public/cpp/bindings/strong_binding.h" 8 #include "mojo/public/cpp/bindings/strong_binding.h"
9 #include "services/ui/ws/ids.h" 9 #include "services/ui/ws/ids.h"
10 #include "services/ui/ws/server_window.h" 10 #include "services/ui/ws/server_window.h"
11 #include "services/ui/ws/server_window_delegate.h" 11 #include "services/ui/ws/server_window_delegate.h"
12 12
13 namespace ui { 13 namespace ui {
14 namespace ws { 14 namespace ws {
15 15
16 ServerWindowCompositorFrameSinkManager::ServerWindowCompositorFrameSinkManager( 16 ServerWindowCompositorFrameSinkManager::ServerWindowCompositorFrameSinkManager(
17 ServerWindow* window) 17 ServerWindow* window)
18 : window_(window) {} 18 : window_(window) {}
19 19
20 ServerWindowCompositorFrameSinkManager:: 20 ServerWindowCompositorFrameSinkManager::
21 ~ServerWindowCompositorFrameSinkManager() { 21 ~ServerWindowCompositorFrameSinkManager() {
22 } 22 }
23 23
24 void ServerWindowCompositorFrameSinkManager::CreateRootCompositorFrameSink( 24 void ServerWindowCompositorFrameSinkManager::CreateRootCompositorFrameSink(
25 gfx::AcceleratedWidget widget, 25 gfx::AcceleratedWidget widget,
26 cc::mojom::MojoCompositorFrameSinkAssociatedRequest sink_request, 26 cc::mojom::MojoCompositorFrameSinkAssociatedRequest sink_request,
27 cc::mojom::MojoCompositorFrameSinkClientPtr client, 27 cc::mojom::MojoCompositorFrameSinkClientPtr client,
28 cc::mojom::DisplayPrivateAssociatedRequest display_request) { 28 cc::mojom::DisplayPrivateAssociatedRequest display_request) {
29 cc::FrameSinkId frame_sink_id(WindowIdToTransportId(window_->id()), 0);
30
31 if (!frame_sink_data_) 29 if (!frame_sink_data_)
32 frame_sink_data_ = base::MakeUnique<CompositorFrameSinkData>(); 30 frame_sink_data_ = base::MakeUnique<CompositorFrameSinkData>();
33 31
34 frame_sink_data_->frame_sink_id = frame_sink_id;
35 cc::mojom::MojoCompositorFrameSinkPrivateRequest private_request; 32 cc::mojom::MojoCompositorFrameSinkPrivateRequest private_request;
36 if (frame_sink_data_->pending_compositor_frame_sink_request.is_pending()) { 33 if (frame_sink_data_->pending_compositor_frame_sink_request.is_pending()) {
37 private_request = 34 private_request =
38 std::move(frame_sink_data_->pending_compositor_frame_sink_request); 35 std::move(frame_sink_data_->pending_compositor_frame_sink_request);
39 } else { 36 } else {
40 private_request = 37 private_request =
41 mojo::MakeRequest(&frame_sink_data_->compositor_frame_sink); 38 mojo::MakeRequest(&frame_sink_data_->compositor_frame_sink);
42 } 39 }
43 40
44 // TODO(fsamuel): AcceleratedWidget cannot be transported over IPC for Mac 41 // TODO(fsamuel): AcceleratedWidget cannot be transported over IPC for Mac
45 // or Android. We should instead use GpuSurfaceTracker here on those 42 // or Android. We should instead use GpuSurfaceTracker here on those
46 // platforms. 43 // platforms.
47 window_->delegate()->GetDisplayCompositor()->CreateRootCompositorFrameSink( 44 window_->delegate()->GetDisplayCompositor()->CreateRootCompositorFrameSink(
48 frame_sink_id, widget, std::move(sink_request), 45 window_->frame_sink_id(), widget, std::move(sink_request),
49 std::move(private_request), std::move(client), 46 std::move(private_request), std::move(client),
50 std::move(display_request)); 47 std::move(display_request));
51
52 if (window_->parent()) {
53 ServerWindow* root_window = window_->GetRoot();
54 if (root_window) {
55 root_window->GetOrCreateCompositorFrameSinkManager()->AddChildFrameSinkId(
56 frame_sink_id);
57 }
58 }
59 } 48 }
60 49
61 void ServerWindowCompositorFrameSinkManager::CreateCompositorFrameSink( 50 void ServerWindowCompositorFrameSinkManager::CreateCompositorFrameSink(
62 cc::mojom::MojoCompositorFrameSinkRequest request, 51 cc::mojom::MojoCompositorFrameSinkRequest request,
63 cc::mojom::MojoCompositorFrameSinkClientPtr client) { 52 cc::mojom::MojoCompositorFrameSinkClientPtr client) {
64 cc::FrameSinkId frame_sink_id(WindowIdToTransportId(window_->id()), 0);
65
66 if (!frame_sink_data_) 53 if (!frame_sink_data_)
67 frame_sink_data_ = base::MakeUnique<CompositorFrameSinkData>(); 54 frame_sink_data_ = base::MakeUnique<CompositorFrameSinkData>();
68 55
69 frame_sink_data_->frame_sink_id = frame_sink_id;
70 cc::mojom::MojoCompositorFrameSinkPrivateRequest private_request; 56 cc::mojom::MojoCompositorFrameSinkPrivateRequest private_request;
71 if (frame_sink_data_->pending_compositor_frame_sink_request.is_pending()) { 57 if (frame_sink_data_->pending_compositor_frame_sink_request.is_pending()) {
72 private_request = 58 private_request =
73 std::move(frame_sink_data_->pending_compositor_frame_sink_request); 59 std::move(frame_sink_data_->pending_compositor_frame_sink_request);
74 } else { 60 } else {
75 private_request = 61 private_request =
76 mojo::MakeRequest(&frame_sink_data_->compositor_frame_sink); 62 mojo::MakeRequest(&frame_sink_data_->compositor_frame_sink);
77 } 63 }
78 64
79 window_->delegate()->GetDisplayCompositor()->CreateCompositorFrameSink( 65 window_->delegate()->GetDisplayCompositor()->CreateCompositorFrameSink(
80 frame_sink_id, std::move(request), std::move(private_request), 66 window_->frame_sink_id(), std::move(request), std::move(private_request),
81 std::move(client)); 67 std::move(client));
82
83 if (window_->parent()) {
84 ServerWindow* root_window = window_->GetRoot();
85 if (root_window) {
86 root_window->GetOrCreateCompositorFrameSinkManager()->AddChildFrameSinkId(
87 frame_sink_id);
88 }
89 }
90 }
91
92 void ServerWindowCompositorFrameSinkManager::AddChildFrameSinkId(
93 const cc::FrameSinkId& frame_sink_id) {
94 if (frame_sink_data_) {
95 frame_sink_data_->compositor_frame_sink->AddChildFrameSink(frame_sink_id);
96 return;
97 }
98 frame_sink_data_ = base::MakeUnique<CompositorFrameSinkData>();
99 frame_sink_data_->pending_compositor_frame_sink_request =
100 mojo::MakeRequest(&frame_sink_data_->compositor_frame_sink);
101 frame_sink_data_->compositor_frame_sink->AddChildFrameSink(frame_sink_id);
102 }
103
104 void ServerWindowCompositorFrameSinkManager::RemoveChildFrameSinkId(
105 const cc::FrameSinkId& frame_sink_id) {
106 DCHECK(frame_sink_data_);
107 frame_sink_data_->compositor_frame_sink->RemoveChildFrameSink(frame_sink_id);
108 }
109
110 void ServerWindowCompositorFrameSinkManager::OnRootChanged(
111 ServerWindow* old_root,
112 ServerWindow* new_root) {
113 if (!frame_sink_data_)
114 return;
115
116 if (old_root) {
117 old_root->GetOrCreateCompositorFrameSinkManager()->RemoveChildFrameSinkId(
118 frame_sink_data_->frame_sink_id);
119 }
120 if (new_root) {
121 new_root->GetOrCreateCompositorFrameSinkManager()->AddChildFrameSinkId(
122 frame_sink_data_->frame_sink_id);
123 }
124 } 68 }
125 69
126 CompositorFrameSinkData::CompositorFrameSinkData() {} 70 CompositorFrameSinkData::CompositorFrameSinkData() {}
127 71
128 CompositorFrameSinkData::~CompositorFrameSinkData() {} 72 CompositorFrameSinkData::~CompositorFrameSinkData() {}
129 73
130 CompositorFrameSinkData::CompositorFrameSinkData( 74 CompositorFrameSinkData::CompositorFrameSinkData(
131 CompositorFrameSinkData&& other) 75 CompositorFrameSinkData&& other)
132 : compositor_frame_sink(std::move(other.compositor_frame_sink)) {} 76 : compositor_frame_sink(std::move(other.compositor_frame_sink)) {}
133 77
134 CompositorFrameSinkData& CompositorFrameSinkData::operator=( 78 CompositorFrameSinkData& CompositorFrameSinkData::operator=(
135 CompositorFrameSinkData&& other) { 79 CompositorFrameSinkData&& other) {
136 compositor_frame_sink = std::move(other.compositor_frame_sink); 80 compositor_frame_sink = std::move(other.compositor_frame_sink);
137 return *this; 81 return *this;
138 } 82 }
139 83
140 } // namespace ws 84 } // namespace ws
141 } // namespace ui 85 } // namespace ui
OLDNEW
« no previous file with comments | « services/ui/ws/server_window_compositor_frame_sink_manager.h ('k') | services/ui/ws/window_server.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698