Loading services/surfaceflinger/Scheduler/DispSyncSource.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include "EventThread.h" namespace android { using base::StringAppendF; DispSyncSource::DispSyncSource(DispSync* dispSync, nsecs_t phaseOffset, bool traceVsync, const char* name) Loading Loading @@ -107,6 +108,12 @@ void DispSyncSource::onDispSyncEvent(nsecs_t when) { } } void DispSyncSource::dump(std::string& result) const { std::lock_guard lock(mVsyncMutex); StringAppendF(&result, "DispSyncSource: %s(%s)\n", mName, mEnabled ? "enabled" : "disabled"); mDispSync->dump(result); } } // namespace android // TODO(b/129481165): remove the #pragma below and fix conversion issues Loading services/surfaceflinger/Scheduler/DispSyncSource.h +3 −1 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ public: void setCallback(VSyncSource::Callback* callback) override; void setPhaseOffset(nsecs_t phaseOffset) override; void dump(std::string&) const override; private: // The following method is the implementation of the DispSync::Callback. virtual void onDispSyncEvent(nsecs_t when); Loading @@ -52,7 +54,7 @@ private: std::mutex mCallbackMutex; VSyncSource::Callback* mCallback GUARDED_BY(mCallbackMutex) = nullptr; std::mutex mVsyncMutex; mutable std::mutex mVsyncMutex; TracedOrdinal<nsecs_t> mPhaseOffset GUARDED_BY(mVsyncMutex); bool mEnabled GUARDED_BY(mVsyncMutex) = false; }; Loading services/surfaceflinger/Scheduler/EventThread.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -425,7 +425,12 @@ void EventThread::threadMain(std::unique_lock<std::mutex>& lock) { // display is off, keep feeding clients at 60 Hz. const auto timeout = mState == State::SyntheticVSync ? 16ms : 1000ms; if (mCondition.wait_for(lock, timeout) == std::cv_status::timeout) { ALOGW_IF(mState == State::VSync, "Faking VSYNC due to driver stall"); if (mState == State::VSync) { ALOGW("Faking VSYNC due to driver stall for thread %s", mThreadName); std::string debugInfo = "VsyncSource debug info:\n"; mVSyncSource->dump(debugInfo); ALOGW("%s", debugInfo.c_str()); } LOG_FATAL_IF(!mVSyncState); mPendingEvents.push_back(makeVSync(mVSyncState->displayId, Loading services/surfaceflinger/Scheduler/EventThread.h +2 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,8 @@ public: virtual void setVSyncEnabled(bool enable) = 0; virtual void setCallback(Callback* callback) = 0; virtual void setPhaseOffset(nsecs_t phaseOffset) = 0; virtual void dump(std::string& result) const = 0; }; class EventThreadConnection : public BnDisplayEventConnection { Loading services/surfaceflinger/Scheduler/InjectVSyncSource.h +1 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ public: const char* getName() const override { return "inject"; } void setVSyncEnabled(bool) override {} void setPhaseOffset(nsecs_t) override {} void dump(std::string&) const override {} private: std::mutex mCallbackMutex; Loading Loading
services/surfaceflinger/Scheduler/DispSyncSource.cpp +7 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ #include "EventThread.h" namespace android { using base::StringAppendF; DispSyncSource::DispSyncSource(DispSync* dispSync, nsecs_t phaseOffset, bool traceVsync, const char* name) Loading Loading @@ -107,6 +108,12 @@ void DispSyncSource::onDispSyncEvent(nsecs_t when) { } } void DispSyncSource::dump(std::string& result) const { std::lock_guard lock(mVsyncMutex); StringAppendF(&result, "DispSyncSource: %s(%s)\n", mName, mEnabled ? "enabled" : "disabled"); mDispSync->dump(result); } } // namespace android // TODO(b/129481165): remove the #pragma below and fix conversion issues Loading
services/surfaceflinger/Scheduler/DispSyncSource.h +3 −1 Original line number Diff line number Diff line Loading @@ -36,6 +36,8 @@ public: void setCallback(VSyncSource::Callback* callback) override; void setPhaseOffset(nsecs_t phaseOffset) override; void dump(std::string&) const override; private: // The following method is the implementation of the DispSync::Callback. virtual void onDispSyncEvent(nsecs_t when); Loading @@ -52,7 +54,7 @@ private: std::mutex mCallbackMutex; VSyncSource::Callback* mCallback GUARDED_BY(mCallbackMutex) = nullptr; std::mutex mVsyncMutex; mutable std::mutex mVsyncMutex; TracedOrdinal<nsecs_t> mPhaseOffset GUARDED_BY(mVsyncMutex); bool mEnabled GUARDED_BY(mVsyncMutex) = false; }; Loading
services/surfaceflinger/Scheduler/EventThread.cpp +6 −1 Original line number Diff line number Diff line Loading @@ -425,7 +425,12 @@ void EventThread::threadMain(std::unique_lock<std::mutex>& lock) { // display is off, keep feeding clients at 60 Hz. const auto timeout = mState == State::SyntheticVSync ? 16ms : 1000ms; if (mCondition.wait_for(lock, timeout) == std::cv_status::timeout) { ALOGW_IF(mState == State::VSync, "Faking VSYNC due to driver stall"); if (mState == State::VSync) { ALOGW("Faking VSYNC due to driver stall for thread %s", mThreadName); std::string debugInfo = "VsyncSource debug info:\n"; mVSyncSource->dump(debugInfo); ALOGW("%s", debugInfo.c_str()); } LOG_FATAL_IF(!mVSyncState); mPendingEvents.push_back(makeVSync(mVSyncState->displayId, Loading
services/surfaceflinger/Scheduler/EventThread.h +2 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,8 @@ public: virtual void setVSyncEnabled(bool enable) = 0; virtual void setCallback(Callback* callback) = 0; virtual void setPhaseOffset(nsecs_t phaseOffset) = 0; virtual void dump(std::string& result) const = 0; }; class EventThreadConnection : public BnDisplayEventConnection { Loading
services/surfaceflinger/Scheduler/InjectVSyncSource.h +1 −0 Original line number Diff line number Diff line Loading @@ -45,6 +45,7 @@ public: const char* getName() const override { return "inject"; } void setVSyncEnabled(bool) override {} void setPhaseOffset(nsecs_t) override {} void dump(std::string&) const override {} private: std::mutex mCallbackMutex; Loading