Loading services/surfaceflinger/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -125,6 +125,7 @@ filegroup { "Scheduler/EventControlThread.cpp", "Scheduler/EventThread.cpp", "Scheduler/MessageQueue.cpp", "Scheduler/Scheduler.cpp", "StartPropertySetThread.cpp", "SurfaceFlinger.cpp", "SurfaceInterceptor.cpp", Loading services/surfaceflinger/Scheduler/EventThread.cpp +16 −0 Original line number Diff line number Diff line Loading @@ -45,11 +45,27 @@ EventThread::~EventThread() = default; namespace impl { EventThread::EventThread(std::unique_ptr<VSyncSource> src, ResyncWithRateLimitCallback resyncWithRateLimitCallback, InterceptVSyncsCallback interceptVSyncsCallback, const char* threadName) : EventThread(nullptr, std::move(src), resyncWithRateLimitCallback, interceptVSyncsCallback, threadName) {} EventThread::EventThread(VSyncSource* src, ResyncWithRateLimitCallback resyncWithRateLimitCallback, InterceptVSyncsCallback interceptVSyncsCallback, const char* threadName) : EventThread(src, nullptr, resyncWithRateLimitCallback, interceptVSyncsCallback, threadName) {} EventThread::EventThread(VSyncSource* src, std::unique_ptr<VSyncSource> uniqueSrc, ResyncWithRateLimitCallback resyncWithRateLimitCallback, InterceptVSyncsCallback interceptVSyncsCallback, const char* threadName) : mVSyncSource(src), mVSyncSourceUnique(std::move(uniqueSrc)), mResyncWithRateLimitCallback(resyncWithRateLimitCallback), mInterceptVSyncsCallback(interceptVSyncsCallback) { if (src == nullptr) { mVSyncSource = mVSyncSourceUnique.get(); } for (auto& event : mVSyncEvent) { event.header.type = DisplayEventReceiver::DISPLAY_EVENT_VSYNC; event.header.id = 0; Loading services/surfaceflinger/Scheduler/EventThread.h +12 −1 Original line number Diff line number Diff line Loading @@ -108,8 +108,12 @@ public: using ResyncWithRateLimitCallback = std::function<void()>; using InterceptVSyncsCallback = std::function<void(nsecs_t)>; // TODO(b/113612090): Once the Scheduler is complete this constructor will become obsolete. EventThread(VSyncSource* src, ResyncWithRateLimitCallback resyncWithRateLimitCallback, InterceptVSyncsCallback interceptVSyncsCallback, const char* threadName); EventThread(std::unique_ptr<VSyncSource> src, ResyncWithRateLimitCallback resyncWithRateLimitCallback, InterceptVSyncsCallback interceptVSyncsCallback, const char* threadName); ~EventThread(); sp<BnDisplayEventConnection> createEventConnection() const override; Loading @@ -134,6 +138,11 @@ public: private: friend EventThreadTest; // TODO(b/113612090): Once the Scheduler is complete this constructor will become obsolete. EventThread(VSyncSource* src, std::unique_ptr<VSyncSource> uniqueSrc, ResyncWithRateLimitCallback resyncWithRateLimitCallback, InterceptVSyncsCallback interceptVSyncsCallback, const char* threadName); void threadMain(); Vector<sp<EventThread::Connection>> waitForEventLocked(std::unique_lock<std::mutex>* lock, DisplayEventReceiver::Event* event) Loading @@ -146,8 +155,10 @@ private: // Implements VSyncSource::Callback void onVSyncEvent(nsecs_t timestamp) override; // TODO(b/113612090): Once the Scheduler is complete this pointer will become obsolete. VSyncSource* mVSyncSource GUARDED_BY(mMutex) = nullptr; std::unique_ptr<VSyncSource> mVSyncSourceUnique GUARDED_BY(mMutex) = nullptr; // constants VSyncSource* const mVSyncSource GUARDED_BY(mMutex) = nullptr; const ResyncWithRateLimitCallback mResyncWithRateLimitCallback; const InterceptVSyncsCallback mInterceptVSyncsCallback; Loading services/surfaceflinger/Scheduler/MessageQueue.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -101,6 +101,17 @@ void MessageQueue::setEventThread(android::EventThread* eventThread) { this); } void MessageQueue::setEventConnection(const sp<BnDisplayEventConnection>& connection) { if (mEventTube.getFd() >= 0) { mLooper->removeFd(mEventTube.getFd()); } mEvents = connection; mEvents->stealReceiveChannel(&mEventTube); mLooper->addFd(mEventTube.getFd(), 0, Looper::EVENT_INPUT, MessageQueue::cb_eventReceiver, this); } void MessageQueue::waitMessage() { do { IPCThreadState::self()->flushCommands(); Loading services/surfaceflinger/Scheduler/MessageQueue.h +3 −0 Original line number Diff line number Diff line Loading @@ -85,7 +85,9 @@ public: virtual ~MessageQueue(); virtual void init(const sp<SurfaceFlinger>& flinger) = 0; // TODO(akrulec): Remove this function once everything is migrated to Scheduler. virtual void setEventThread(EventThread* events) = 0; virtual void setEventConnection(const sp<BnDisplayEventConnection>& connection) = 0; virtual void waitMessage() = 0; virtual status_t postMessage(const sp<MessageBase>& message, nsecs_t reltime = 0) = 0; virtual void invalidate() = 0; Loading Loading @@ -125,6 +127,7 @@ public: ~MessageQueue() override = default; void init(const sp<SurfaceFlinger>& flinger) override; void setEventThread(android::EventThread* events) override; void setEventConnection(const sp<BnDisplayEventConnection>& connection) override; void waitMessage() override; status_t postMessage(const sp<MessageBase>& message, nsecs_t reltime = 0) override; Loading Loading
services/surfaceflinger/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -125,6 +125,7 @@ filegroup { "Scheduler/EventControlThread.cpp", "Scheduler/EventThread.cpp", "Scheduler/MessageQueue.cpp", "Scheduler/Scheduler.cpp", "StartPropertySetThread.cpp", "SurfaceFlinger.cpp", "SurfaceInterceptor.cpp", Loading
services/surfaceflinger/Scheduler/EventThread.cpp +16 −0 Original line number Diff line number Diff line Loading @@ -45,11 +45,27 @@ EventThread::~EventThread() = default; namespace impl { EventThread::EventThread(std::unique_ptr<VSyncSource> src, ResyncWithRateLimitCallback resyncWithRateLimitCallback, InterceptVSyncsCallback interceptVSyncsCallback, const char* threadName) : EventThread(nullptr, std::move(src), resyncWithRateLimitCallback, interceptVSyncsCallback, threadName) {} EventThread::EventThread(VSyncSource* src, ResyncWithRateLimitCallback resyncWithRateLimitCallback, InterceptVSyncsCallback interceptVSyncsCallback, const char* threadName) : EventThread(src, nullptr, resyncWithRateLimitCallback, interceptVSyncsCallback, threadName) {} EventThread::EventThread(VSyncSource* src, std::unique_ptr<VSyncSource> uniqueSrc, ResyncWithRateLimitCallback resyncWithRateLimitCallback, InterceptVSyncsCallback interceptVSyncsCallback, const char* threadName) : mVSyncSource(src), mVSyncSourceUnique(std::move(uniqueSrc)), mResyncWithRateLimitCallback(resyncWithRateLimitCallback), mInterceptVSyncsCallback(interceptVSyncsCallback) { if (src == nullptr) { mVSyncSource = mVSyncSourceUnique.get(); } for (auto& event : mVSyncEvent) { event.header.type = DisplayEventReceiver::DISPLAY_EVENT_VSYNC; event.header.id = 0; Loading
services/surfaceflinger/Scheduler/EventThread.h +12 −1 Original line number Diff line number Diff line Loading @@ -108,8 +108,12 @@ public: using ResyncWithRateLimitCallback = std::function<void()>; using InterceptVSyncsCallback = std::function<void(nsecs_t)>; // TODO(b/113612090): Once the Scheduler is complete this constructor will become obsolete. EventThread(VSyncSource* src, ResyncWithRateLimitCallback resyncWithRateLimitCallback, InterceptVSyncsCallback interceptVSyncsCallback, const char* threadName); EventThread(std::unique_ptr<VSyncSource> src, ResyncWithRateLimitCallback resyncWithRateLimitCallback, InterceptVSyncsCallback interceptVSyncsCallback, const char* threadName); ~EventThread(); sp<BnDisplayEventConnection> createEventConnection() const override; Loading @@ -134,6 +138,11 @@ public: private: friend EventThreadTest; // TODO(b/113612090): Once the Scheduler is complete this constructor will become obsolete. EventThread(VSyncSource* src, std::unique_ptr<VSyncSource> uniqueSrc, ResyncWithRateLimitCallback resyncWithRateLimitCallback, InterceptVSyncsCallback interceptVSyncsCallback, const char* threadName); void threadMain(); Vector<sp<EventThread::Connection>> waitForEventLocked(std::unique_lock<std::mutex>* lock, DisplayEventReceiver::Event* event) Loading @@ -146,8 +155,10 @@ private: // Implements VSyncSource::Callback void onVSyncEvent(nsecs_t timestamp) override; // TODO(b/113612090): Once the Scheduler is complete this pointer will become obsolete. VSyncSource* mVSyncSource GUARDED_BY(mMutex) = nullptr; std::unique_ptr<VSyncSource> mVSyncSourceUnique GUARDED_BY(mMutex) = nullptr; // constants VSyncSource* const mVSyncSource GUARDED_BY(mMutex) = nullptr; const ResyncWithRateLimitCallback mResyncWithRateLimitCallback; const InterceptVSyncsCallback mInterceptVSyncsCallback; Loading
services/surfaceflinger/Scheduler/MessageQueue.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -101,6 +101,17 @@ void MessageQueue::setEventThread(android::EventThread* eventThread) { this); } void MessageQueue::setEventConnection(const sp<BnDisplayEventConnection>& connection) { if (mEventTube.getFd() >= 0) { mLooper->removeFd(mEventTube.getFd()); } mEvents = connection; mEvents->stealReceiveChannel(&mEventTube); mLooper->addFd(mEventTube.getFd(), 0, Looper::EVENT_INPUT, MessageQueue::cb_eventReceiver, this); } void MessageQueue::waitMessage() { do { IPCThreadState::self()->flushCommands(); Loading
services/surfaceflinger/Scheduler/MessageQueue.h +3 −0 Original line number Diff line number Diff line Loading @@ -85,7 +85,9 @@ public: virtual ~MessageQueue(); virtual void init(const sp<SurfaceFlinger>& flinger) = 0; // TODO(akrulec): Remove this function once everything is migrated to Scheduler. virtual void setEventThread(EventThread* events) = 0; virtual void setEventConnection(const sp<BnDisplayEventConnection>& connection) = 0; virtual void waitMessage() = 0; virtual status_t postMessage(const sp<MessageBase>& message, nsecs_t reltime = 0) = 0; virtual void invalidate() = 0; Loading Loading @@ -125,6 +127,7 @@ public: ~MessageQueue() override = default; void init(const sp<SurfaceFlinger>& flinger) override; void setEventThread(android::EventThread* events) override; void setEventConnection(const sp<BnDisplayEventConnection>& connection) override; void waitMessage() override; status_t postMessage(const sp<MessageBase>& message, nsecs_t reltime = 0) override; Loading