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

Commit 66296b2b authored by Dominik Laskowski's avatar Dominik Laskowski
Browse files

SF: Stop collecting animation FrameStats

[1] deprecated the UiAutomation API, and [2] removed the CTS tests. The
animation flag is on its way out, and the refresh period was inaccurate
anyway.

[1] I35076bb5a3d8445aaa0eab05221cdc228834a6d6
[2] Ia8220d1cfae7b3dbef8a3d42773880ca95c38404

Bug: 185535769
Test: Build
Change-Id: I078a20550beb9296ea31eb3408f6060b421459f5
parent 80c7727f
Loading
Loading
Loading
Loading
+9 −89
Original line number Diff line number Diff line
@@ -1450,18 +1450,6 @@ void SurfaceFlinger::setGameContentType(const sp<IBinder>& displayToken, bool on
    }));
}

status_t SurfaceFlinger::clearAnimationFrameStats() {
    Mutex::Autolock _l(mStateLock);
    mAnimFrameTracker.clearStats();
    return NO_ERROR;
}

status_t SurfaceFlinger::getAnimationFrameStats(FrameStats* outStats) const {
    Mutex::Autolock _l(mStateLock);
    mAnimFrameTracker.getStats(outStats);
    return NO_ERROR;
}

status_t SurfaceFlinger::overrideHdrTypes(const sp<IBinder>& displayToken,
                                          const std::vector<ui::Hdr>& hdrTypes) {
    Mutex::Autolock lock(mStateLock);
@@ -2497,22 +2485,7 @@ void SurfaceFlinger::postComposition() {
        }
    }

    if (mAnimCompositionPending) {
        mAnimCompositionPending = false;

        if (mPreviousPresentFences[0].fenceTime->isValid()) {
            mAnimFrameTracker.setActualPresentFence(mPreviousPresentFences[0].fenceTime);
        } else if (isDisplayConnected) {
            // The HWC doesn't support present fences, so use the refresh
            // timestamp instead.
            const nsecs_t presentTime = display->getRefreshTimestamp();
            mAnimFrameTracker.setActualPresentTime(presentTime);
        }
        mAnimFrameTracker.advanceFrame();
    }

    mTimeStats->incrementTotalFrames();

    mTimeStats->setPresentFenceGlobal(mPreviousPresentFences[0].fenceTime);

    const size_t sfConnections = mScheduler->getEventThreadConnectionCount(mSfConnectionHandle);
@@ -3181,7 +3154,6 @@ void SurfaceFlinger::commitTransactionsLocked(uint32_t transactionFlags) {

    doCommitTransactions();
    signalSynchronousTransactions(CountDownLatch::eSyncTransaction);
    mAnimTransactionPending = false;
}

void SurfaceFlinger::updateInputFlinger() {
@@ -3469,10 +3441,6 @@ void SurfaceFlinger::doCommitTransactions() {
        mLayersPendingRemoval.clear();
    }

    // If this transaction is part of a window animation then the next frame
    // we composite should be considered an animation as well.
    mAnimCompositionPending = mAnimTransactionPending;

    mDrawingState = mCurrentState;
    // clear the "changed" flags in current state
    mCurrentState.colorMatrixChanged = false;
@@ -4217,10 +4185,6 @@ bool SurfaceFlinger::applyTransactionState(const FrameTimelineInfo& frameTimelin
        if (transactionFlags) {
            setTransactionFlags(transactionFlags);
        }

        if (flags & eAnimation) {
            mAnimTransactionPending = true;
        }
    }

    return needsTraversal;
@@ -4772,8 +4736,7 @@ void SurfaceFlinger::onInitializeDisplays() {
                          {}, mPid, getuid(), transactionId);

    setPowerModeInternal(display, hal::PowerMode::ON);
    const nsecs_t vsyncPeriod = display->refreshRateConfigs().getActiveMode()->getVsyncPeriod();
    mAnimFrameTracker.setDisplayRefreshPeriod(vsyncPeriod);

    mActiveDisplayTransformHint = display->getTransformHint();
}

