fix_software_compositing_infinite_loop.patch 1.8 KB

12345678910111213141516171819202122232425262728293031
  1. From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
  2. From: Samuel Maddock <[email protected]>
  3. Date: Fri, 18 Oct 2024 11:11:11 -0400
  4. Subject: fix: software compositing infinite loop
  5. When GPU compositing is unavailable, LayerTreeView::RequestNewLayerTreeFrameSink
  6. may run in an infinite loop due to a race condition. Need to allow time to
  7. process CompositingModeFallbackToSoftware IPC to disable GPU compositing.
  8. https://issues.chromium.org/345275130
  9. 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
  10. index 7253162094080c992bbb9f58dd9856d75a1f7476..14b74a675f7363b7aa3449459e0034f21d31dd87 100644
  11. --- a/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc
  12. +++ b/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc
  13. @@ -387,9 +387,13 @@ void LayerTreeView::DidFailToInitializeLayerTreeFrameSink() {
  14. // unable to be killed after Chrome is closed.
  15. // https://issues.chromium.org/336164423
  16. if (!Platform::Current()->IsGpuRemoteDisconnected()) {
  17. - layer_tree_host_->GetTaskRunnerProvider()->MainThreadTaskRunner()->PostTask(
  18. + // CompositingModeFallbackToSoftware IPC will disable GPU compositing in
  19. + // RenderThread. Post task with delay to give time to receive this IPC and
  20. + // prevent infinite loop of retries for software renderers.
  21. + // https://issues.chromium.org/345275130
  22. + layer_tree_host_->GetTaskRunnerProvider()->MainThreadTaskRunner()->PostDelayedTask(
  23. FROM_HERE, base::BindOnce(&LayerTreeView::RequestNewLayerTreeFrameSink,
  24. - weak_factory_.GetWeakPtr()));
  25. + weak_factory_.GetWeakPtr()), base::Milliseconds(10));
  26. }
  27. }