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

Side by Side Diff: content/renderer/mus/renderer_window_tree_client.cc

Issue 2886873002: Only send the FrameSinkId to client when it is necessary (Closed)
Patch Set: Address review issues. Created 3 years, 7 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 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/command_line.h" 9 #include "base/command_line.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 void RendererWindowTreeClient::Bind( 46 void RendererWindowTreeClient::Bind(
47 ui::mojom::WindowTreeClientRequest request) { 47 ui::mojom::WindowTreeClientRequest request) {
48 binding_.Bind(std::move(request)); 48 binding_.Bind(std::move(request));
49 } 49 }
50 50
51 void RendererWindowTreeClient::RequestCompositorFrameSink( 51 void RendererWindowTreeClient::RequestCompositorFrameSink(
52 scoped_refptr<cc::ContextProvider> context_provider, 52 scoped_refptr<cc::ContextProvider> context_provider,
53 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, 53 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
54 const CompositorFrameSinkCallback& callback) { 54 const CompositorFrameSinkCallback& callback) {
55 DCHECK(pending_compositor_frame_sink_callback_.is_null()); 55 DCHECK(pending_compositor_frame_sink_callback_.is_null());
56 if (frame_sink_id_.is_valid()) { 56 if (tree_) {
57 RequestCompositorFrameSinkInternal(std::move(context_provider), 57 RequestCompositorFrameSinkInternal(std::move(context_provider),
58 gpu_memory_buffer_manager, callback); 58 gpu_memory_buffer_manager, callback);
59 return; 59 return;
60 } 60 }
61 61
62 pending_context_provider_ = std::move(context_provider); 62 pending_context_provider_ = std::move(context_provider);
63 pending_gpu_memory_buffer_manager_ = gpu_memory_buffer_manager; 63 pending_gpu_memory_buffer_manager_ = gpu_memory_buffer_manager;
64 pending_compositor_frame_sink_callback_ = callback; 64 pending_compositor_frame_sink_callback_ = callback;
65 } 65 }
66 66
67 RendererWindowTreeClient::RendererWindowTreeClient(int routing_id) 67 RendererWindowTreeClient::RendererWindowTreeClient(int routing_id)
68 : routing_id_(routing_id), binding_(this) { 68 : routing_id_(routing_id), binding_(this) {
69 } 69 }
70 70
71 RendererWindowTreeClient::~RendererWindowTreeClient() { 71 RendererWindowTreeClient::~RendererWindowTreeClient() {
72 g_connections.Get().erase(routing_id_); 72 g_connections.Get().erase(routing_id_);
73 } 73 }
74 74
75 void RendererWindowTreeClient::RequestCompositorFrameSinkInternal( 75 void RendererWindowTreeClient::RequestCompositorFrameSinkInternal(
76 scoped_refptr<cc::ContextProvider> context_provider, 76 scoped_refptr<cc::ContextProvider> context_provider,
77 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager, 77 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
78 const CompositorFrameSinkCallback& callback) { 78 const CompositorFrameSinkCallback& callback) {
79 std::unique_ptr<ui::ClientCompositorFrameSinkBinding> frame_sink_binding; 79 std::unique_ptr<ui::ClientCompositorFrameSinkBinding> frame_sink_binding;
80 bool enable_surface_synchronization =
81 base::CommandLine::ForCurrentProcess()->HasSwitch(
82 cc::switches::kEnableSurfaceSynchronization);
80 auto frame_sink = ui::ClientCompositorFrameSink::Create( 83 auto frame_sink = ui::ClientCompositorFrameSink::Create(
81 frame_sink_id_, std::move(context_provider), gpu_memory_buffer_manager, 84 std::move(context_provider), gpu_memory_buffer_manager,
82 &frame_sink_binding); 85 &frame_sink_binding, enable_surface_synchronization);
83 tree_->AttachCompositorFrameSink( 86 tree_->AttachCompositorFrameSink(
84 root_window_id_, frame_sink_binding->TakeFrameSinkRequest(), 87 root_window_id_, frame_sink_binding->TakeFrameSinkRequest(),
85 mojo::MakeProxy(frame_sink_binding->TakeFrameSinkClient())); 88 mojo::MakeProxy(frame_sink_binding->TakeFrameSinkClient()));
86 callback.Run(std::move(frame_sink)); 89 callback.Run(std::move(frame_sink));
87 } 90 }
88 91
89 void RendererWindowTreeClient::DestroySelf() { 92 void RendererWindowTreeClient::DestroySelf() {
90 delete this; 93 delete this;
91 } 94 }
92 95
93 void RendererWindowTreeClient::OnEmbed( 96 void RendererWindowTreeClient::OnEmbed(
94 ui::ClientSpecificId client_id, 97 ui::ClientSpecificId client_id,
95 ui::mojom::WindowDataPtr root, 98 ui::mojom::WindowDataPtr root,
96 ui::mojom::WindowTreePtr tree, 99 ui::mojom::WindowTreePtr tree,
97 int64_t display_id, 100 int64_t display_id,
98 ui::Id focused_window_id, 101 ui::Id focused_window_id,
99 bool drawn, 102 bool drawn,
100 const cc::FrameSinkId& frame_sink_id,
101 const base::Optional<cc::LocalSurfaceId>& local_surface_id) { 103 const base::Optional<cc::LocalSurfaceId>& local_surface_id) {
102 frame_sink_id_ = frame_sink_id;
103 root_window_id_ = root->window_id; 104 root_window_id_ = root->window_id;
104 tree_ = std::move(tree); 105 tree_ = std::move(tree);
105 if (!pending_compositor_frame_sink_callback_.is_null()) { 106 if (!pending_compositor_frame_sink_callback_.is_null()) {
106 RequestCompositorFrameSinkInternal(std::move(pending_context_provider_), 107 RequestCompositorFrameSinkInternal(std::move(pending_context_provider_),
107 pending_gpu_memory_buffer_manager_, 108 pending_gpu_memory_buffer_manager_,
108 pending_compositor_frame_sink_callback_); 109 pending_compositor_frame_sink_callback_);
109 pending_context_provider_ = nullptr; 110 pending_context_provider_ = nullptr;
110 pending_gpu_memory_buffer_manager_ = nullptr; 111 pending_gpu_memory_buffer_manager_ = nullptr;
111 pending_compositor_frame_sink_callback_.Reset(); 112 pending_compositor_frame_sink_callback_.Reset();
112 } 113 }
(...skipping 16 matching lines...) Expand all
129 const cc::FrameSinkId& frame_sink_id) { 130 const cc::FrameSinkId& frame_sink_id) {
130 // TODO(fsamuel): OOPIF's |frame_sink_id| is ready. The OOPIF can now be 131 // TODO(fsamuel): OOPIF's |frame_sink_id| is ready. The OOPIF can now be
131 // embedded by the parent. 132 // embedded by the parent.
132 } 133 }
133 134
134 void RendererWindowTreeClient::OnTopLevelCreated( 135 void RendererWindowTreeClient::OnTopLevelCreated(
135 uint32_t change_id, 136 uint32_t change_id,
136 ui::mojom::WindowDataPtr data, 137 ui::mojom::WindowDataPtr data,
137 int64_t display_id, 138 int64_t display_id,
138 bool drawn, 139 bool drawn,
139 const cc::FrameSinkId& frame_sink_id,
140 const base::Optional<cc::LocalSurfaceId>& local_surface_id) { 140 const base::Optional<cc::LocalSurfaceId>& local_surface_id) {
141 NOTREACHED(); 141 NOTREACHED();
142 } 142 }
143 143
144 void RendererWindowTreeClient::OnWindowBoundsChanged( 144 void RendererWindowTreeClient::OnWindowBoundsChanged(
145 ui::Id window_id, 145 ui::Id window_id,
146 const gfx::Rect& old_bounds, 146 const gfx::Rect& old_bounds,
147 const gfx::Rect& new_bounds, 147 const gfx::Rect& new_bounds,
148 const base::Optional<cc::LocalSurfaceId>& local_surface_id) { 148 const base::Optional<cc::LocalSurfaceId>& local_surface_id) {
149 } 149 }
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 bool success) {} 257 bool success) {}
258 258
259 void RendererWindowTreeClient::RequestClose(uint32_t window_id) {} 259 void RendererWindowTreeClient::RequestClose(uint32_t window_id) {}
260 260
261 void RendererWindowTreeClient::GetWindowManager( 261 void RendererWindowTreeClient::GetWindowManager(
262 mojo::AssociatedInterfaceRequest<ui::mojom::WindowManager> internal) { 262 mojo::AssociatedInterfaceRequest<ui::mojom::WindowManager> internal) {
263 NOTREACHED(); 263 NOTREACHED();
264 } 264 }
265 265
266 } // namespace content 266 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/mus/renderer_window_tree_client.h ('k') | services/ui/public/cpp/client_compositor_frame_sink.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698