Files
electron/patches/chromium/fix_disabling_background_throttling_in_compositor.patch
electron-roller[bot] 0e4e9dc98c chore: bump chromium to 121.0.6116.0 (main) (#40490)
* chore: bump chromium in DEPS to 121.0.6116.0

* chore: update patches

* Update webIDL to support close event.

Refs https://chromium-review.googlesource.com/c/chromium/src/+/4970653

* Remove uses of implicit conversion of ScopedTypeRef

Refs https://bugs.chromium.org/p/chromium/issues/detail?id=1495439

* Add GlobalRenderFrameHostToken

Refs https://chromium-review.googlesource.com/c/chromium/src/+/5001743

* [DevTools] Console Insights: move from build flag to Feature API

Refs https://chromium-review.googlesource.com/c/chromium/src/+/5002232

* [Extensions] Use script serialization in scripting API

Refs https://chromium-review.googlesource.com/c/chromium/src/+/4968680
Refs https://chromium-review.googlesource.com/c/chromium/src/+/4998265

* [api] Remove AllCan Read/Write

https://chromium-review.googlesource.com/c/v8/v8/+/5006387

* chore: update libcxx files

* chore: address nan compilation error

* spec: use nan dependency from third_party

It is easier to get fixes for spec modules depending on nan

* ci: publish nan artifact for woa

* fix: bad patch update

* chore: update nan resolution

* Revert "chore: update nan resolution"

This reverts commit 786cdb858c.

---------

Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: deepak1556 <hop2deep@gmail.com>
2023-11-14 13:21:32 -08:00

84 lines
3.4 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Michal Pichlinski <michal.pichlinski@openfin.co>
Date: Thu, 15 Jun 2023 23:04:48 +0200
Subject: allow disabling throttling in the `viz::DisplayScheduler` per
`ui::Compositor`
In Chromium when the `viz::DisplayScheduler` is invisible it throttles
its work by dropping frame draws and swaps.
This patch allows disbling this throttling by preventing transition to
invisible state of the `viz::DisplayScheduler` owned
by the `ui::Compositor`.
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc
index 954828f9d9c6a5af3ad68026dbbddfe8bc0cb657..d9faab46d1df921bb31feb8f5e0908b090757150 100644
--- a/ui/compositor/compositor.cc
+++ b/ui/compositor/compositor.cc
@@ -338,7 +338,8 @@ void Compositor::SetLayerTreeFrameSink(
if (display_private_) {
disabled_swap_until_resize_ = false;
display_private_->Resize(size());
- display_private_->SetDisplayVisible(host_->IsVisible());
+ // Invisible display is throttling itself.
+ display_private_->SetDisplayVisible(background_throttling_ ? host_->IsVisible() : true);
display_private_->SetDisplayColorSpaces(display_color_spaces_);
display_private_->SetDisplayColorMatrix(
gfx::SkM44ToTransform(display_color_matrix_));
@@ -530,8 +531,11 @@ void Compositor::SetVisible(bool visible) {
host_->SetVisible(visible);
// Visibility is reset when the output surface is lost, so this must also be
// updated then.
- if (display_private_)
- display_private_->SetDisplayVisible(visible);
+ if (display_private_) {
+ // Invisible display is throttling itself.
+ display_private_->SetDisplayVisible(
+ background_throttling_ ? visible : true);
+ }
}
bool Compositor::IsVisible() {
@@ -958,4 +962,13 @@ const cc::LayerTreeSettings& Compositor::GetLayerTreeSettings() const {
return host_->GetSettings();
}
+void Compositor::SetBackgroundThrottling(bool background_throttling_enabled) {
+ background_throttling_ = background_throttling_enabled;
+ if (display_private_) {
+ // Invisible display is throttling itself.
+ display_private_->SetDisplayVisible(
+ background_throttling_ ? host_->IsVisible() : true);
+ }
+}
+
} // namespace ui
diff --git a/ui/compositor/compositor.h b/ui/compositor/compositor.h
index 67738f95affa1b7998c03d10f5f62d70afcbd62a..499758acdd77058c6e3e0e798777e547e9c9a393 100644
--- a/ui/compositor/compositor.h
+++ b/ui/compositor/compositor.h
@@ -522,6 +522,10 @@ class COMPOSITOR_EXPORT Compositor : public base::PowerSuspendObserver,
return host_->saved_events_metrics_count_for_testing();
}
+ // Sets |background_throttling_| responsible for suspending drawing
+ // and switching frames.
+ void SetBackgroundThrottling(bool background_throttling_enabled);
+
private:
friend class base::RefCounted<Compositor>;
friend class TotalAnimationThroughputReporter;
@@ -628,6 +632,12 @@ class COMPOSITOR_EXPORT Compositor : public base::PowerSuspendObserver,
// See go/report-ux-metrics-at-painting for details.
bool animation_started_ = false;
+ // Background throttling is a default Chromium behaviour. It occurs
+ // when the |display_private_| is not visible by prevent drawing and swapping
+ // frames. When it is disabled we are keeping |display_private_| always
+ // visible in order to keep generating frames.
+ bool background_throttling_ = true;
+
TrackerId next_throughput_tracker_id_ = 1u;
struct TrackerState {
TrackerState();