summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc')
-rw-r--r--chromium/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc16
1 files changed, 14 insertions, 2 deletions
diff --git a/chromium/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc b/chromium/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc
index ed4af1277ae..cfb36087beb 100644
--- a/chromium/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc
+++ b/chromium/third_party/blink/renderer/platform/widget/compositing/layer_tree_view.cc
@@ -153,6 +153,7 @@ void LayerTreeView::SetLayerTreeFrameSink(
layer_tree_host_->SetRenderFrameObserver(
std::move(render_frame_metadata_observer));
}
+ layer_tree_frame_sink_init_failures = 0;
layer_tree_host_->SetLayerTreeFrameSink(std::move(layer_tree_frame_sink));
}
@@ -270,9 +271,20 @@ void LayerTreeView::DidFailToInitializeLayerTreeFrameSink() {
return;
}
layer_tree_frame_sink_request_failed_while_invisible_ = false;
- layer_tree_host_->GetTaskRunnerProvider()->MainThreadTaskRunner()->PostTask(
+
+ // Guard against infinite loop of trying to request a new sink, and constantly failing,
+ // and trying again, when the child's main process was killed / crashed. This allows the
+ // orhpan render processes to quit gracefully, isntead of spinning the CPU forever.
+ ++layer_tree_frame_sink_init_failures;
+ if (layer_tree_frame_sink_init_failures > 10) {
+ DCHECK(false); // should not really happen, better to crash then stay forver.
+ return;
+ }
+
+ //in case of dead gpu channel there no chance to recover without some delay
+ layer_tree_host_->GetTaskRunnerProvider()->MainThreadTaskRunner()->PostDelayedTask(
FROM_HERE, base::BindOnce(&LayerTreeView::RequestNewLayerTreeFrameSink,
- weak_factory_.GetWeakPtr()));
+ weak_factory_.GetWeakPtr()), base::Milliseconds(10));
}
void LayerTreeView::WillCommit(const cc::CommitState&) {