@@ -4985,17 +4948,14 @@ void SurfaceFlinger::listLayersLocked(std::string& result) const {

void SurfaceFlinger::dumpStatsLocked(const DumpArgs& args, std::string& result) const {
    StringAppendF(&result, "%" PRId64 "\n", getVsyncPeriodFromHWC());
    if (args.size() < 2) return;

    if (args.size() > 1) {
    const auto name = String8(args[1]);
    mCurrentState.traverseInZOrder([&](Layer* layer) {
        if (layer->getName() == name.string()) {
            layer->dumpFrameStats(result);
        }
    });
    } else {
        mAnimFrameTracker.dumpStats(result);
    }
}

void SurfaceFlinger::clearStatsLocked(const DumpArgs& args, std::string&) {
@@ -5007,8 +4967,6 @@ void SurfaceFlinger::clearStatsLocked(const DumpArgs& args, std::string&) {
            layer->clearFrameStats();
        }
    });

    mAnimFrameTracker.clearStats();
}

void SurfaceFlinger::dumpTimeStats(const DumpArgs& args, bool asProto, std::string& result) const {
@@ -5020,11 +4978,7 @@ void SurfaceFlinger::dumpFrameTimeline(const DumpArgs& args, std::string& result
}

void SurfaceFlinger::logFrameStats() {
    mDrawingState.traverse([&](Layer* layer) {
        layer->logFrameStats();
    });

    mAnimFrameTracker.logAndResetStats("<win-anim>");
    mDrawingState.traverse([&](Layer* layer) { layer->logFrameStats(); });
}

void SurfaceFlinger::appendSfConfigString(std::string& result) const {
@@ -7517,40 +7471,6 @@ binder::Status SurfaceComposerAIDL::captureLayers(
    return binderStatusFromStatusT(status);
}

binder::Status SurfaceComposerAIDL::clearAnimationFrameStats() {
    status_t status = checkAccessPermission();
    if (status == OK) {
        status = mFlinger->clearAnimationFrameStats();
    }
    return binderStatusFromStatusT(status);
}

binder::Status SurfaceComposerAIDL::getAnimationFrameStats(gui::FrameStats* outStats) {
    status_t status = checkAccessPermission();
    if (status != OK) {
        return binderStatusFromStatusT(status);
    }

    FrameStats stats;
    status = mFlinger->getAnimationFrameStats(&stats);
    if (status == NO_ERROR) {
        outStats->refreshPeriodNano = stats.refreshPeriodNano;
        outStats->desiredPresentTimesNano.reserve(stats.desiredPresentTimesNano.size());
        for (const auto& t : stats.desiredPresentTimesNano) {
            outStats->desiredPresentTimesNano.push_back(t);
        }
        outStats->actualPresentTimesNano.reserve(stats.actualPresentTimesNano.size());
        for (const auto& t : stats.actualPresentTimesNano) {
            outStats->actualPresentTimesNano.push_back(t);
        }
        outStats->frameReadyTimesNano.reserve(stats.frameReadyTimesNano.size());
        for (const auto& t : stats.frameReadyTimesNano) {
            outStats->frameReadyTimesNano.push_back(t);
        }
    }
    return binderStatusFromStatusT(status);
}

binder::Status SurfaceComposerAIDL::overrideHdrTypes(const sp<IBinder>& display,
                                                     const std::vector<int32_t>& hdrTypes) {
    // overrideHdrTypes is used by CTS tests, which acquire the necessary
+12 −10
Original line number Diff line number Diff line
@@ -562,8 +562,6 @@ private:
    void setAutoLowLatencyMode(const sp<IBinder>& displayToken, bool on);
    void setGameContentType(const sp<IBinder>& displayToken, bool on);
    void setPowerMode(const sp<IBinder>& displayToken, int mode);
    status_t clearAnimationFrameStats();
    status_t getAnimationFrameStats(FrameStats* outStats) const;
    status_t overrideHdrTypes(const sp<IBinder>& displayToken,
                              const std::vector<ui::Hdr>& hdrTypes);
    status_t onPullAtom(const int32_t atomId, std::string* pulledData, bool* success);
@@ -1125,7 +1123,6 @@ private:
    State mCurrentState{LayerVector::StateSet::Current};
    std::atomic<int32_t> mTransactionFlags = 0;
    std::vector<std::shared_ptr<CountDownLatch>> mTransactionCommittedSignals;
    bool mAnimTransactionPending = false;
    std::atomic<uint32_t> mUniqueTransactionId = 1;
    SortedVector<sp<Layer>> mLayersPendingRemoval;

@@ -1173,8 +1170,6 @@ private:
    bool mSomeDataspaceChanged = false;
    bool mForceTransactionDisplayChange = false;

    bool mAnimCompositionPending = false;

    // Tracks layers that have pending frames which are candidates for being
    // latched.
    std::unordered_set<sp<Layer>, SpHash<Layer>> mLayersWithQueuedFrames;
@@ -1243,9 +1238,6 @@ private:

    TransactionCallbackInvoker mTransactionCallbackInvoker;

    // Thread-safe.
    FrameTracker mAnimFrameTracker;

    // We maintain a pool of pre-generated texture names to hand out to avoid
    // layer creation needing to run on the main thread (which it would
    // otherwise need to do to access RenderEngine).
@@ -1451,8 +1443,13 @@ public:
    binder::Status captureDisplayById(int64_t, const sp<IScreenCaptureListener>&) override;
    binder::Status captureLayers(const LayerCaptureArgs&,
                                 const sp<IScreenCaptureListener>&) override;
    binder::Status clearAnimationFrameStats() override;
    binder::Status getAnimationFrameStats(gui::FrameStats* outStats) override;

    // TODO(b/239076119): Remove deprecated AIDL.
    [[deprecated]] binder::Status clearAnimationFrameStats() override { return deprecated(); }
    [[deprecated]] binder::Status getAnimationFrameStats(gui::FrameStats*) override {
        return deprecated();
    }

    binder::Status overrideHdrTypes(const sp<IBinder>& display,
                                    const std::vector<int32_t>& hdrTypes) override;
    binder::Status onPullAtom(int32_t atomId, gui::PullAtomData* outPullData) override;
@@ -1517,6 +1514,11 @@ public:
            const sp<gui::IWindowInfosListener>& windowInfosListener) override;

private:
    static binder::Status deprecated() {
        using binder::Status;
        return Status::fromExceptionCode(Status::EX_UNSUPPORTED_OPERATION, "Deprecated");
    }

    static const constexpr bool kUsePermissionCache = true;
    status_t checkAccessPermission(bool usePermissionCache = kUsePermissionCache);
    status_t checkControlDisplayBrightnessPermission();
+0 −1
Original line number Diff line number Diff line
@@ -582,7 +582,6 @@ public:
        mFlinger->setAutoLowLatencyMode(display, mFdp.ConsumeBool());
        mFlinger->setGameContentType(display, mFdp.ConsumeBool());
        mFlinger->setPowerMode(display, mFdp.ConsumeIntegral<int>());
        mFlinger->clearAnimationFrameStats();

        overrideHdrTypes(display, &mFdp);

+0 −5
Original line number Diff line number Diff line
@@ -78,11 +78,6 @@ TEST_F(OnInitializeDisplaysTest, onInitializeDisplaysSetsUpPrimaryDisplay) {
    auto displayDevice = primaryDisplay.mutableDisplayDevice();
    EXPECT_EQ(PowerMode::ON, displayDevice->getPowerMode());

    // The display refresh period should be set in the orientedDisplaySpaceRect tracker.
    FrameStats stats;
    mFlinger.getAnimFrameTracker().getStats(&stats);
    EXPECT_EQ(DEFAULT_VSYNC_PERIOD, stats.refreshPeriodNano);

    // The display transaction needed flag should be set.
    EXPECT_TRUE(hasTransactionFlagSet(eDisplayTransactionNeeded));
}
+0 −1
Original line number Diff line number Diff line
@@ -493,7 +493,6 @@ public:
     * Read-only access to private data to assert post-conditions.
     */

    const auto& getAnimFrameTracker() const { return mFlinger->mAnimFrameTracker; }
    const auto& getHasPoweredOff() const { return mFlinger->mHasPoweredOff; }
    const auto& getVisibleRegionsDirty() const { return mFlinger->mVisibleRegionsDirty; }
    auto& getHwComposer() const {