allow_disabling_blink_scheduler_throttling_per_renderview.patch 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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 84044606fb0644b2b6053c72a9750bae3729f666..995c5dfc49a392669f73d85a92fbdb54cf0e11ca 100644
  8. --- a/content/browser/renderer_host/render_view_host_impl.cc
  9. +++ b/content/browser/renderer_host/render_view_host_impl.cc
  10. @@ -649,6 +649,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 a099eed10dd061994bff696519099c3ef7437a46..a1f1e9b55272e70b4acd5d1f1515fba7d91538fa 100644
  23. --- a/content/browser/renderer_host/render_view_host_impl.h
  24. +++ b/content/browser/renderer_host/render_view_host_impl.h
  25. @@ -137,6 +137,7 @@ class CONTENT_EXPORT RenderViewHostImpl
  26. bool IsRenderViewLive() const 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 a6fe708878eb9afba9a68e0be71ba2c0b2a84d7d..5cc81ceb44d0a8baee3ebcc63aa4137b1e9ef08e 100644
  34. --- a/content/public/browser/render_view_host.h
  35. +++ b/content/public/browser/render_view_host.h
  36. @@ -80,6 +80,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/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h
  46. index 4e8d36420d6edc1725a840e1b9f123041d21abe4..dd198cb7bf02e509833c6b4c7d8e5d65d20d46dc 100644
  47. --- a/content/renderer/render_view_impl.h
  48. +++ b/content/renderer/render_view_impl.h
  49. @@ -152,6 +152,8 @@ class CONTENT_EXPORT RenderViewImpl : public blink::WebViewClient,
  50. static WindowOpenDisposition NavigationPolicyToDisposition(
  51. blink::WebNavigationPolicy policy);
  52. + void OnSetSchedulerThrottling(bool allowed);
  53. +
  54. // ---------------------------------------------------------------------------
  55. // ADDING NEW FUNCTIONS? Please keep private functions alphabetized and put
  56. // it in the same order in the .cc file as it was in the header.
  57. diff --git a/third_party/blink/public/mojom/page/page.mojom b/third_party/blink/public/mojom/page/page.mojom
  58. index befd736a9cf362514b9a2ee475dc4a814c85a87b..24b2617f56673a3075697802cf5b574b0c766610 100644
  59. --- a/third_party/blink/public/mojom/page/page.mojom
  60. +++ b/third_party/blink/public/mojom/page/page.mojom
  61. @@ -97,4 +97,7 @@ interface PageBroadcast {
  62. // Sent to whole page, but should only be used by the main frame.
  63. SetPageBaseBackgroundColor(skia.mojom.SkColor? color);
  64. +
  65. + // Whether to enable the Renderer scheduler background throttling.
  66. + SetSchedulerThrottling(bool allowed);
  67. };
  68. diff --git a/third_party/blink/public/web/web_view.h b/third_party/blink/public/web/web_view.h
  69. index 560b72dfbc70172bc668229b29fe0c9da139f320..13ec73b9d627259625d64f5b97838033db89745c 100644
  70. --- a/third_party/blink/public/web/web_view.h
  71. +++ b/third_party/blink/public/web/web_view.h
  72. @@ -369,6 +369,7 @@ class WebView {
  73. // Scheduling -----------------------------------------------------------
  74. virtual PageScheduler* Scheduler() const = 0;
  75. + virtual void SetSchedulerThrottling(bool allowed) = 0;
  76. // Visibility -----------------------------------------------------------
  77. diff --git a/third_party/blink/renderer/core/exported/web_view_impl.cc b/third_party/blink/renderer/core/exported/web_view_impl.cc
  78. index daab024ee0e2010e177eabeb7e0fb964c631dd17..06d8ca44fb1dc3748d81b5c5a407dfdf7183f845 100644
  79. --- a/third_party/blink/renderer/core/exported/web_view_impl.cc
  80. +++ b/third_party/blink/renderer/core/exported/web_view_impl.cc
  81. @@ -3666,6 +3666,13 @@ PageScheduler* WebViewImpl::Scheduler() const {
  82. return GetPage()->GetPageScheduler();
  83. }
  84. +void WebViewImpl::SetSchedulerThrottling(bool allowed) {
  85. + DCHECK(GetPage());
  86. + scheduler_throttling_allowed_ = allowed;
  87. + GetPage()->GetPageScheduler()->SetPageVisible(allowed ?
  88. + (GetVisibilityState() == mojom::blink::PageVisibilityState::kVisible) : true);
  89. +}
  90. +
  91. void WebViewImpl::SetVisibilityState(
  92. mojom::blink::PageVisibilityState visibility_state,
  93. bool is_initial_state) {
  94. @@ -3677,7 +3684,8 @@ void WebViewImpl::SetVisibilityState(
  95. }
  96. GetPage()->SetVisibilityState(visibility_state, is_initial_state);
  97. GetPage()->GetPageScheduler()->SetPageVisible(
  98. - visibility_state == mojom::blink::PageVisibilityState::kVisible);
  99. + scheduler_throttling_allowed_ ?
  100. + (visibility_state == mojom::blink::PageVisibilityState::kVisible) : true);
  101. }
  102. mojom::blink::PageVisibilityState WebViewImpl::GetVisibilityState() {
  103. diff --git a/third_party/blink/renderer/core/exported/web_view_impl.h b/third_party/blink/renderer/core/exported/web_view_impl.h
  104. index 5107ef421138e136b20b25b7bbcc1f0bb246bb66..043266205142e59f88c4c2f2ae6b58bb009f2d9c 100644
  105. --- a/third_party/blink/renderer/core/exported/web_view_impl.h
  106. +++ b/third_party/blink/renderer/core/exported/web_view_impl.h
  107. @@ -420,6 +420,7 @@ class CORE_EXPORT WebViewImpl final : public WebView,
  108. LocalDOMWindow* PagePopupWindow() const;
  109. PageScheduler* Scheduler() const override;
  110. + void SetSchedulerThrottling(bool allowed) override;
  111. void SetVisibilityState(mojom::blink::PageVisibilityState visibility_state,
  112. bool is_initial_state) override;
  113. mojom::blink::PageVisibilityState GetVisibilityState() override;
  114. @@ -857,6 +858,8 @@ class CORE_EXPORT WebViewImpl final : public WebView,
  115. // If true, we send IPC messages when |preferred_size_| changes.
  116. bool send_preferred_size_changes_ = false;
  117. + bool scheduler_throttling_allowed_ = true;
  118. +
  119. // Whether the preferred size may have changed and |UpdatePreferredSize| needs
  120. // to be called.
  121. bool needs_preferred_size_update_ = true;