From 89ef924a99471c08128121b9591e36daae8e1312 Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 20:40:59 -0400 Subject: [PATCH] fix: software compositing infinite loop (#44351) * fix: software compositing infinite loop Co-authored-by: Keeley Hammond Co-authored-by: Sam Maddock * chore: update patches --------- Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Sam Maddock Co-authored-by: Keeley Hammond --- patches/chromium/.patches | 1 + ...x_software_compositing_infinite_loop.patch | 31 +++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 patches/chromium/fix_software_compositing_infinite_loop.patch diff --git a/patches/chromium/.patches b/patches/chromium/.patches index c5bf14a6888..940131099c5 100644 --- a/patches/chromium/.patches +++ b/patches/chromium/.patches @@ -133,3 +133,4 @@ feat_enable_customizing_symbol_color_in_framecaptionbutton.patch fix_potential_draggable_region_crash_when_no_mainframeimpl.patch feat_allow_usage_of_sccontentsharingpicker_on_supported_platforms.patch feat_allow_-4_as_a_macos_screen_share_id.patch +fix_software_compositing_infinite_loop.patch diff --git a/patches/chromium/fix_software_compositing_infinite_loop.patch b/patches/chromium/fix_software_compositing_infinite_loop.patch new file mode 100644 index 00000000000..b4116398351 --- /dev/null +++ b/patches/chromium/fix_software_compositing_infinite_loop.patch @@ -0,0 +1,31 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Samuel Maddock +Date: Fri, 18 Oct 2024 11:11:11 -0400 +Subject: fix: software compositing infinite loop + +When GPU compositing is unavailable, LayerTreeView::RequestNewLayerTreeFrameSink +may run in an infinite loop due to a race condition. Need to allow time to +process CompositingModeFallbackToSoftware IPC to disable GPU compositing. + +https://issues.chromium.org/345275130 + +diff --git a/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc b/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc +index 9497ab591864295231db47fdc526e59935e6aa31..635fa41649db41800f99da2683cc955b2e1e935f 100644 +--- a/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc ++++ b/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc +@@ -374,9 +374,13 @@ void LayerTreeView::DidFailToInitializeLayerTreeFrameSink() { + // unable to be killed after Chrome is closed. + // https://issues.chromium.org/336164423 + if (!Platform::Current()->IsGpuRemoteDisconnected()) { +- layer_tree_host_->GetTaskRunnerProvider()->MainThreadTaskRunner()->PostTask( ++ // CompositingModeFallbackToSoftware IPC will disable GPU compositing in ++ // RenderThread. Post task with delay to give time to receive this IPC and ++ // prevent infinite loop of retries for software renderers. ++ // https://issues.chromium.org/345275130 ++ layer_tree_host_->GetTaskRunnerProvider()->MainThreadTaskRunner()->PostDelayedTask( + FROM_HERE, base::BindOnce(&LayerTreeView::RequestNewLayerTreeFrameSink, +- weak_factory_.GetWeakPtr())); ++ weak_factory_.GetWeakPtr()), base::Milliseconds(10)); + } + } +