Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f52b3c88 authored by Ruchi Kandoi's avatar Ruchi Kandoi
Browse files

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: default avatarRuchi Kandoi <kandoiruchi@google.com>
parent 5d112a7d
Loading
Loading
Loading
Loading
+22 −1
Original line number Diff line number Diff line
@@ -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) {
                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);
+3 −0
Original line number Diff line number Diff line
@@ -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
+10 −0
Original line number Diff line number Diff line
@@ -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;