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

Commit a7be94ea authored by Leon Scroggins III's avatar Leon Scroggins III
Browse files

Cleanup Scheduler::initVsync

Oddly, we pass a member of Scheduler to a method on Scheduler. This
method is actually on Scheduler's base class, MessageQueue, which does
not have that member. Rename the method to initVsyncInternal, and add
a new method, Scheduler::initVsync, which passes its member to
MessageQueue::initVsyncInternal. ("Internal" is needed to prevent
shadowing a virtual method.)

No change in logical behavior.

Bug: 266816604
Test: mmma -j frameworks/native/services/surfaceflinger
Change-Id: Ia7fcb9d76638bbce3051d4778defd10bd5c86ad1
parent a9c51987
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ void MessageQueue::vsyncCallback(nsecs_t vsyncTime, nsecs_t targetWakeupTime, ns
    mHandler->dispatchFrame(vsyncId, expectedVsyncTime);
}

void MessageQueue::initVsync(std::shared_ptr<scheduler::VSyncDispatch> dispatch,
void MessageQueue::initVsyncInternal(std::shared_ptr<scheduler::VSyncDispatch> dispatch,
                                     frametimeline::TokenManager& tokenManager,
                                     std::chrono::nanoseconds workDuration) {
    std::unique_ptr<scheduler::VSyncCallbackRegistration> oldRegistration;
@@ -87,7 +87,7 @@ void MessageQueue::initVsync(std::shared_ptr<scheduler::VSyncDispatch> dispatch,
    }

    // See comments in onNewVsyncSchedule. Today, oldRegistration should be
    // empty, but nothing prevents us from calling initVsync multiple times, so
    // empty, but nothing prevents us from calling initVsyncInternal multiple times, so
    // go ahead and destruct it outside the lock for safety.
    oldRegistration.reset();
}
+5 −4
Original line number Diff line number Diff line
@@ -65,7 +65,8 @@ class MessageQueue {
public:
    virtual ~MessageQueue() = default;

    virtual void initVsync(std::shared_ptr<scheduler::VSyncDispatch>, frametimeline::TokenManager&,
    virtual void initVsyncInternal(std::shared_ptr<scheduler::VSyncDispatch>,
                                   frametimeline::TokenManager&,
                                   std::chrono::nanoseconds workDuration) = 0;
    virtual void destroyVsync() = 0;
    virtual void setDuration(std::chrono::nanoseconds workDuration) = 0;
@@ -137,7 +138,7 @@ private:
public:
    explicit MessageQueue(ICompositor&);

    void initVsync(std::shared_ptr<scheduler::VSyncDispatch>, frametimeline::TokenManager&,
    void initVsyncInternal(std::shared_ptr<scheduler::VSyncDispatch>, frametimeline::TokenManager&,
                           std::chrono::nanoseconds workDuration) override;
    void destroyVsync() override;
    void setDuration(std::chrono::nanoseconds workDuration) override;
+5 −0
Original line number Diff line number Diff line
@@ -96,6 +96,11 @@ Scheduler::~Scheduler() {
    demotePacesetterDisplay();
}

void Scheduler::initVsync(frametimeline::TokenManager& tokenManager,
                          std::chrono::nanoseconds workDuration) {
    Impl::initVsyncInternal(getVsyncSchedule()->getDispatch(), tokenManager, workDuration);
}

void Scheduler::startTimers() {
    using namespace sysprop;
    using namespace std::string_literals;
+1 −1
Original line number Diff line number Diff line
@@ -131,7 +131,7 @@ public:

    void run();

    using Impl::initVsync;
    void initVsync(frametimeline::TokenManager&, std::chrono::nanoseconds workDuration);

    using Impl::getScheduledFrameTime;
    using Impl::setDuration;
+1 −2
Original line number Diff line number Diff line
@@ -4334,8 +4334,7 @@ void SurfaceFlinger::initScheduler(const sp<const DisplayDevice>& display) {
                                          /* workDuration */ activeRefreshRate.getPeriod(),
                                          /* readyDuration */ configs.late.sfWorkDuration);

    mScheduler->initVsync(mScheduler->getVsyncSchedule()->getDispatch(),
                          *mFrameTimeline->getTokenManager(), configs.late.sfWorkDuration);
    mScheduler->initVsync(*mFrameTimeline->getTokenManager(), configs.late.sfWorkDuration);

    mRegionSamplingThread =
            sp<RegionSamplingThread>::make(*this,
Loading