Handle GPU crash for OOPIFs with OOP-D. |
|||
Issue descriptionWith OOP-D enabled when the GPU process crashes all surfaces are destroyed (since they're in the GPU process). DelegatedFrameHost::OnLostResources() gets called when the GPU crashes and clears the fallback SurfaceId on the renderer SurfaceLayer. This allows surface sync to kick in and wait for the renderer to submit a new CompositorFrame. We want the same behaviour for OOPIF SurfaceLayers in the renderer process. +fsamuel for triage
,
Jul 19
I actually don't believe resetting fallback SurfaceId in the browser process do much other than avoiding missing surface errors. If the primary is not in activation dependencies it won't trigger surface sync.
,
Jul 19
Yea, we can also just skip the error in SurfaceAggregator...
,
Jul 20
,
Jul 25
I'm just going to get rid of the error case in SurfaceAggregator.
,
Jul 25
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/aec1f1576ed70cbdb40837814b6cf9c09e1f5bd0 commit aec1f1576ed70cbdb40837814b6cf9c09e1f5bd0 Author: Fady Samuel <fsamuel@chromium.org> Date: Wed Jul 25 21:05:11 2018 SurfaceAggregator: Remove Missing Surfaces report With OOP-D, after a Viz process crash, clients will start resubmitting CompositorFrames in no paritcular order and some references may not yet exist at aggregation time. In that transient period, we shouldn't spew errors to console or to UMA because this is an expected transient period. This CL simply removes that error state. In the absence of a fallback surface, we use the default background color of the SurfaceDrawQuad to fill in the surface's area. Bug: 865597 Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel Change-Id: I45d10c9a1880ea9df04dd7a95ef76048abc4a830 Reviewed-on: https://chromium-review.googlesource.com/1150574 Reviewed-by: Alexei Svitkine <asvitkine@chromium.org> Reviewed-by: Saman Sami <samans@chromium.org> Commit-Queue: Fady Samuel <fsamuel@chromium.org> Cr-Commit-Position: refs/heads/master@{#578060} [modify] https://crrev.com/aec1f1576ed70cbdb40837814b6cf9c09e1f5bd0/components/viz/service/display/surface_aggregator.cc [modify] https://crrev.com/aec1f1576ed70cbdb40837814b6cf9c09e1f5bd0/components/viz/service/display/surface_aggregator.h [modify] https://crrev.com/aec1f1576ed70cbdb40837814b6cf9c09e1f5bd0/tools/metrics/histograms/histograms.xml
,
Jul 26
FYI this is still broken. It's no longer reporting missing surfaces but the OOPIFs don't necessarily show up until something else (eg. mouse move) triggers a new DrawAndSwap(). My guess is this is because the renderer surface can't add a reference to a OOPIF surface that doesn't exist. The renderer doesn't need to submit another CF because nothing changes when it gets the OnFirstSurfaceActivation() message for the OOPIF surface, so nothing changes and nothing triggers the next DrawAndSwap().
,
Aug 13
Saman fixed this in another bug so I'm marking as FIXED. |
|||
►
Sign in to add a comment |
|||
Comment 1 by samans@chromium.org
, Jul 19