DescriptionDon't destroy RenderWidgetCompositor during DoDeferredClose
Destroying RenderWidgetCompositor during RenderWidget::DoDeferredClose
can cause problems for nested message loops. The bug is that
InputHandlerProxy creates a SwapPromiseMonitor which adds itself to the
LayerTreeHost. In that stack, a nested message loop is run which runs
the RenderWidget::DoDeferredClose function which previously destroyed
the LayerTreeHost. This explodes, because LayerTreeHost expects all
SwapPromiseMonitors to be removed before it is destroyed.
The reason for DoDeferredClose to destroy the LayerTreeHost is so that
CreateOutputSurface messages (which are posted if creating an output
surface fails) get handled when the gpu channel has already gone away
during shutdown. Destroying it invalidated these messages.
This alternate fix preserves the lifetime of the LayerTreeHost, but adds
a new SetLayerTreeHostClientFinished call to abort any
CreateOutputSurface calls which may be handled during shutdown. This
extra plumbing fixes both problems.
R=jamesr@chromium.org,danakj@chromium.org
BUG=403500
Patch Set 1 #
Total comments: 1
Messages
Total messages: 4 (0 generated)
|