Reland "[discard] Ensures FrameNodes transition lifecycle state correctly" This is a reland of commit 758f6c0a6405fb473d2e42e4dd55dd9a44986c50 Initialized page_lifecycle_state_ (see diff against PS1). Original change's description: > [discard] Ensures FrameNodes transition lifecycle state correctly > > The current implementation of web-contents retaining tab discard > can result in invalid lifecycle state transitions for frozen tabs. > > Consider the following event flow: > 1. A tab is frozen > 2. The same tab is then discarded > 3. The page lifecycle state is synchronously updated to DISCARDED > in TabLifecycleUnit::FinishDiscardAndPreserveWebContents() > 4. The synchronous shutdown of the RenderProcessHost causes a > FrameNodeObserver::OnFrameNodeRemoved() event to be queued > on the performance manager graph thread > 5. This changes the balance of frozen frames and the frame tree > is interpreted as ACTIVE > This queues a update-lifecycle-state ACTIVE event on the > main thread > 6. On the main thread a state transition from DISCARDED to ACTIVE > is attempted (which is invalid, the tab is still discarded) > > This results in the tab being set to an invalid page lifecycle > state. Consequently further discards may be attempted on the tab > given it is flagged ACTIVE, however these will either fail or no-op > as the tab is actually discarded. > > This CL addresses this issue by updating the TabLifecycleUnit to > independently keep track of: > - if the WebContents is discarded in `is_discarded_` > - the page's LifecycleState in `page_lifecycle_state_` > this is either kActive or kFrozen (kDiscarded is removed) > > The LifecycleUnitState is the computed based on the above. This is > done since it is possible to end up with a discarded page who's > lifecycle state is either kActive or kFrozen. > > Bug: 394242157 > Change-Id: I42517404b90ddd593c57e12b8bf48b4433e3227a > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6229171 > Reviewed-by: Sam McNally <sammc@chromium.org> > Reviewed-by: Francois Pierre Doray <fdoray@chromium.org> > Commit-Queue: Thomas Lukaszewicz <tluk@chromium.org> > Cr-Commit-Position: refs/heads/main@{#1417926} Bug: 394242157 Change-Id: Ia02ef7345691c60ed2019caecd27689ebca3b87a Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6248477 Reviewed-by: Francois Pierre Doray <fdoray@chromium.org> Reviewed-by: Sam McNally <sammc@chromium.org> Commit-Queue: Thomas Lukaszewicz <tluk@chromium.org> Cr-Commit-Position: refs/heads/main@{#1418326}
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.
The project's web site is https://www.chromium.org.
To check out the source code locally, don't use git clone! Instead, follow the instructions on how to get the code.
Documentation in the source is rooted in docs/README.md.
Learn how to Get Around the Chromium Source Code Directory Structure.
For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.
If you found a bug, please file it at https://crbug.com/new.