gpu_notify_when_dxdiag_request_fails.patch 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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 2b70aa2406a9edf1af9eaafcf2833935a2089c03..cf420ceda62facea9c871d2754d0d86a22ed2434 100644
  14. --- a/content/browser/gpu/gpu_data_manager_impl.cc
  15. +++ b/content/browser/gpu/gpu_data_manager_impl.cc
  16. @@ -234,6 +234,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
  26. void GpuDataManagerImpl::UpdateGpuFeatureInfo(
  27. diff --git a/content/browser/gpu/gpu_data_manager_impl.h b/content/browser/gpu/gpu_data_manager_impl.h
  28. index 15ee11b33aca857edf44d799004f4424214ecf2e..2735668757843639ca30aa7e270abbdb8f4acbdf 100644
  29. --- a/content/browser/gpu/gpu_data_manager_impl.h
  30. +++ b/content/browser/gpu/gpu_data_manager_impl.h
  31. @@ -105,6 +105,7 @@ class CONTENT_EXPORT GpuDataManagerImpl : public GpuDataManager,
  32. // BrowserMainParts override instead.
  33. void PostCreateThreads();
  34. void TerminateInfoCollectionGpuProcess();
  35. + bool DxdiagDx12VulkanRequested() const;
  36. #endif
  37. // Update the GPU feature info. This updates the blocklist and enabled status
  38. // of GPU rasterization. In the future this will be used for more features.
  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 4c67be38f54198feb025562664658f5ed653fd36..ec41a23fa3dd8b637165bb7abeef14e80274f560 100644
  41. --- a/content/browser/gpu/gpu_data_manager_impl_private.cc
  42. +++ b/content/browser/gpu/gpu_data_manager_impl_private.cc
  43. @@ -1087,6 +1087,11 @@ void GpuDataManagerImplPrivate::TerminateInfoCollectionGpuProcess() {
  44. host->ForceShutdown();
  45. }
  46. +bool GpuDataManagerImplPrivate::DxdiagDx12VulkanRequested() const {
  47. + return !(gpu_info_vulkan_request_failed_ ||
  48. + gpu_info_dx12_request_failed_ ||
  49. + gpu_info_dx_diag_request_failed_);
  50. +}
  51. #endif
  52. void GpuDataManagerImplPrivate::UpdateGpuFeatureInfo(
  53. diff --git a/content/browser/gpu/gpu_data_manager_impl_private.h b/content/browser/gpu/gpu_data_manager_impl_private.h
  54. index 40b736989347b13e0ec0393bd02d67d2cae5ef96..90c561e1fc0d9b6ebf7c6dde6912c55505cc7c56 100644
  55. --- a/content/browser/gpu/gpu_data_manager_impl_private.h
  56. +++ b/content/browser/gpu/gpu_data_manager_impl_private.h
  57. @@ -77,6 +77,7 @@ class CONTENT_EXPORT GpuDataManagerImplPrivate {
  58. bool VulkanRequested() const;
  59. void PostCreateThreads();
  60. void TerminateInfoCollectionGpuProcess();
  61. + bool DxdiagDx12VulkanRequested() const;
  62. #endif
  63. void UpdateGpuFeatureInfo(const gpu::GpuFeatureInfo& gpu_feature_info,
  64. const base::Optional<gpu::GpuFeatureInfo>&