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

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

Issue 2715663007: Implement temporary reference assignment with DisplayCompositor. (Closed)
Patch Set: Cleanup. 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"
(...skipping 11 matching lines...) Expand all
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); 29 cc::FrameSinkId frame_sink_id(WindowIdToTransportId(window_->id()), 0);
30 30
31 if (!frame_sink_data_) 31 if (!frame_sink_data_)
32 frame_sink_data_ = base::MakeUnique<CompositorFrameSinkData>(); 32 CreateCompositorFrameSinkData();
33 33
34 frame_sink_data_->frame_sink_id = frame_sink_id; 34 frame_sink_data_->frame_sink_id = frame_sink_id;
35 cc::mojom::MojoCompositorFrameSinkPrivateRequest private_request;
36 if (frame_sink_data_->pending_compositor_frame_sink_request.is_pending()) {
37 private_request =
38 std::move(frame_sink_data_->pending_compositor_frame_sink_request);
39 } else {
40 private_request =
41 mojo::MakeRequest(&frame_sink_data_->compositor_frame_sink);
42 }
43 35
44 // TODO(fsamuel): AcceleratedWidget cannot be transported over IPC for Mac 36 // TODO(fsamuel): AcceleratedWidget cannot be transported over IPC for Mac
45 // or Android. We should instead use GpuSurfaceTracker here on those 37 // or Android. We should instead use GpuSurfaceTracker here on those
46 // platforms. 38 // platforms.
47 window_->delegate()->GetDisplayCompositor()->CreateRootCompositorFrameSink( 39 window_->delegate()->GetDisplayCompositor()->CreateRootCompositorFrameSink(
48 frame_sink_id, widget, std::move(sink_request), 40 frame_sink_id, widget, std::move(sink_request),
49 std::move(private_request), std::move(client), 41 std::move(frame_sink_data_->pending_compositor_frame_sink_request),
50 std::move(display_request)); 42 std::move(client), std::move(display_request));
51 43
52 if (window_->parent()) { 44 if (window_->parent()) {
53 ServerWindow* root_window = window_->GetRoot(); 45 ServerWindow* root_window = window_->GetRoot();
54 if (root_window) { 46 if (root_window) {
55 root_window->GetOrCreateCompositorFrameSinkManager()->AddChildFrameSinkId( 47 root_window->GetOrCreateCompositorFrameSinkManager()->AddChildFrameSinkId(
56 frame_sink_id); 48 frame_sink_id);
57 } 49 }
58 } 50 }
59 } 51 }
60 52
61 void ServerWindowCompositorFrameSinkManager::CreateCompositorFrameSink( 53 void ServerWindowCompositorFrameSinkManager::CreateCompositorFrameSink(
62 cc::mojom::MojoCompositorFrameSinkRequest request, 54 cc::mojom::MojoCompositorFrameSinkRequest request,
63 cc::mojom::MojoCompositorFrameSinkClientPtr client) { 55 cc::mojom::MojoCompositorFrameSinkClientPtr client) {
64 cc::FrameSinkId frame_sink_id(WindowIdToTransportId(window_->id()), 0); 56 cc::FrameSinkId frame_sink_id(WindowIdToTransportId(window_->id()), 0);
65 57
66 if (!frame_sink_data_) 58 if (!frame_sink_data_)
67 frame_sink_data_ = base::MakeUnique<CompositorFrameSinkData>(); 59 CreateCompositorFrameSinkData();
68 60
69 frame_sink_data_->frame_sink_id = frame_sink_id; 61 frame_sink_data_->frame_sink_id = frame_sink_id;
70 cc::mojom::MojoCompositorFrameSinkPrivateRequest private_request;
71 if (frame_sink_data_->pending_compositor_frame_sink_request.is_pending()) {
72 private_request =
73 std::move(frame_sink_data_->pending_compositor_frame_sink_request);
74 } else {
75 private_request =
76 mojo::MakeRequest(&frame_sink_data_->compositor_frame_sink);
77 }
78
79 window_->delegate()->GetDisplayCompositor()->CreateCompositorFrameSink( 62 window_->delegate()->GetDisplayCompositor()->CreateCompositorFrameSink(
80 frame_sink_id, std::move(request), std::move(private_request), 63 frame_sink_id, std::move(request),
64 std::move(frame_sink_data_->pending_compositor_frame_sink_request),
81 std::move(client)); 65 std::move(client));
82 66
83 if (window_->parent()) { 67 if (window_->parent()) {
84 ServerWindow* root_window = window_->GetRoot(); 68 ServerWindow* root_window = window_->GetRoot();
85 if (root_window) { 69 if (root_window) {
86 root_window->GetOrCreateCompositorFrameSinkManager()->AddChildFrameSinkId( 70 root_window->GetOrCreateCompositorFrameSinkManager()->AddChildFrameSinkId(
87 frame_sink_id); 71 frame_sink_id);
88 } 72 }
89 } 73 }
90 } 74 }
91 75
92 void ServerWindowCompositorFrameSinkManager::AddChildFrameSinkId( 76 void ServerWindowCompositorFrameSinkManager::AddChildFrameSinkId(
93 const cc::FrameSinkId& frame_sink_id) { 77 const cc::FrameSinkId& frame_sink_id) {
94 if (frame_sink_data_) { 78 if (!frame_sink_data_)
95 frame_sink_data_->compositor_frame_sink->AddChildFrameSink(frame_sink_id); 79 CreateCompositorFrameSinkData();
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); 80 frame_sink_data_->compositor_frame_sink->AddChildFrameSink(frame_sink_id);
102 } 81 }
103 82
104 void ServerWindowCompositorFrameSinkManager::RemoveChildFrameSinkId( 83 void ServerWindowCompositorFrameSinkManager::RemoveChildFrameSinkId(
105 const cc::FrameSinkId& frame_sink_id) { 84 const cc::FrameSinkId& frame_sink_id) {
106 DCHECK(frame_sink_data_); 85 DCHECK(frame_sink_data_);
107 frame_sink_data_->compositor_frame_sink->RemoveChildFrameSink(frame_sink_id); 86 frame_sink_data_->compositor_frame_sink->RemoveChildFrameSink(frame_sink_id);
108 } 87 }
109 88
89 void ServerWindowCompositorFrameSinkManager::ClaimTemporaryReference(
90 const cc::SurfaceId& surface_id) {
91 if (!frame_sink_data_)
92 CreateCompositorFrameSinkData();
93 frame_sink_data_->compositor_frame_sink->ClaimTemporaryReference(surface_id);
94 }
95
110 void ServerWindowCompositorFrameSinkManager::OnRootChanged( 96 void ServerWindowCompositorFrameSinkManager::OnRootChanged(
111 ServerWindow* old_root, 97 ServerWindow* old_root,
112 ServerWindow* new_root) { 98 ServerWindow* new_root) {
113 if (!frame_sink_data_) 99 if (!frame_sink_data_)
114 return; 100 return;
115 101
116 if (old_root) { 102 if (old_root) {
117 old_root->GetOrCreateCompositorFrameSinkManager()->RemoveChildFrameSinkId( 103 old_root->GetOrCreateCompositorFrameSinkManager()->RemoveChildFrameSinkId(
118 frame_sink_data_->frame_sink_id); 104 frame_sink_data_->frame_sink_id);
119 } 105 }
120 if (new_root) { 106 if (new_root) {
121 new_root->GetOrCreateCompositorFrameSinkManager()->AddChildFrameSinkId( 107 new_root->GetOrCreateCompositorFrameSinkManager()->AddChildFrameSinkId(
122 frame_sink_data_->frame_sink_id); 108 frame_sink_data_->frame_sink_id);
123 } 109 }
124 } 110 }
125 111
112 void ServerWindowCompositorFrameSinkManager::CreateCompositorFrameSinkData() {
113 DCHECK(!frame_sink_data_);
114 frame_sink_data_ = base::MakeUnique<CompositorFrameSinkData>();
115 frame_sink_data_->pending_compositor_frame_sink_request =
116 mojo::MakeRequest(&frame_sink_data_->compositor_frame_sink);
117 }
118
126 CompositorFrameSinkData::CompositorFrameSinkData() {} 119 CompositorFrameSinkData::CompositorFrameSinkData() {}
127 120
128 CompositorFrameSinkData::~CompositorFrameSinkData() {} 121 CompositorFrameSinkData::~CompositorFrameSinkData() {}
129 122
130 CompositorFrameSinkData::CompositorFrameSinkData( 123 CompositorFrameSinkData::CompositorFrameSinkData(
131 CompositorFrameSinkData&& other) 124 CompositorFrameSinkData&& other)
132 : compositor_frame_sink(std::move(other.compositor_frame_sink)) {} 125 : compositor_frame_sink(std::move(other.compositor_frame_sink)) {}
133 126
134 CompositorFrameSinkData& CompositorFrameSinkData::operator=( 127 CompositorFrameSinkData& CompositorFrameSinkData::operator=(
135 CompositorFrameSinkData&& other) { 128 CompositorFrameSinkData&& other) {
136 compositor_frame_sink = std::move(other.compositor_frame_sink); 129 compositor_frame_sink = std::move(other.compositor_frame_sink);
137 return *this; 130 return *this;
138 } 131 }
139 132
140 } // namespace ws 133 } // namespace ws
141 } // namespace ui 134 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698