SurfaceFlinger: Adds the functionality to reduce refresh rate to half of
the default.
Feature added for the low power mode.
Change-Id: I2849e5ea335c0d2509fea1c315392bce7f20451d
Signed-off-by: Ruchi Kandoi <kandoiruchi@google.com>
diff --git a/services/surfaceflinger/DispSync.cpp b/services/surfaceflinger/DispSync.cpp
index 602f20a..a00ccdb 100644
--- a/services/surfaceflinger/DispSync.cpp
+++ b/services/surfaceflinger/DispSync.cpp
@@ -61,7 +61,10 @@
public:
DispSyncThread():
+ mLowPowerMode(false),
mStop(false),
+ mLastVsyncSent(false),
+ mLastBufferFull(false),
mPeriod(0),
mPhase(0),
mWakeupLatency(0) {
@@ -145,7 +148,18 @@
}
if (callbackInvocations.size() > 0) {
- fireCallbackInvocations(callbackInvocations);
+ if (mLowPowerMode) {
+ if (!mLastVsyncSent || !mLastBufferFull) {
+ fireCallbackInvocations(callbackInvocations);
+ mLastVsyncSent = true;
+ } else
+ mLastVsyncSent = false;
+ } else {
+ fireCallbackInvocations(callbackInvocations);
+ }
+ mLastBufferFull = true;
+ } else {
+ mLastBufferFull = false;
}
}
@@ -200,6 +214,7 @@
return !mEventListeners.empty();
}
+ bool mLowPowerMode;
private:
struct EventListener {
@@ -272,6 +287,8 @@
}
bool mStop;
+ bool mLastVsyncSent;
+ bool mLastBufferFull;
nsecs_t mPeriod;
nsecs_t mPhase;
@@ -395,6 +412,10 @@
return mThread->addEventListener(phase, callback);
}
+void DispSync::setLowPowerMode(bool enabled) {
+ mThread->mLowPowerMode = enabled;
+}
+
status_t DispSync::removeEventListener(const sp<Callback>& callback) {
Mutex::Autolock lock(mMutex);
return mThread->removeEventListener(callback);