Loading services/surfaceflinger/Scheduler/TimeKeeper.h +15 −6 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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; Loading services/surfaceflinger/Scheduler/VSyncPredictor.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -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); Loading services/surfaceflinger/Scheduler/VSyncPredictor.h +1 −0 Original line number Diff line number Diff line Loading @@ -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. Loading services/surfaceflinger/Scheduler/VSyncReactor.cpp +16 −2 Original line number Diff line number Diff line Loading @@ -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) {} Loading Loading @@ -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 services/surfaceflinger/Scheduler/VSyncReactor.h +7 −2 Original line number Diff line number Diff line Loading @@ -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 Loading
services/surfaceflinger/Scheduler/TimeKeeper.h +15 −6 Original line number Diff line number Diff line Loading @@ -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(); Loading @@ -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; Loading
services/surfaceflinger/Scheduler/VSyncPredictor.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -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); Loading
services/surfaceflinger/Scheduler/VSyncPredictor.h +1 −0 Original line number Diff line number Diff line Loading @@ -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. Loading
services/surfaceflinger/Scheduler/VSyncReactor.cpp +16 −2 Original line number Diff line number Diff line Loading @@ -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) {} Loading Loading @@ -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
services/surfaceflinger/Scheduler/VSyncReactor.h +7 −2 Original line number Diff line number Diff line Loading @@ -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