SurfaceFlinger: HWVsync when display is off
HWC expects that HWVsync will not be turned on if display if off.
To ensure that we move enabling/disabling of HWVsync to the main thread
and caching the latest request in case the display is off. When the
display is turned on again we apply the latest state of HWVsync.
Bug: 134050982
Test: Toggle screen on/off in a loop
Change-Id: Ib87f885f95195b8bb402d5a5b2c75f20e213d2aa
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index ddfe88c..02ee46a 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -293,6 +293,9 @@
// TODO: this should be made accessible only to EventThread
void setPrimaryVsyncEnabled(bool enabled);
+ // main thread function to enable/disable h/w composer event
+ void setPrimaryVsyncEnabledInternal(bool enabled);
+
// called on the main thread by MessageQueue when an internal message
// is received
// TODO: this should be made accessible only to MessageQueue
@@ -1166,6 +1169,9 @@
// The Layer pointer is removed from the set when the destructor is called so there shouldn't
// be any issues with a raw pointer referencing an invalid object.
std::unordered_set<Layer*> mOffscreenLayers;
+
+ // Flag to indicate whether to re-enable HWVsync when screen is on
+ bool mEnableHWVsyncScreenOn = false;
};
} // namespace android