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

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

Merge "SF: VSyncReactor add timestamp querying functions"

parents 28d8c7db 2fd3ceaf
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -21,10 +21,24 @@

namespace android::scheduler {

class Clock {
public:
    virtual ~Clock();
    /*
     * Returns the SYSTEM_TIME_MONOTONIC, used by testing infra to stub time.
     */
    virtual nsecs_t now() const = 0;

protected:
    Clock() = default;
    Clock(Clock const&) = delete;
    Clock& operator=(Clock const&) = delete;
};

/*
 * TimeKeeper is the interface for a single-shot timer primitive.
 */
class TimeKeeper {
class TimeKeeper : public Clock {
public:
    virtual ~TimeKeeper();

@@ -39,11 +53,6 @@ public:
     */
    virtual void alarmCancel() = 0;

    /*
     * Returns the SYSTEM_TIME_MONOTONIC, used by testing infra to stub time.
     */
    virtual nsecs_t now() const = 0;

protected:
    TimeKeeper(TimeKeeper const&) = delete;
    TimeKeeper& operator=(TimeKeeper const&) = delete;
+5 −0
Original line number Diff line number Diff line
@@ -54,6 +54,11 @@ bool VSyncPredictor::validate(nsecs_t timestamp) const {
    return percent < kOutlierTolerancePercent || percent > (kMaxPercent - kOutlierTolerancePercent);
}

nsecs_t VSyncPredictor::currentPeriod() const {
    std::lock_guard<std::mutex> lk(mMutex);
    return std::get<0>(mRateMap.find(mIdealPeriod)->second);
}

void VSyncPredictor::addVsyncTimestamp(nsecs_t timestamp) {
    std::lock_guard<std::mutex> lk(mMutex);

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

    void addVsyncTimestamp(nsecs_t timestamp) final;
    nsecs_t nextAnticipatedVSyncTimeFrom(nsecs_t timePoint) const final;
    nsecs_t currentPeriod() const final;

    /*
     * Inform the model that the period is anticipated to change to a new value.
+16 −2
Original line number Diff line number Diff line
@@ -15,14 +15,18 @@
 */

#include "VSyncReactor.h"
#include "TimeKeeper.h"
#include "VSyncDispatch.h"
#include "VSyncTracker.h"

namespace android::scheduler {

VSyncReactor::VSyncReactor(std::unique_ptr<VSyncDispatch> dispatch,
Clock::~Clock() = default;

VSyncReactor::VSyncReactor(std::unique_ptr<Clock> clock, std::unique_ptr<VSyncDispatch> dispatch,
                           std::unique_ptr<VSyncTracker> tracker, size_t pendingFenceLimit)
      : mDispatch(std::move(dispatch)),
      : mClock(std::move(clock)),
        mDispatch(std::move(dispatch)),
        mTracker(std::move(tracker)),
        mPendingLimit(pendingFenceLimit) {}

@@ -73,4 +77,14 @@ void VSyncReactor::setIgnorePresentFences(bool ignoration) {
    }
}

nsecs_t VSyncReactor::computeNextRefresh(int periodOffset) const {
    auto const now = mClock->now();
    auto const currentPeriod = periodOffset ? mTracker->currentPeriod() : 0;
    return mTracker->nextAnticipatedVSyncTimeFrom(now + periodOffset * currentPeriod);
}

nsecs_t VSyncReactor::expectedPresentTime() {
    return mTracker->nextAnticipatedVSyncTimeFrom(mClock->now());
}

} // namespace android::scheduler
+7 −2
Original line number Diff line number Diff line
@@ -24,19 +24,24 @@

namespace android::scheduler {

class Clock;
class VSyncDispatch;
class VSyncTracker;

// TODO (b/145217110): consider renaming.
class VSyncReactor /* TODO (b/140201379): : public android::DispSync */ {
public:
    VSyncReactor(std::unique_ptr<VSyncDispatch> dispatch, std::unique_ptr<VSyncTracker> tracker,
                 size_t pendingFenceLimit);
    VSyncReactor(std::unique_ptr<Clock> clock, std::unique_ptr<VSyncDispatch> dispatch,
                 std::unique_ptr<VSyncTracker> tracker, size_t pendingFenceLimit);

    bool addPresentFence(const std::shared_ptr<FenceTime>& fence);
    void setIgnorePresentFences(bool ignoration);

    nsecs_t computeNextRefresh(int periodOffset) const;
    nsecs_t expectedPresentTime();

private:
    std::unique_ptr<Clock> const mClock;
    std::unique_ptr<VSyncDispatch> const mDispatch;
    std::unique_ptr<VSyncTracker> const mTracker;
    size_t const mPendingLimit;
Loading