Fixes vsync behavior in power mode transitions.

Calling EventThread::onScreenAcquired enables hardware vsync and
calling EventThread::onScreenReleased disables hardware vsync.

The power modes 'NORMAL' and 'DOZE' should have hardware vsync
enabled while power modes 'OFF' and 'DOZE_SUSPEND' should have
hardware vsync disabled.

This change correctly handles the transitions from 'OFF' to
'DOZE_SUSPEND' and from either 'OFF' or 'DOZE_SUSPEND' to
'NORMAL'. Previously these cases were handled incorrectly.

Note that redundant calls to onScreenAcquired or onScreenReleased
are safe.

Fixes bug: 38232221

Change-Id: I7b00f97a67b157366364b3d26fe94533da07c263
(cherry picked from commit 4de4ee3cb3ccb3bcf4ea507f7bd6e02ab29aeb75)
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 32fdc35..12afdf7 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -3186,7 +3186,8 @@
     if (currentMode == HWC_POWER_MODE_OFF) {
         // Turn on the display
         getHwComposer().setPowerMode(type, mode);
-        if (type == DisplayDevice::DISPLAY_PRIMARY) {
+        if (type == DisplayDevice::DISPLAY_PRIMARY &&
+            mode != HWC_POWER_MODE_DOZE_SUSPEND) {
             // FIXME: eventthread only knows about the main display right now
             mEventThread->onScreenAcquired();
             resyncToHardwareVsync(true);
@@ -3218,7 +3219,8 @@
         getHwComposer().setPowerMode(type, mode);
         mVisibleRegionsDirty = true;
         // from this point on, SF will stop drawing on this display
-    } else if (mode == HWC_POWER_MODE_DOZE) {
+    } else if (mode == HWC_POWER_MODE_DOZE ||
+               mode == HWC_POWER_MODE_NORMAL) {
         // Update display while dozing
         getHwComposer().setPowerMode(type, mode);
         if (type == DisplayDevice::DISPLAY_PRIMARY) {
@@ -3235,6 +3237,7 @@
         }
         getHwComposer().setPowerMode(type, mode);
     } else {
+        ALOGE("Attempting to set unknown power mode: %d\n", mode);
         getHwComposer().setPowerMode(type, mode);
     }
 }