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 5cf4fd6559dd7183ed74e44001d7e53ca9b055b1..ca6a293882fe2af1e2bf58b8353e1c5c9de827d1 100644
  8. --- a/content/browser/renderer_host/render_view_host_impl.cc
  9. +++ b/content/browser/renderer_host/render_view_host_impl.cc
  10. @@ -646,6 +646,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 c2d024d09dda8b221cc588e784cb2d31c273d0ff..c0fd9c5400acf32c89a477797c4d9c45662fb14c 100644
  23. --- a/content/browser/renderer_host/render_view_host_impl.h
  24. +++ b/content/browser/renderer_host/render_view_host_impl.h
  25. @@ -136,6 +136,7 @@ class CONTENT_EXPORT RenderViewHostImpl
  26. bool IsRenderViewLive() override;
  27. void WriteIntoTrace(perfetto::TracedValue context) 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 787077d71c04d571aa825bec0a549c5fad2b8574..4b05b80802ba97a46eed60e509b503fc8375016b 100644
  34. --- a/content/public/browser/render_view_host.h
  35. +++ b/content/public/browser/render_view_host.h
  36. @@ -74,6 +74,9 @@ class CONTENT_EXPORT RenderViewHost {
  37. // Write a representation of this object into a trace.
  38. virtual void WriteIntoTrace(perfetto::TracedValue context) = 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 b7c6ba65551acd31c96be06c3d7595f28b6855b0..21ce5fe263f8a47281b21c45c7bda9eff1cb17b5 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 14d4a00293ab0b11e733676844ce483992d6cd8e..c6c2dbb9dddd1eaa21e8c7b276d871a3898463fa 100644
  70. --- a/third_party/blink/public/web/web_view.h
  71. +++ b/third_party/blink/public/web/web_view.h
  72. @@ -368,6 +368,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 297ed65293723e8d539c65475d335947c840fec2..304dcdaa65ee1d9bed86f7c0e5956dd3a2a65585 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. @@ -3679,6 +3679,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. @@ -3690,7 +3697,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 25f9a9fc617d75dfd26af582574ebcad3a16a8ef..7d8473a7915fd3312c3a4f582b3f1d87580e6e75 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. @@ -419,6 +419,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. @@ -855,6 +856,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;