Force buffer re-allocation when the backing display changes
commit5bfd1d7ea19dae7cca921afa01cb0913d99514c0
authordnicoara <dnicoara@chromium.org>
Wed, 9 Sep 2015 15:15:01 +0000 (9 08:15 -0700)
committerCommit bot <commit-bot@chromium.org>
Wed, 9 Sep 2015 15:15:33 +0000 (9 15:15 +0000)
treecd1702447f26aacc4fe9dd37440ef7016986b175
parent55e6026b5e2016626cf3abf126e55e421e0aa2b2
Force buffer re-allocation when the backing display changes

When the user changes the primary display and both displays have the
same resolution, the buffers are never re-allocated. It is then possible
to encounter the following scenario:

Surface 1 scans out on display A and surface 2 scans out on display B.
When surface 1 moves to display B and surface 2 to display A there is no
guarantee that either surface will force re-draws. If, say, surface 1
starts page flipping it is possible that it would start re-using the
buffer currently shown on display A which could cause the GPU process to
wait for display A to release the buffer. At this point the GPU main
thread is blocked waiting without a possibility to progress since
surface 2 cannot use the GPU to update. Eventually the watchdog kills
the GPU process which causes the surfaces to be reallocated and progress
to continue.

BUG=511446

Review URL: https://codereview.chromium.org/1334483002

Cr-Commit-Position: refs/heads/master@{#347933}
ui/ozone/platform/drm/gpu/drm_surface.cc
ui/ozone/platform/drm/gpu/drm_surface_unittest.cc
ui/ozone/platform/drm/gpu/drm_window.cc
ui/ozone/platform/drm/gpu/drm_window.h