OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "ui/aura/mus/window_port_mus.h" | 5 #include "ui/aura/mus/window_port_mus.h" |
6 | 6 |
7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
8 #include "ui/aura/client/aura_constants.h" | 8 #include "ui/aura/client/aura_constants.h" |
9 #include "ui/aura/client/transient_window_client.h" | 9 #include "ui/aura/client/transient_window_client.h" |
10 #include "ui/aura/mus/client_surface_embedder.h" | 10 #include "ui/aura/mus/client_surface_embedder.h" |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 window_tree_client_->SetCanAcceptDrops(this, can_accept_drops); | 86 window_tree_client_->SetCanAcceptDrops(this, can_accept_drops); |
87 } | 87 } |
88 | 88 |
89 void WindowPortMus::Embed( | 89 void WindowPortMus::Embed( |
90 ui::mojom::WindowTreeClientPtr client, | 90 ui::mojom::WindowTreeClientPtr client, |
91 uint32_t flags, | 91 uint32_t flags, |
92 const ui::mojom::WindowTree::EmbedCallback& callback) { | 92 const ui::mojom::WindowTree::EmbedCallback& callback) { |
93 window_tree_client_->Embed(window_, std::move(client), flags, callback); | 93 window_tree_client_->Embed(window_, std::move(client), flags, callback); |
94 } | 94 } |
95 | 95 |
96 void WindowPortMus::RequestCompositorFrameSink( | 96 std::unique_ptr<cc::CompositorFrameSink> |
| 97 WindowPortMus::RequestCompositorFrameSink( |
97 scoped_refptr<cc::ContextProvider> context_provider, | 98 scoped_refptr<cc::ContextProvider> context_provider, |
98 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, | 99 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager) { |
99 const CompositorFrameSinkCallback& callback) { | |
100 DCHECK(pending_compositor_frame_sink_request_.is_null()); | |
101 // If we haven't received a FrameSinkId from the window server yet then we | |
102 // bind the parameters to a closure that will be called once the FrameSinkId | |
103 // is available. | |
104 if (!frame_sink_id_.is_valid()) { | |
105 pending_compositor_frame_sink_request_ = | |
106 base::Bind(&WindowPortMus::RequestCompositorFrameSinkInternal, | |
107 base::Unretained(this), std::move(context_provider), | |
108 gpu_memory_buffer_manager, callback); | |
109 return; | |
110 } | |
111 | |
112 RequestCompositorFrameSinkInternal(std::move(context_provider), | |
113 gpu_memory_buffer_manager, callback); | |
114 } | |
115 | |
116 void WindowPortMus::RequestCompositorFrameSinkInternal( | |
117 scoped_refptr<cc::ContextProvider> context_provider, | |
118 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, | |
119 const CompositorFrameSinkCallback& callback) { | |
120 DCHECK(frame_sink_id_.is_valid()); | |
121 std::unique_ptr<ui::ClientCompositorFrameSinkBinding> | 100 std::unique_ptr<ui::ClientCompositorFrameSinkBinding> |
122 compositor_frame_sink_binding; | 101 compositor_frame_sink_binding; |
123 std::unique_ptr<ui::ClientCompositorFrameSink> compositor_frame_sink = | 102 std::unique_ptr<ui::ClientCompositorFrameSink> compositor_frame_sink = |
124 ui::ClientCompositorFrameSink::Create( | 103 ui::ClientCompositorFrameSink::Create( |
125 frame_sink_id_, std::move(context_provider), | 104 std::move(context_provider), gpu_memory_buffer_manager, |
126 gpu_memory_buffer_manager, &compositor_frame_sink_binding); | 105 &compositor_frame_sink_binding, |
| 106 window_tree_client_->enable_surface_synchronization_); |
127 AttachCompositorFrameSink(std::move(compositor_frame_sink_binding)); | 107 AttachCompositorFrameSink(std::move(compositor_frame_sink_binding)); |
128 callback.Run(std::move(compositor_frame_sink)); | 108 return std::move(compositor_frame_sink); |
129 } | 109 } |
130 | 110 |
131 void WindowPortMus::AttachCompositorFrameSink( | 111 void WindowPortMus::AttachCompositorFrameSink( |
132 std::unique_ptr<ui::ClientCompositorFrameSinkBinding> | 112 std::unique_ptr<ui::ClientCompositorFrameSinkBinding> |
133 compositor_frame_sink_binding) { | 113 compositor_frame_sink_binding) { |
134 window_tree_client_->AttachCompositorFrameSink( | 114 window_tree_client_->AttachCompositorFrameSink( |
135 server_id(), compositor_frame_sink_binding->TakeFrameSinkRequest(), | 115 server_id(), compositor_frame_sink_binding->TakeFrameSinkRequest(), |
136 mojo::MakeProxy(compositor_frame_sink_binding->TakeFrameSinkClient())); | 116 mojo::MakeProxy(compositor_frame_sink_binding->TakeFrameSinkClient())); |
137 } | 117 } |
138 | 118 |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 const std::vector<uint8_t>* property_data) { | 261 const std::vector<uint8_t>* property_data) { |
282 ServerChangeData data; | 262 ServerChangeData data; |
283 data.property_name = property_name; | 263 data.property_name = property_name; |
284 ScopedServerChange change(this, ServerChangeType::PROPERTY, data); | 264 ScopedServerChange change(this, ServerChangeType::PROPERTY, data); |
285 GetPropertyConverter()->SetPropertyFromTransportValue(window_, property_name, | 265 GetPropertyConverter()->SetPropertyFromTransportValue(window_, property_name, |
286 property_data); | 266 property_data); |
287 } | 267 } |
288 | 268 |
289 void WindowPortMus::SetFrameSinkIdFromServer( | 269 void WindowPortMus::SetFrameSinkIdFromServer( |
290 const cc::FrameSinkId& frame_sink_id) { | 270 const cc::FrameSinkId& frame_sink_id) { |
| 271 DCHECK(window_mus_type() == WindowMusType::TOP_LEVEL_IN_WM || |
| 272 window_mus_type() == WindowMusType::EMBED_IN_OWNER); |
291 frame_sink_id_ = frame_sink_id; | 273 frame_sink_id_ = frame_sink_id; |
292 if (!pending_compositor_frame_sink_request_.is_null()) { | |
293 // TOP_LEVEL_IN_WM, and EMBED_IN_OWNER windows should not be requesting | |
294 // CompositorFrameSinks. | |
295 DCHECK_NE(WindowMusType::TOP_LEVEL_IN_WM, window_mus_type()); | |
296 DCHECK_NE(WindowMusType::EMBED_IN_OWNER, window_mus_type()); | |
297 base::ResetAndReturn(&pending_compositor_frame_sink_request_).Run(); | |
298 return; | |
299 } | |
300 UpdatePrimarySurfaceInfo(); | 274 UpdatePrimarySurfaceInfo(); |
301 } | 275 } |
302 | 276 |
303 const cc::LocalSurfaceId& WindowPortMus::GetOrAllocateLocalSurfaceId( | 277 const cc::LocalSurfaceId& WindowPortMus::GetOrAllocateLocalSurfaceId( |
304 const gfx::Size& surface_size) { | 278 const gfx::Size& surface_size) { |
305 if (last_surface_size_ == surface_size && local_surface_id_.is_valid()) | 279 if (last_surface_size_ == surface_size && local_surface_id_.is_valid()) |
306 return local_surface_id_; | 280 return local_surface_id_; |
307 | 281 |
308 local_surface_id_ = local_surface_id_allocator_.GenerateId(); | 282 local_surface_id_ = local_surface_id_allocator_.GenerateId(); |
309 last_surface_size_ = surface_size; | 283 last_surface_size_ = surface_size; |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
554 if (!client_surface_embedder_) { | 528 if (!client_surface_embedder_) { |
555 client_surface_embedder_ = base::MakeUnique<ClientSurfaceEmbedder>( | 529 client_surface_embedder_ = base::MakeUnique<ClientSurfaceEmbedder>( |
556 window_, window_tree_client_->normal_client_area_insets_); | 530 window_, window_tree_client_->normal_client_area_insets_); |
557 } | 531 } |
558 | 532 |
559 client_surface_embedder_->SetPrimarySurfaceInfo(primary_surface_info_); | 533 client_surface_embedder_->SetPrimarySurfaceInfo(primary_surface_info_); |
560 client_surface_embedder_->SetFallbackSurfaceInfo(fallback_surface_info_); | 534 client_surface_embedder_->SetFallbackSurfaceInfo(fallback_surface_info_); |
561 } | 535 } |
562 | 536 |
563 } // namespace aura | 537 } // namespace aura |
OLD | NEW |