allow_disabling_blink_scheduler_throttling_per_renderview.patch 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
  2. From: deepak1556 <[email protected]>
  3. Date: Mon, 18 May 2020 11:12:26 -0700
  4. Subject: allow disabling blink scheduler throttling per RenderView
  5. This allows us to disable throttling for hidden windows.
  6. diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
  7. index 989e7686f61acc18244801b0f8e52e779c8ac856..60182bd144295be0a7f4f05525246dd203d81ad4 100644
  8. --- a/content/browser/renderer_host/render_view_host_impl.cc
  9. +++ b/content/browser/renderer_host/render_view_host_impl.cc
  10. @@ -690,6 +690,11 @@ void RenderViewHostImpl::SetBackgroundOpaque(bool opaque) {
  11. GetWidget()->GetAssociatedFrameWidget()->SetBackgroundOpaque(opaque);
  12. }
  13. +void RenderViewHostImpl::SetSchedulerThrottling(bool allowed) {
  14. + if (auto& broadcast = GetAssociatedPageBroadcast())
  15. + broadcast->SetSchedulerThrottling(allowed);
  16. +}
  17. +
  18. bool RenderViewHostImpl::IsMainFrameActive() {
  19. return is_active();
  20. }
  21. diff --git a/content/browser/renderer_host/render_view_host_impl.h b/content/browser/renderer_host/render_view_host_impl.h
  22. index 4e40347feef5c7dde979407c4d85867fb5dd1c61..a72c2f97c1b28f847a145585dcd6ad6578de7ef6 100644
  23. --- a/content/browser/renderer_host/render_view_host_impl.h
  24. +++ b/content/browser/renderer_host/render_view_host_impl.h
  25. @@ -138,6 +138,7 @@ class CONTENT_EXPORT RenderViewHostImpl
  26. void EnablePreferredSizeMode() override;
  27. void WriteIntoTrace(perfetto::TracedProto<TraceProto> context) const override;
  28. + void SetSchedulerThrottling(bool allowed) override;
  29. void SendWebPreferencesToRenderer();
  30. void SendRendererPreferencesToRenderer(
  31. const blink::RendererPreferences& preferences);
  32. diff --git a/content/public/browser/render_view_host.h b/content/public/browser/render_view_host.h
  33. index 9979c25ecd57e68331b628a518368635db5c2027..32733bf951af3eff7da5fd5758bbcbaa49ff0e3c 100644
  34. --- a/content/public/browser/render_view_host.h
  35. +++ b/content/public/browser/render_view_host.h
  36. @@ -76,6 +76,9 @@ class CONTENT_EXPORT RenderViewHost {
  37. virtual void WriteIntoTrace(
  38. perfetto::TracedProto<TraceProto> context) const = 0;
  39. + // Disable/Enable scheduler throttling.
  40. + virtual void SetSchedulerThrottling(bool allowed) = 0;
  41. +
  42. private:
  43. // This interface should only be implemented inside content.
  44. friend class RenderViewHostImpl;
  45. diff --git a/third_party/blink/public/mojom/page/page.mojom b/third_party/blink/public/mojom/page/page.mojom
  46. index 0cfe109e1ee4ac59dc8ddc68dff3ab929fcf480b..398be46c71fb9ea42ea655b204aaff31501d48c9 100644
  47. --- a/third_party/blink/public/mojom/page/page.mojom
  48. +++ b/third_party/blink/public/mojom/page/page.mojom
  49. @@ -131,4 +131,7 @@ interface PageBroadcast {
  50. mojo_base.mojom.UnguessableToken devtools_frame_token,
  51. RemoteFrameInterfacesFromBrowser remote_frame_interfaces,
  52. RemoteMainFrameInterfaces remote_main_frame_interfaces);
  53. +
  54. + // Whether to enable the Renderer scheduler background throttling.
  55. + SetSchedulerThrottling(bool allowed);
  56. };
  57. diff --git a/third_party/blink/public/web/web_view.h b/third_party/blink/public/web/web_view.h
  58. index c8655d9270b812df04f27025ff29a2fb6d2a4066..2f83e5ce40f8217ff5d53f7205299ad7ac4d2013 100644
  59. --- a/third_party/blink/public/web/web_view.h
  60. +++ b/third_party/blink/public/web/web_view.h
  61. @@ -367,6 +367,7 @@ class BLINK_EXPORT WebView {
  62. // Scheduling -----------------------------------------------------------
  63. virtual PageScheduler* Scheduler() const = 0;
  64. + virtual void SetSchedulerThrottling(bool allowed) = 0;
  65. // Visibility -----------------------------------------------------------
  66. diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc
  67. index 5953f73697187280dacc4a77aec646a670983f5d..db53f78f371f5d7e76ce0844d7b3cb3c912af4e8 100644
  68. --- a/third_party/blink/renderer/core/exported/web_view_impl.cc
  69. +++ b/third_party/blink/renderer/core/exported/web_view_impl.cc
  70. @@ -3827,13 +3827,21 @@ PageScheduler* WebViewImpl::Scheduler() const {
  71. return GetPage()->GetPageScheduler();
  72. }
  73. +void WebViewImpl::SetSchedulerThrottling(bool allowed) {
  74. + DCHECK(GetPage());
  75. + scheduler_throttling_allowed_ = allowed;
  76. + GetPage()->GetPageScheduler()->SetPageVisible(allowed ?
  77. + (GetVisibilityState() == mojom::blink::PageVisibilityState::kVisible) : true);
  78. +}
  79. +
  80. void WebViewImpl::SetVisibilityState(
  81. mojom::blink::PageVisibilityState visibility_state,
  82. bool is_initial_state) {
  83. DCHECK(GetPage());
  84. GetPage()->SetVisibilityState(visibility_state, is_initial_state);
  85. GetPage()->GetPageScheduler()->SetPageVisible(
  86. - visibility_state == mojom::blink::PageVisibilityState::kVisible);
  87. + scheduler_throttling_allowed_ ?
  88. + (visibility_state == mojom::blink::PageVisibilityState::kVisible) : true);
  89. // Notify observers of the change.
  90. if (!is_initial_state) {
  91. for (auto& observer : observers_)
  92. diff --git a/third_party/blink/renderer/core/exported/web_view_impl.h b/third_party/blink/renderer/core/exported/web_view_impl.h
  93. index f283bfde9e43dd38a8cf769d8ac7cec643fe5222..fef7875a7eb323c37730bb80227c40c31edae44e 100644
  94. --- a/third_party/blink/renderer/core/exported/web_view_impl.h
  95. +++ b/third_party/blink/renderer/core/exported/web_view_impl.h
  96. @@ -439,6 +439,7 @@ class CORE_EXPORT WebViewImpl final : public WebView,
  97. LocalDOMWindow* PagePopupWindow() const;
  98. PageScheduler* Scheduler() const override;
  99. + void SetSchedulerThrottling(bool allowed) override;
  100. void SetVisibilityState(mojom::blink::PageVisibilityState visibility_state,
  101. bool is_initial_state) override;
  102. mojom::blink::PageVisibilityState GetVisibilityState() override;
  103. @@ -895,6 +896,8 @@ class CORE_EXPORT WebViewImpl final : public WebView,
  104. // If true, we send IPC messages when |preferred_size_| changes.
  105. bool send_preferred_size_changes_ = false;
  106. + bool scheduler_throttling_allowed_ = true;
  107. +
  108. // Whether the preferred size may have changed and |UpdatePreferredSize| needs
  109. // to be called.
  110. bool needs_preferred_size_update_ = true;