Hold Display suspend blocker until doze starts

When transitioning to DOZE, there is a race condition between the
release of the display suspend blocker and calling startDream. This
creates a gap where the device can suspend before the dream actually
starts.  In practice, this can cause gestures, which are nitialized
from the Dream Service, to not function until something else
temporarily wakes up the device enough for the CPU to run a few
cycles.

This change delays the release of the display suspend blocker if
there is a pending recalculation of the sleep/doze state.

Bug: 138828701
Test: Manual testing - was 1 in 5 chance of reproing.  Tested up to
0 out of 50 after the fix.
Test: atest PowerManagerServiceTest

Change-Id: Ic6df469972dc5765a8c4507404d1dc33f13ec0c3
1 file changed