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>
This commit is contained in:
parent
5d112a7dd6
commit
f52b3c88f1
@ -61,7 +61,10 @@ class DispSyncThread: public Thread {
|
||||
public:
|
||||
|
||||
DispSyncThread():
|
||||
mLowPowerMode(false),
|
||||
mStop(false),
|
||||
mLastVsyncSent(false),
|
||||
mLastBufferFull(false),
|
||||
mPeriod(0),
|
||||
mPhase(0),
|
||||
mWakeupLatency(0) {
|
||||
@ -145,7 +148,18 @@ public:
|
||||
}
|
||||
|
||||
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 @@ public:
|
||||
return !mEventListeners.empty();
|
||||
}
|
||||
|
||||
bool mLowPowerMode;
|
||||
private:
|
||||
|
||||
struct EventListener {
|
||||
@ -272,6 +287,8 @@ private:
|
||||
}
|
||||
|
||||
bool mStop;
|
||||
bool mLastVsyncSent;
|
||||
bool mLastBufferFull;
|
||||
|
||||
nsecs_t mPeriod;
|
||||
nsecs_t mPhase;
|
||||
@ -395,6 +412,10 @@ status_t DispSync::addEventListener(nsecs_t phase,
|
||||
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);
|
||||
|
@ -88,6 +88,9 @@ public:
|
||||
// turned on. It should NOT be used after that.
|
||||
void setPeriod(nsecs_t period);
|
||||
|
||||
// Setting the low power mode reduces the frame rate to half of the default
|
||||
void setLowPowerMode(bool enabled);
|
||||
|
||||
// addEventListener registers a callback to be called repeatedly at the
|
||||
// given phase offset from the hardware vsync events. The callback is
|
||||
// called from a separate thread and it should return reasonably quickly
|
||||
|
@ -2643,6 +2643,16 @@ status_t SurfaceFlinger::onTransact(
|
||||
repaintEverything();
|
||||
return NO_ERROR;
|
||||
}
|
||||
// This is an experimental interface
|
||||
// Needs to be shifted to proper binder interface when we productize
|
||||
case 1016: {
|
||||
mPrimaryDispSync.setLowPowerMode(true);
|
||||
return NO_ERROR;
|
||||
}
|
||||
case 1017: {
|
||||
mPrimaryDispSync.setLowPowerMode(false);
|
||||
return NO_ERROR;
|
||||
}
|
||||
}
|
||||
}
|
||||
return err;
|
||||
|
Loading…
Reference in New Issue
Block a user