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

Commit c12c20a3 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "SurfaceFlinger: no app vsyncs during config switch"

parents 685d7a3c b838aed4
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -85,7 +85,19 @@ void DispSyncSource::setPhaseOffset(nsecs_t phaseOffset) {
    }
}

void DispSyncSource::pauseVsyncCallback(bool pause) {
    std::lock_guard lock(mVsyncMutex);
    mCallbackPaused = pause;
}

void DispSyncSource::onDispSyncEvent(nsecs_t when) {
    {
        std::lock_guard lock(mVsyncMutex);
        if (mCallbackPaused) {
            return;
        }
    }

    VSyncSource::Callback* callback;
    {
        std::lock_guard lock(mCallbackMutex);
+2 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ public:
    void setVSyncEnabled(bool enable) override;
    void setCallback(VSyncSource::Callback* callback) override;
    void setPhaseOffset(nsecs_t phaseOffset) override;
    void pauseVsyncCallback(bool pause) override;

private:
    // The following method is the implementation of the DispSync::Callback.
@@ -53,6 +54,7 @@ private:
    std::mutex mVsyncMutex;
    nsecs_t mPhaseOffset GUARDED_BY(mVsyncMutex);
    bool mEnabled GUARDED_BY(mVsyncMutex) = false;
    bool mCallbackPaused GUARDED_BY(mVsyncMutex) = false;
};

} // namespace android
 No newline at end of file
+6 −0
Original line number Diff line number Diff line
@@ -203,6 +203,12 @@ void EventThread::setPhaseOffset(nsecs_t phaseOffset) {
    mVSyncSource->setPhaseOffset(phaseOffset);
}

void EventThread::pauseVsyncCallback(bool pause) {
    std::lock_guard<std::mutex> lock(mMutex);
    ATRACE_INT("vsyncPaused", pause);
    mVSyncSource->pauseVsyncCallback(pause);
}

sp<EventThreadConnection> EventThread::createEventConnection(
        ResyncCallback resyncCallback, ResetIdleTimerCallback resetIdleTimerCallback) const {
    return new EventThreadConnection(const_cast<EventThread*>(this), std::move(resyncCallback),
+7 −0
Original line number Diff line number Diff line
@@ -66,6 +66,9 @@ public:
    virtual void setVSyncEnabled(bool enable) = 0;
    virtual void setCallback(Callback* callback) = 0;
    virtual void setPhaseOffset(nsecs_t phaseOffset) = 0;

    // pause/resume vsync callback generation
    virtual void pauseVsyncCallback(bool pause) = 0;
};

class EventThreadConnection : public BnDisplayEventConnection {
@@ -119,6 +122,8 @@ public:
    // Requests the next vsync. If resetIdleTimer is set to true, it resets the idle timer.
    virtual void requestNextVsync(const sp<EventThreadConnection>& connection,
                                  bool resetIdleTimer) = 0;

    virtual void pauseVsyncCallback(bool pause) = 0;
};

namespace impl {
@@ -152,6 +157,8 @@ public:

    void setPhaseOffset(nsecs_t phaseOffset) override;

    void pauseVsyncCallback(bool pause) override;

private:
    friend EventThreadTest;

+1 −0
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@ public:

    void setVSyncEnabled(bool) override {}
    void setPhaseOffset(nsecs_t) override {}
    void pauseVsyncCallback(bool) {}

private:
    std::mutex mCallbackMutex;
Loading