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

Commit 7ecce8c6 authored by Ana Krulec's avatar Ana Krulec
Browse files

SF: Move TransactionStart from VsyncModulator to Scheduler

This is part of go/surface-flinger-scheduler.

Test: SF tests pass.
Change-Id: I45872aeb67603e15f1d5080d0b9440bc986579e4
parent 8dec3913
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -29,6 +29,9 @@ namespace android {

class Scheduler {
public:
    // Enum to indicate whether to start the transaction early, or at vsync time.
    enum class TransactionStart { EARLY, NORMAL };

    /* The scheduler handle is a BBinder object passed to the client from which we can extract
     * an ID for subsequent operations.
     */
+10 −9
Original line number Diff line number Diff line
@@ -39,8 +39,6 @@ public:
        nsecs_t app;
    };

    enum TransactionStart { EARLY, NORMAL };

    // Sets the phase offsets
    //
    // sfEarly: The phase offset when waking up SF early, which happens when marking a transaction
@@ -75,13 +73,14 @@ public:
        mSfConnectionHandle = sfConnectionHandle;
    }

    void setTransactionStart(TransactionStart transactionStart) {
        if (transactionStart == TransactionStart::EARLY) {
    void setTransactionStart(Scheduler::TransactionStart transactionStart) {
        if (transactionStart == Scheduler::TransactionStart::EARLY) {
            mRemainingEarlyFrameCount = MIN_EARLY_FRAME_COUNT;
        }

        // An early transaction stays an early transaction.
        if (transactionStart == mTransactionStart || mTransactionStart == TransactionStart::EARLY) {
        if (transactionStart == mTransactionStart ||
            mTransactionStart == Scheduler::TransactionStart::EARLY) {
            return;
        }
        mTransactionStart = transactionStart;
@@ -89,8 +88,8 @@ public:
    }

    void onTransactionHandled() {
        if (mTransactionStart == TransactionStart::NORMAL) return;
        mTransactionStart = TransactionStart::NORMAL;
        if (mTransactionStart == Scheduler::TransactionStart::NORMAL) return;
        mTransactionStart = Scheduler::TransactionStart::NORMAL;
        updateOffsets();
    }

@@ -138,7 +137,8 @@ private:
    }

    Offsets getOffsets() {
        if (mTransactionStart == TransactionStart::EARLY || mRemainingEarlyFrameCount > 0) {
        if (mTransactionStart == Scheduler::TransactionStart::EARLY ||
            mRemainingEarlyFrameCount > 0) {
            return mEarlyOffsets;
        } else if (mLastFrameUsedRenderEngine) {
            return mEarlyGlOffsets;
@@ -160,7 +160,8 @@ private:

    std::atomic<Offsets> mOffsets;

    std::atomic<TransactionStart> mTransactionStart = TransactionStart::NORMAL;
    std::atomic<Scheduler::TransactionStart> mTransactionStart =
            Scheduler::TransactionStart::NORMAL;
    std::atomic<bool> mLastFrameUsedRenderEngine = false;
    std::atomic<int> mRemainingEarlyFrameCount = 0;
};
+4 −5
Original line number Diff line number Diff line
@@ -3372,11 +3372,11 @@ uint32_t SurfaceFlinger::getTransactionFlags(uint32_t flags) {
}

uint32_t SurfaceFlinger::setTransactionFlags(uint32_t flags) {
    return setTransactionFlags(flags, VSyncModulator::TransactionStart::NORMAL);
    return setTransactionFlags(flags, Scheduler::TransactionStart::NORMAL);
}

uint32_t SurfaceFlinger::setTransactionFlags(uint32_t flags,
        VSyncModulator::TransactionStart transactionStart) {
                                             Scheduler::TransactionStart transactionStart) {
    uint32_t old = mTransactionFlags.fetch_or(flags);
    mVsyncModulator.setTransactionStart(transactionStart);
    if ((old & flags)==0) { // wake the server up
@@ -3467,9 +3467,8 @@ void SurfaceFlinger::setTransactionState(
        }

        // this triggers the transaction
        const auto start = (flags & eEarlyWakeup)
                ? VSyncModulator::TransactionStart::EARLY
                : VSyncModulator::TransactionStart::NORMAL;
        const auto start = (flags & eEarlyWakeup) ? Scheduler::TransactionStart::EARLY
                                                  : Scheduler::TransactionStart::NORMAL;
        setTransactionFlags(transactionFlags, start);

        // if this is a synchronous transaction, wait for it to take effect
+1 −1
Original line number Diff line number Diff line
@@ -523,7 +523,7 @@ private:
    uint32_t peekTransactionFlags();
    // Can only be called from the main thread or with mStateLock held
    uint32_t setTransactionFlags(uint32_t flags);
    uint32_t setTransactionFlags(uint32_t flags, VSyncModulator::TransactionStart transactionStart);
    uint32_t setTransactionFlags(uint32_t flags, Scheduler::TransactionStart transactionStart);
    void commitTransaction();
    bool containsAnyInvalidClientState(const Vector<ComposerState>& states);
    uint32_t setClientStateLocked(const ComposerState& composerState);