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

Side by Side Diff: services/ui/gpu/gpu_main.cc

Issue 2942283002: viz: Use a simple GpuMemoryBufferManager implementation. (Closed)
Patch Set: . Created 3 years, 6 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 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 "services/ui/gpu/gpu_main.h" 5 #include "services/ui/gpu/gpu_main.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/power_monitor/power_monitor_device_source.h" 10 #include "base/power_monitor/power_monitor_device_source.h"
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 void GpuMain::CreateFrameSinkManagerInternal( 167 void GpuMain::CreateFrameSinkManagerInternal(
168 cc::mojom::FrameSinkManagerRequest request, 168 cc::mojom::FrameSinkManagerRequest request,
169 cc::mojom::FrameSinkManagerClientPtrInfo client_info) { 169 cc::mojom::FrameSinkManagerClientPtrInfo client_info) {
170 DCHECK(!gpu_command_service_); 170 DCHECK(!gpu_command_service_);
171 DCHECK(gpu_service_); 171 DCHECK(gpu_service_);
172 DCHECK(gpu_thread_task_runner_->BelongsToCurrentThread()); 172 DCHECK(gpu_thread_task_runner_->BelongsToCurrentThread());
173 gpu_command_service_ = new gpu::GpuInProcessThreadService( 173 gpu_command_service_ = new gpu::GpuInProcessThreadService(
174 gpu_thread_task_runner_, gpu_service_->sync_point_manager(), 174 gpu_thread_task_runner_, gpu_service_->sync_point_manager(),
175 gpu_service_->mailbox_manager(), gpu_service_->share_group()); 175 gpu_service_->mailbox_manager(), gpu_service_->share_group());
176 176
177 gpu::ImageFactory* image_factory = gpu_service_->gpu_image_factory();
178
179 // If the FrameSinkManager creation was delayed because GpuService had not
180 // been created yet, then this is called, in gpu thread, right after
181 // GpuService is created.
182 mojom::GpuServicePtr gpu_service;
183 BindGpuInternalOnGpuThread(mojo::MakeRequest(&gpu_service));
184 compositor_thread_task_runner_->PostTask( 177 compositor_thread_task_runner_->PostTask(
185 FROM_HERE, base::Bind(&GpuMain::CreateFrameSinkManagerOnCompositorThread, 178 FROM_HERE,
186 base::Unretained(this), image_factory, 179 base::Bind(&GpuMain::CreateFrameSinkManagerOnCompositorThread,
187 base::Passed(gpu_service.PassInterface()), 180 base::Unretained(this), base::Passed(std::move(request)),
188 base::Passed(std::move(request)), 181 base::Passed(std::move(client_info))));
189 base::Passed(std::move(client_info))));
190 } 182 }
191 183
192 void GpuMain::CreateFrameSinkManagerOnCompositorThread( 184 void GpuMain::CreateFrameSinkManagerOnCompositorThread(
193 gpu::ImageFactory* image_factory,
194 mojom::GpuServicePtrInfo gpu_service_info,
195 cc::mojom::FrameSinkManagerRequest request, 185 cc::mojom::FrameSinkManagerRequest request,
196 cc::mojom::FrameSinkManagerClientPtrInfo client_info) { 186 cc::mojom::FrameSinkManagerClientPtrInfo client_info) {
197 DCHECK(!frame_sink_manager_); 187 DCHECK(!frame_sink_manager_);
198 cc::mojom::FrameSinkManagerClientPtr client; 188 cc::mojom::FrameSinkManagerClientPtr client;
199 client.Bind(std::move(client_info)); 189 client.Bind(std::move(client_info));
200 190
201 gpu_internal_.Bind(std::move(gpu_service_info));
202
203 display_provider_ = base::MakeUnique<viz::GpuDisplayProvider>( 191 display_provider_ = base::MakeUnique<viz::GpuDisplayProvider>(
204 gpu_command_service_, 192 gpu_command_service_, gpu_service_->gpu_channel_manager());
205 base::MakeUnique<viz::ServerGpuMemoryBufferManager>(gpu_internal_.get(),
206 1 /* client_id */),
207 image_factory);
208 193
209 frame_sink_manager_ = base::MakeUnique<viz::MojoFrameSinkManager>( 194 frame_sink_manager_ = base::MakeUnique<viz::MojoFrameSinkManager>(
210 true, display_provider_.get()); 195 true, display_provider_.get());
211 frame_sink_manager_->BindPtrAndSetClient(std::move(request), 196 frame_sink_manager_->BindPtrAndSetClient(std::move(request),
212 std::move(client)); 197 std::move(client));
213 } 198 }
214 199
215 void GpuMain::TearDownOnCompositorThread() { 200 void GpuMain::TearDownOnCompositorThread() {
216 frame_sink_manager_.reset(); 201 frame_sink_manager_.reset();
217 display_provider_.reset(); 202 display_provider_.reset();
218 gpu_internal_.reset();
219 } 203 }
220 204
221 void GpuMain::TearDownOnGpuThread() { 205 void GpuMain::TearDownOnGpuThread() {
222 binding_.Close(); 206 binding_.Close();
223 gpu_service_.reset(); 207 gpu_service_.reset();
224 gpu_memory_buffer_factory_.reset(); 208 gpu_memory_buffer_factory_.reset();
225 gpu_init_.reset(); 209 gpu_init_.reset();
226 } 210 }
227 211
228 void GpuMain::CreateGpuServiceOnGpuThread( 212 void GpuMain::CreateGpuServiceOnGpuThread(
229 mojom::GpuServiceRequest request, 213 mojom::GpuServiceRequest request,
230 mojom::GpuHostPtr gpu_host, 214 mojom::GpuHostPtr gpu_host,
231 const gpu::GpuPreferences& preferences, 215 const gpu::GpuPreferences& preferences,
232 gpu::GpuProcessActivityFlags activity_flags) { 216 gpu::GpuProcessActivityFlags activity_flags) {
233 gpu_service_->UpdateGPUInfoFromPreferences(preferences); 217 gpu_service_->UpdateGPUInfoFromPreferences(preferences);
234 gpu_service_->InitializeWithHost(std::move(gpu_host), 218 gpu_service_->InitializeWithHost(std::move(gpu_host),
235 std::move(activity_flags)); 219 std::move(activity_flags));
236 gpu_service_->Bind(std::move(request)); 220 gpu_service_->Bind(std::move(request));
237 221
238 if (pending_frame_sink_manager_request_.is_pending()) { 222 if (pending_frame_sink_manager_request_.is_pending()) {
239 CreateFrameSinkManagerInternal( 223 CreateFrameSinkManagerInternal(
240 std::move(pending_frame_sink_manager_request_), 224 std::move(pending_frame_sink_manager_request_),
241 std::move(pending_frame_sink_manager_client_info_)); 225 std::move(pending_frame_sink_manager_client_info_));
242 } 226 }
243 } 227 }
244 228
245 void GpuMain::BindGpuInternalOnGpuThread(mojom::GpuServiceRequest request) {
246 gpu_service_->Bind(std::move(request));
247 }
248
249 void GpuMain::PreSandboxStartup() { 229 void GpuMain::PreSandboxStartup() {
250 // TODO(sad): https://crbug.com/645602 230 // TODO(sad): https://crbug.com/645602
251 } 231 }
252 232
253 bool GpuMain::EnsureSandboxInitialized( 233 bool GpuMain::EnsureSandboxInitialized(
254 gpu::GpuWatchdogThread* watchdog_thread) { 234 gpu::GpuWatchdogThread* watchdog_thread) {
255 // TODO(sad): https://crbug.com/645602 235 // TODO(sad): https://crbug.com/645602
256 return true; 236 return true;
257 } 237 }
258 238
259 } // namespace ui 239 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698