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

Side by Side Diff: content/gpu/gpu_child_thread.cc

Issue 2753293003: gpu: Replace GpuMsg_CollectGraphicsInfo with mojom API. (Closed)
Patch Set: tot merge 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/gpu/gpu_child_thread.h" 5 #include "content/gpu/gpu_child_thread.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 // The GPU process must never send a synchronous IPC message to the browser 240 // The GPU process must never send a synchronous IPC message to the browser
241 // process. This could result in deadlock. 241 // process. This could result in deadlock.
242 DCHECK(!msg->is_sync()); 242 DCHECK(!msg->is_sync());
243 243
244 return ChildThreadImpl::Send(msg); 244 return ChildThreadImpl::Send(msg);
245 } 245 }
246 246
247 bool GpuChildThread::OnControlMessageReceived(const IPC::Message& msg) { 247 bool GpuChildThread::OnControlMessageReceived(const IPC::Message& msg) {
248 bool handled = true; 248 bool handled = true;
249 IPC_BEGIN_MESSAGE_MAP(GpuChildThread, msg) 249 IPC_BEGIN_MESSAGE_MAP(GpuChildThread, msg)
250 IPC_MESSAGE_HANDLER(GpuMsg_CollectGraphicsInfo, OnCollectGraphicsInfo)
251 IPC_MESSAGE_HANDLER(GpuMsg_GpuSwitched, OnGpuSwitched) 250 IPC_MESSAGE_HANDLER(GpuMsg_GpuSwitched, OnGpuSwitched)
252 IPC_MESSAGE_UNHANDLED(handled = false) 251 IPC_MESSAGE_UNHANDLED(handled = false)
253 IPC_END_MESSAGE_MAP() 252 IPC_END_MESSAGE_MAP()
254 253
255 return handled; 254 return handled;
256 } 255 }
257 256
258 bool GpuChildThread::OnMessageReceived(const IPC::Message& msg) { 257 bool GpuChildThread::OnMessageReceived(const IPC::Message& msg) {
259 if (ChildThreadImpl::OnMessageReceived(msg)) 258 if (ChildThreadImpl::OnMessageReceived(msg))
260 return true; 259 return true;
(...skipping 16 matching lines...) Expand all
277 associated_interfaces_.BindRequest(name, std::move(handle)); 276 associated_interfaces_.BindRequest(name, std::move(handle));
278 else 277 else
279 ChildThreadImpl::OnAssociatedInterfaceRequest(name, std::move(handle)); 278 ChildThreadImpl::OnAssociatedInterfaceRequest(name, std::move(handle));
280 } 279 }
281 280
282 void GpuChildThread::CreateGpuService( 281 void GpuChildThread::CreateGpuService(
283 ui::mojom::GpuServiceRequest request, 282 ui::mojom::GpuServiceRequest request,
284 ui::mojom::GpuHostPtr gpu_host, 283 ui::mojom::GpuHostPtr gpu_host,
285 const gpu::GpuPreferences& gpu_preferences, 284 const gpu::GpuPreferences& gpu_preferences,
286 mojo::ScopedSharedBufferHandle activity_flags) { 285 mojo::ScopedSharedBufferHandle activity_flags) {
286 gpu_service_->set_in_host_process(in_browser_process_);
287 gpu_service_->Bind(std::move(request)); 287 gpu_service_->Bind(std::move(request));
288 288
289 gpu_info_.video_decode_accelerator_capabilities = 289 gpu_info_.video_decode_accelerator_capabilities =
290 media::GpuVideoDecodeAccelerator::GetCapabilities(gpu_preferences); 290 media::GpuVideoDecodeAccelerator::GetCapabilities(gpu_preferences);
291 gpu_info_.video_encode_accelerator_supported_profiles = 291 gpu_info_.video_encode_accelerator_supported_profiles =
292 media::GpuVideoEncodeAccelerator::GetSupportedProfiles(gpu_preferences); 292 media::GpuVideoEncodeAccelerator::GetSupportedProfiles(gpu_preferences);
293 gpu_info_.jpeg_decode_accelerator_supported = 293 gpu_info_.jpeg_decode_accelerator_supported =
294 media::GpuJpegDecodeAcceleratorFactoryProvider:: 294 media::GpuJpegDecodeAcceleratorFactoryProvider::
295 IsAcceleratedJpegDecodeSupported(); 295 IsAcceleratedJpegDecodeSupported();
296 296
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 342
343 GetInterfaceRegistry()->ResumeBinding(); 343 GetInterfaceRegistry()->ResumeBinding();
344 } 344 }
345 345
346 void GpuChildThread::CreateDisplayCompositor( 346 void GpuChildThread::CreateDisplayCompositor(
347 cc::mojom::DisplayCompositorRequest request, 347 cc::mojom::DisplayCompositorRequest request,
348 cc::mojom::DisplayCompositorClientPtr client) { 348 cc::mojom::DisplayCompositorClientPtr client) {
349 NOTREACHED(); 349 NOTREACHED();
350 } 350 }
351 351
352 void GpuChildThread::OnCollectGraphicsInfo() {
353 if (dead_on_arrival_)
354 return;
355
356 #if defined(OS_MACOSX)
357 // gpu::CollectContextGraphicsInfo() is already called during gpu process
358 // initialization (see GpuInit::InitializeAndStartSandbox()) on non-mac
359 // platforms, and during in-browser gpu thread initialization on all platforms
360 // (See InProcessGpuThread::Init()).
361 if (!in_browser_process_) {
362 DCHECK_EQ(gpu::kCollectInfoNone, gpu_info_.context_info_state);
363 gpu::CollectInfoResult result = gpu::CollectContextGraphicsInfo(&gpu_info_);
364 switch (result) {
365 case gpu::kCollectInfoFatalFailure:
366 LOG(ERROR) << "gpu::CollectGraphicsInfo failed (fatal).";
367 // TODO(piman): can we signal overall failure?
368 break;
369 case gpu::kCollectInfoNonFatalFailure:
370 DVLOG(1) << "gpu::CollectGraphicsInfo failed (non-fatal).";
371 break;
372 case gpu::kCollectInfoNone:
373 NOTREACHED();
374 break;
375 case gpu::kCollectInfoSuccess:
376 break;
377 }
378 GetContentClient()->SetGpuInfo(gpu_info_);
379 }
380 #endif
381
382 #if defined(OS_WIN)
383 // GPU full info collection should only happen on un-sandboxed GPU process
384 // or single process/in-process gpu mode on Windows.
385 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
386 DCHECK(command_line->HasSwitch(switches::kDisableGpuSandbox) ||
387 in_browser_process_);
388
389 // This is slow, but it's the only thing the unsandboxed GPU process does,
390 // and GpuDataManager prevents us from sending multiple collecting requests,
391 // so it's OK to be blocking.
392 gpu::GetDxDiagnostics(&gpu_info_.dx_diagnostics);
393 gpu_info_.dx_diagnostics_info_state = gpu::kCollectInfoSuccess;
394 #endif // OS_WIN
395
396 Send(new GpuHostMsg_GraphicsInfoCollected(gpu_info_));
397
398 #if defined(OS_WIN)
399 if (!in_browser_process_) {
400 // The unsandboxed GPU process fulfilled its duty. Rest in peace.
401 base::MessageLoop::current()->QuitWhenIdle();
402 }
403 #endif // OS_WIN
404 }
405
406 void GpuChildThread::OnGpuSwitched() { 352 void GpuChildThread::OnGpuSwitched() {
407 DVLOG(1) << "GPU: GPU has switched"; 353 DVLOG(1) << "GPU: GPU has switched";
408 // Notify observers in the GPU process. 354 // Notify observers in the GPU process.
409 if (!in_browser_process_) 355 if (!in_browser_process_)
410 ui::GpuSwitchingManager::GetInstance()->NotifyGpuSwitched(); 356 ui::GpuSwitchingManager::GetInstance()->NotifyGpuSwitched();
411 } 357 }
412 358
413 void GpuChildThread::OnDestroyGpuMemoryBuffer( 359 void GpuChildThread::OnDestroyGpuMemoryBuffer(
414 gfx::GpuMemoryBufferId id, 360 gfx::GpuMemoryBufferId id,
415 int client_id, 361 int client_id,
416 const gpu::SyncToken& sync_token) { 362 const gpu::SyncToken& sync_token) {
417 if (gpu_channel_manager()) 363 if (gpu_channel_manager())
418 gpu_channel_manager()->DestroyGpuMemoryBuffer(id, client_id, sync_token); 364 gpu_channel_manager()->DestroyGpuMemoryBuffer(id, client_id, sync_token);
419 } 365 }
420 366
421 void GpuChildThread::BindServiceFactoryRequest( 367 void GpuChildThread::BindServiceFactoryRequest(
422 service_manager::mojom::ServiceFactoryRequest request) { 368 service_manager::mojom::ServiceFactoryRequest request) {
423 DVLOG(1) << "GPU: Binding service_manager::mojom::ServiceFactoryRequest"; 369 DVLOG(1) << "GPU: Binding service_manager::mojom::ServiceFactoryRequest";
424 DCHECK(service_factory_); 370 DCHECK(service_factory_);
425 service_factory_bindings_.AddBinding(service_factory_.get(), 371 service_factory_bindings_.AddBinding(service_factory_.get(),
426 std::move(request)); 372 std::move(request));
427 } 373 }
428 374
429 } // namespace content 375 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698