| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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 "content/renderer/mus/renderer_window_tree_client.h" | 5 #include "content/renderer/mus/renderer_window_tree_client.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 | 8 |
| 9 #include "base/lazy_instance.h" | 9 #include "base/lazy_instance.h" |
| 10 #include "services/ui/public/cpp/client_compositor_frame_sink.h" | 10 #include "services/ui/public/cpp/client_compositor_frame_sink.h" |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 g_connections.Get().insert(std::make_pair(routing_id, connection)); | 34 g_connections.Get().insert(std::make_pair(routing_id, connection)); |
| 35 } | 35 } |
| 36 | 36 |
| 37 // static | 37 // static |
| 38 void RendererWindowTreeClient::Destroy(int routing_id) { | 38 void RendererWindowTreeClient::Destroy(int routing_id) { |
| 39 auto* client = Get(routing_id); | 39 auto* client = Get(routing_id); |
| 40 if (client) | 40 if (client) |
| 41 client->DestroySelf(); | 41 client->DestroySelf(); |
| 42 } | 42 } |
| 43 | 43 |
| 44 void RendererWindowTreeClient::Bind( |
| 45 ui::mojom::WindowTreeClientRequest request) { |
| 46 binding_.Bind(std::move(request)); |
| 47 } |
| 48 |
| 49 void RendererWindowTreeClient::RequestCompositorFrameSink( |
| 50 scoped_refptr<cc::ContextProvider> context_provider, |
| 51 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, |
| 52 const CompositorFrameSinkCallback& callback) { |
| 53 DCHECK(pending_compositor_frame_sink_callback_.is_null()); |
| 54 if (frame_sink_id_.is_valid()) { |
| 55 RequestCompositorFrameSinkInternal(std::move(context_provider), |
| 56 gpu_memory_buffer_manager, callback); |
| 57 return; |
| 58 } |
| 59 |
| 60 pending_context_provider_ = std::move(context_provider); |
| 61 pending_gpu_memory_buffer_manager_ = gpu_memory_buffer_manager; |
| 62 pending_compositor_frame_sink_callback_ = callback; |
| 63 } |
| 64 |
| 44 RendererWindowTreeClient::RendererWindowTreeClient(int routing_id) | 65 RendererWindowTreeClient::RendererWindowTreeClient(int routing_id) |
| 45 : routing_id_(routing_id), binding_(this) {} | 66 : routing_id_(routing_id), binding_(this) {} |
| 46 | 67 |
| 47 RendererWindowTreeClient::~RendererWindowTreeClient() { | 68 RendererWindowTreeClient::~RendererWindowTreeClient() { |
| 48 g_connections.Get().erase(routing_id_); | 69 g_connections.Get().erase(routing_id_); |
| 49 } | 70 } |
| 50 | 71 |
| 51 void RendererWindowTreeClient::Bind( | 72 void RendererWindowTreeClient::RequestCompositorFrameSinkInternal( |
| 52 ui::mojom::WindowTreeClientRequest request) { | |
| 53 binding_.Bind(std::move(request)); | |
| 54 } | |
| 55 | |
| 56 std::unique_ptr<cc::CompositorFrameSink> | |
| 57 RendererWindowTreeClient::CreateCompositorFrameSink( | |
| 58 const cc::FrameSinkId& frame_sink_id, | |
| 59 scoped_refptr<cc::ContextProvider> context_provider, | 73 scoped_refptr<cc::ContextProvider> context_provider, |
| 60 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager) { | 74 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, |
| 75 const CompositorFrameSinkCallback& callback) { |
| 61 std::unique_ptr<ui::ClientCompositorFrameSinkBinding> frame_sink_binding; | 76 std::unique_ptr<ui::ClientCompositorFrameSinkBinding> frame_sink_binding; |
| 62 auto frame_sink = ui::ClientCompositorFrameSink::Create( | 77 auto frame_sink = ui::ClientCompositorFrameSink::Create( |
| 63 frame_sink_id, std::move(context_provider), gpu_memory_buffer_manager, | 78 frame_sink_id_, std::move(context_provider), gpu_memory_buffer_manager, |
| 64 &frame_sink_binding); | 79 &frame_sink_binding); |
| 65 if (tree_) { | 80 tree_->AttachCompositorFrameSink( |
| 66 tree_->AttachCompositorFrameSink( | 81 root_window_id_, frame_sink_binding->TakeFrameSinkRequest(), |
| 67 root_window_id_, frame_sink_binding->TakeFrameSinkRequest(), | 82 mojo::MakeProxy(frame_sink_binding->TakeFrameSinkClient())); |
| 68 mojo::MakeProxy(frame_sink_binding->TakeFrameSinkClient())); | 83 callback.Run(std::move(frame_sink)); |
| 69 } else { | |
| 70 pending_frame_sink_ = std::move(frame_sink_binding); | |
| 71 } | |
| 72 return std::move(frame_sink); | |
| 73 } | 84 } |
| 74 | 85 |
| 75 void RendererWindowTreeClient::DestroySelf() { | 86 void RendererWindowTreeClient::DestroySelf() { |
| 76 delete this; | 87 delete this; |
| 77 } | 88 } |
| 78 | 89 |
| 79 void RendererWindowTreeClient::OnEmbed(ui::ClientSpecificId client_id, | 90 void RendererWindowTreeClient::OnEmbed(ui::ClientSpecificId client_id, |
| 80 ui::mojom::WindowDataPtr root, | 91 ui::mojom::WindowDataPtr root, |
| 81 ui::mojom::WindowTreePtr tree, | 92 ui::mojom::WindowTreePtr tree, |
| 82 int64_t display_id, | 93 int64_t display_id, |
| 83 ui::Id focused_window_id, | 94 ui::Id focused_window_id, |
| 84 bool drawn) { | 95 bool drawn, |
| 96 const cc::FrameSinkId& frame_sink_id) { |
| 97 frame_sink_id_ = frame_sink_id; |
| 85 root_window_id_ = root->window_id; | 98 root_window_id_ = root->window_id; |
| 86 tree_ = std::move(tree); | 99 tree_ = std::move(tree); |
| 87 if (pending_frame_sink_) { | 100 if (!pending_compositor_frame_sink_callback_.is_null()) { |
| 88 tree_->AttachCompositorFrameSink( | 101 RequestCompositorFrameSinkInternal(std::move(pending_context_provider_), |
| 89 root_window_id_, pending_frame_sink_->TakeFrameSinkRequest(), | 102 pending_gpu_memory_buffer_manager_, |
| 90 mojo::MakeProxy(pending_frame_sink_->TakeFrameSinkClient())); | 103 pending_compositor_frame_sink_callback_); |
| 91 pending_frame_sink_ = nullptr; | 104 pending_context_provider_ = nullptr; |
| 105 pending_gpu_memory_buffer_manager_ = nullptr; |
| 106 pending_compositor_frame_sink_callback_.Reset(); |
| 92 } | 107 } |
| 93 } | 108 } |
| 94 | 109 |
| 95 void RendererWindowTreeClient::OnEmbeddedAppDisconnected(ui::Id window_id) { | 110 void RendererWindowTreeClient::OnEmbeddedAppDisconnected(ui::Id window_id) { |
| 96 // TODO(sad): Embedded mus-client (oopif) is gone. Figure out what to do. | 111 // TODO(sad): Embedded mus-client (oopif) is gone. Figure out what to do. |
| 97 } | 112 } |
| 98 | 113 |
| 99 void RendererWindowTreeClient::OnUnembed(ui::Id window_id) { | 114 void RendererWindowTreeClient::OnUnembed(ui::Id window_id) { |
| 100 CHECK_EQ(window_id, root_window_id_); | 115 CHECK_EQ(window_id, root_window_id_); |
| 101 DestroySelf(); | 116 DestroySelf(); |
| 102 } | 117 } |
| 103 | 118 |
| 104 void RendererWindowTreeClient::OnCaptureChanged(ui::Id new_capture_window_id, | 119 void RendererWindowTreeClient::OnCaptureChanged(ui::Id new_capture_window_id, |
| 105 ui::Id old_capture_window_id) {} | 120 ui::Id old_capture_window_id) {} |
| 106 | 121 |
| 107 void RendererWindowTreeClient::OnTopLevelCreated(uint32_t change_id, | 122 void RendererWindowTreeClient::OnTopLevelCreated( |
| 108 ui::mojom::WindowDataPtr data, | 123 uint32_t change_id, |
| 109 int64_t display_id, | 124 ui::mojom::WindowDataPtr data, |
| 110 bool drawn) { | 125 int64_t display_id, |
| 126 bool drawn, |
| 127 const cc::FrameSinkId& frame_sink_id) { |
| 111 NOTREACHED(); | 128 NOTREACHED(); |
| 112 } | 129 } |
| 113 | 130 |
| 114 void RendererWindowTreeClient::OnWindowBoundsChanged( | 131 void RendererWindowTreeClient::OnWindowBoundsChanged( |
| 115 ui::Id window_id, | 132 ui::Id window_id, |
| 116 const gfx::Rect& old_bounds, | 133 const gfx::Rect& old_bounds, |
| 117 const gfx::Rect& new_bounds, | 134 const gfx::Rect& new_bounds, |
| 118 const base::Optional<cc::LocalSurfaceId>& local_surface_id) {} | 135 const base::Optional<cc::LocalSurfaceId>& local_surface_id) {} |
| 119 | 136 |
| 120 void RendererWindowTreeClient::OnClientAreaChanged( | 137 void RendererWindowTreeClient::OnClientAreaChanged( |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 bool success) {} | 244 bool success) {} |
| 228 | 245 |
| 229 void RendererWindowTreeClient::RequestClose(uint32_t window_id) {} | 246 void RendererWindowTreeClient::RequestClose(uint32_t window_id) {} |
| 230 | 247 |
| 231 void RendererWindowTreeClient::GetWindowManager( | 248 void RendererWindowTreeClient::GetWindowManager( |
| 232 mojo::AssociatedInterfaceRequest<ui::mojom::WindowManager> internal) { | 249 mojo::AssociatedInterfaceRequest<ui::mojom::WindowManager> internal) { |
| 233 NOTREACHED(); | 250 NOTREACHED(); |
| 234 } | 251 } |
| 235 | 252 |
| 236 } // namespace content | 253 } // namespace content |
| OLD | NEW |