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

Commit c6694b4c authored by Jesse Hall's avatar Jesse Hall
Browse files

resolved conflicts for merge of e94d204a to master

Change-Id: Idb2030dbb25a2e4b972492587558b25a305e68bd
parents e276feb8 e94d204a
Loading
Loading
Loading
Loading
+19 −6
Original line number Diff line number Diff line
@@ -147,6 +147,7 @@ SurfaceFlinger::SurfaceFlinger()
        mLastTransactionTime(0),
        mBootFinished(false),
        mPrimaryHWVsyncEnabled(false),
        mHWVsyncAvailable(false),
        mDaltonize(false),
        mHasColorMatrix(false)
{
@@ -753,16 +754,23 @@ void SurfaceFlinger::run() {

void SurfaceFlinger::enableHardwareVsync() {
    Mutex::Autolock _l(mHWVsyncLock);
    if (!mPrimaryHWVsyncEnabled) {
    if (!mPrimaryHWVsyncEnabled && mHWVsyncAvailable) {
        mPrimaryDispSync.beginResync();
        eventControl(HWC_DISPLAY_PRIMARY, SurfaceFlinger::EVENT_VSYNC, true);
        mPrimaryHWVsyncEnabled = true;
    }
}

void SurfaceFlinger::resyncToHardwareVsync() {
void SurfaceFlinger::resyncToHardwareVsync(bool makeAvailable) {
    Mutex::Autolock _l(mHWVsyncLock);

    if (makeAvailable) {
        mHWVsyncAvailable = true;
    } else if (!mHWVsyncAvailable) {
        ALOGE("resyncToHardwareVsync called when HW vsync unavailable");
        return;
    }

    const nsecs_t period =
            getHwComposer().getRefreshPeriod(HWC_DISPLAY_PRIMARY);

@@ -776,13 +784,16 @@ void SurfaceFlinger::resyncToHardwareVsync() {
    }
}

void SurfaceFlinger::disableHardwareVsync() {
void SurfaceFlinger::disableHardwareVsync(bool makeUnavailable) {
    Mutex::Autolock _l(mHWVsyncLock);
    if (mPrimaryHWVsyncEnabled) {
        eventControl(HWC_DISPLAY_PRIMARY, SurfaceFlinger::EVENT_VSYNC, false);
        mPrimaryDispSync.endResync();
        mPrimaryHWVsyncEnabled = false;
    }
    if (makeUnavailable) {
        mHWVsyncAvailable = false;
    }
}

void SurfaceFlinger::onVSyncReceived(int type, nsecs_t timestamp) {
@@ -792,7 +803,7 @@ void SurfaceFlinger::onVSyncReceived(int type, nsecs_t timestamp) {
        if (needsHwVsync) {
            enableHardwareVsync();
        } else {
            disableHardwareVsync();
            disableHardwareVsync(false);
        }
    }
}
@@ -934,7 +945,7 @@ void SurfaceFlinger::postComposition()
        if (mPrimaryDispSync.addPresentFence(presentFence)) {
            enableHardwareVsync();
        } else {
            disableHardwareVsync();
            disableHardwareVsync(false);
        }
    }

@@ -2183,7 +2194,7 @@ void SurfaceFlinger::onScreenAcquired(const sp<const DisplayDevice>& hw) {
            // FIXME: eventthread only knows about the main display right now
            mEventThread->onScreenAcquired();

            resyncToHardwareVsync();
            resyncToHardwareVsync(true);
        }
    }
    mVisibleRegionsDirty = true;
@@ -2201,6 +2212,8 @@ void SurfaceFlinger::onScreenReleased(const sp<const DisplayDevice>& hw) {
    int32_t type = hw->getDisplayType();
    if (type < DisplayDevice::NUM_BUILTIN_DISPLAY_TYPES) {
        if (type == DisplayDevice::DISPLAY_PRIMARY) {
            disableHardwareVsync(true); // also cancels any in-progress resync

            // FIXME: eventthread only knows about the main display right now
            mEventThread->onScreenReleased();
        }
+3 −2
Original line number Diff line number Diff line
@@ -384,8 +384,8 @@ private:
     * VSync
     */
     void enableHardwareVsync();
     void disableHardwareVsync();
     void resyncToHardwareVsync();
     void disableHardwareVsync(bool makeUnavailable);
     void resyncToHardwareVsync(bool makeAvailable);

    /* ------------------------------------------------------------------------
     * Debugging & dumpsys
@@ -468,6 +468,7 @@ private:
    // protected by mHWVsyncLock
    Mutex mHWVsyncLock;
    bool mPrimaryHWVsyncEnabled;
    bool mHWVsyncAvailable;

    /* ------------------------------------------------------------------------
     * Feature prototyping