fix: disable background throttling also in the viz::DisplayScheduler (#38924)

* fix: disable background throttling also in the `viz::DisplayScheduler`

`viz::DisplayScheduler` is responsible for drawing and swapping frames
in the `DisplayScheduler::DrawAndSwap` which is called from the
`DisplayScheduler::AttemptDrawAndSwap` if the `DisplayScheduler::ShouldDraw`
returns true. `ShouldDraw` depends on the `DisplayScheduler` visibility
and when it is not visible then it returns false.

In order to keep producing frames, disabling `backgroundThrottling`
should also prevent changing `DisplayScheduler` visibility to false.

`DisplayScheduler` lives in the `ui::Compositor` where every
`electron::NativewWindow` has its own `Compositor`. `electron::NativewWindow`
may be host of the multiple `electron::api::WebContents` instances which may
have different `WebPreferences` settings. Therefore if at least one
of the `WebContents` requires disabling throttling then all other `WebContents`
using the same window will have it disabled in the `ui::Compositor`.

BREAKING CHANGE:
`backgroundThrottling` set to false will disable frames throttling
in the `BrowserWindow` for all `WebContents` displayed by it.

Close: [#31016](https://github.com/electron/electron/issues/31016)

* fixup! fix: disable background throttling also in the `viz::DisplayScheduler`

* fixup! fix: disable background throttling also in the `viz::DisplayScheduler`

* fixup! fix: disable background throttling also in the `viz::DisplayScheduler`

---------

Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
This commit is contained in:
michal-pichlinski-openfin 2023-09-26 22:00:46 +02:00 committed by GitHub
parent fa215f1009
commit 2190793fe6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 176 additions and 3 deletions

View file

@ -0,0 +1,18 @@
// Copyright 2023 OpenFin. All rights reserved.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef ELECTRON_SHELL_BROWSER_BACKGROUND_THROTTLING_SOURCE
#define ELECTRON_SHELL_BROWSER_BACKGROUND_THROTTLING_SOURCE
namespace electron {
class BackgroundThrottlingSource {
public:
virtual ~BackgroundThrottlingSource() = default;
virtual bool GetBackgroundThrottling() const = 0;
};
} // namespace electron
#endif // ELECTRON_SHELL_BROWSER_BACKGROUND_THROTTLING_SOURCE