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 0f73a8d0da336036e663927424a3a0ccba9e4f7b..e2fe4908e8e459bb277dfd6becdc486714e814ea 100644
  14. --- a/content/browser/gpu/gpu_data_manager_impl.cc
  15. +++ b/content/browser/gpu/gpu_data_manager_impl.cc
  16. @@ -188,6 +188,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 2e069f00bb0f2c263b60662988548b246b74e5d9..82e9a19b6502aeab8f5d14098f2e5c5f995c3425 100644
  29. --- a/content/browser/gpu/gpu_data_manager_impl.h
  30. +++ b/content/browser/gpu/gpu_data_manager_impl.h
  31. @@ -95,6 +95,7 @@ class CONTENT_EXPORT GpuDataManagerImpl : public GpuDataManager,
  32. // Called from BrowserMainLoop::BrowserThreadsStarted().
  33. void OnBrowserThreadsStarted();
  34. void TerminateInfoCollectionGpuProcess();
  35. + bool DxdiagDx12VulkanRequested() const;
  36. #endif
  37. // Update the GPU feature info. This updates the blacklist 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 8ceb4ed3c6bc4759bacdf6a5922dd9a4c5e65322..a0a18214c3a4722c920ad4204a4975625130bb3c 100644
  41. --- a/content/browser/gpu/gpu_data_manager_impl_private.cc
  42. +++ b/content/browser/gpu/gpu_data_manager_impl_private.cc
  43. @@ -1059,6 +1059,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 ef74bd7541a2a47e71289b154221a5f5adf1e90b..100d393550d57c24bb0c9dc6d604ed925930bb07 100644
  55. --- a/content/browser/gpu/gpu_data_manager_impl_private.h
  56. +++ b/content/browser/gpu/gpu_data_manager_impl_private.h
  57. @@ -75,6 +75,7 @@ class CONTENT_EXPORT GpuDataManagerImplPrivate {
  58. bool VulkanRequested() const;
  59. void OnBrowserThreadsStarted();
  60. void TerminateInfoCollectionGpuProcess();
  61. + bool DxdiagDx12VulkanRequested() const;
  62. #endif
  63. void UpdateGpuFeatureInfo(const gpu::GpuFeatureInfo& gpu_feature_info,
  64. const base::Optional<gpu::GpuFeatureInfo>&