gpu_notify_when_dxdiag_request_fails.patch 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
  2. From: Deepak Mohan <[email protected]>
  3. Date: Fri, 28 Feb 2020 15:08:26 -0800
  4. Subject: gpu: notify when dxdiag request for gpu info fails
  5. We rely on the signal OnGpuInfoUpdate to process gpu info.
  6. When Electron wants to collect the complete info in a single run
  7. it checks for the presence of dx_diagnostics attribute, as these
  8. are the only async calls that happens in the gpu process, but
  9. there are times when this call can fail due to crash or software
  10. rendering and there is no signal from browser process on this event
  11. to identify it.
  12. diff --git a/content/browser/gpu/gpu_data_manager_impl.cc b/content/browser/gpu/gpu_data_manager_impl.cc
  13. index e496fc3cab0eed155123f5fc0e3cb5c4332bfcea..db062a89b241ea7d73b01a28adf6725e9f951e4d 100644
  14. --- a/content/browser/gpu/gpu_data_manager_impl.cc
  15. +++ b/content/browser/gpu/gpu_data_manager_impl.cc
  16. @@ -225,6 +225,11 @@ void GpuDataManagerImpl::TerminateInfoCollectionGpuProcess() {
  17. base::AutoLock auto_lock(lock_);
  18. private_->TerminateInfoCollectionGpuProcess();
  19. }
  20. +
  21. +bool GpuDataManagerImpl::DxdiagDx12VulkanRequested() const {
  22. + base::AutoLock auto_lock(lock_);
  23. + return private_->DxdiagDx12VulkanRequested();
  24. +}
  25. #endif // BUILDFLAG(IS_WIN)
  26. void GpuDataManagerImpl::PostCreateThreads() {
  27. diff --git a/content/browser/gpu/gpu_data_manager_impl.h b/content/browser/gpu/gpu_data_manager_impl.h
  28. index c57305681efb469d296c90df68b6cdbea927580d..6dda1a5465e08df64b539ee203b7c40386d16e72 100644
  29. --- a/content/browser/gpu/gpu_data_manager_impl.h
  30. +++ b/content/browser/gpu/gpu_data_manager_impl.h
  31. @@ -121,6 +121,7 @@ class CONTENT_EXPORT GpuDataManagerImpl : public GpuDataManager,
  32. bool Dx12Requested() const;
  33. bool VulkanRequested() const;
  34. void TerminateInfoCollectionGpuProcess();
  35. + bool DxdiagDx12VulkanRequested() const;
  36. #endif
  37. // Called from BrowserMainLoop::PostCreateThreads().
  38. // TODO(content/browser/gpu/OWNERS): This should probably use a
  39. diff --git a/content/browser/gpu/gpu_data_manager_impl_private.cc b/content/browser/gpu/gpu_data_manager_impl_private.cc
  40. index 019554cca7d25be443b75271278865e09a763a31..cc7e01260891c5d42ef590b040209f01943e1feb 100644
  41. --- a/content/browser/gpu/gpu_data_manager_impl_private.cc
  42. +++ b/content/browser/gpu/gpu_data_manager_impl_private.cc
  43. @@ -1199,6 +1199,12 @@ void GpuDataManagerImplPrivate::TerminateInfoCollectionGpuProcess() {
  44. if (host)
  45. host->ForceShutdown();
  46. }
  47. +
  48. +bool GpuDataManagerImplPrivate::DxdiagDx12VulkanRequested() const {
  49. + return !(gpu_info_vulkan_request_failed_ ||
  50. + gpu_info_dx12_request_failed_ ||
  51. + gpu_info_dx_diag_request_failed_);
  52. +}
  53. #endif
  54. void GpuDataManagerImplPrivate::PostCreateThreads() {
  55. diff --git a/content/browser/gpu/gpu_data_manager_impl_private.h b/content/browser/gpu/gpu_data_manager_impl_private.h
  56. index 790e72f12c7f1cf6e49d2a51949769a5d14bd4db..e02c3033231f93792fe2b456c08cfc2ac0f3d49e 100644
  57. --- a/content/browser/gpu/gpu_data_manager_impl_private.h
  58. +++ b/content/browser/gpu/gpu_data_manager_impl_private.h
  59. @@ -86,6 +86,7 @@ class CONTENT_EXPORT GpuDataManagerImplPrivate {
  60. bool Dx12Requested() const;
  61. bool VulkanRequested() const;
  62. void TerminateInfoCollectionGpuProcess();
  63. + bool DxdiagDx12VulkanRequested() const;
  64. #endif
  65. void PostCreateThreads();
  66. void UpdateDawnInfo(const std::vector<std::string>& dawn_info_list);