Loading services/surfaceflinger/Scheduler/EventThread.cpp +17 −4 Original line number Diff line number Diff line Loading @@ -307,6 +307,7 @@ EventThread::EventThread(const char* name, std::shared_ptr<scheduler::VsyncSched IEventThreadCallback& callback, std::chrono::nanoseconds workDuration, std::chrono::nanoseconds readyDuration) : mThreadName(name), mEventThreadStateName(base::StringPrintf("EventThreadState-%s", name)), mVsyncTracer(base::StringPrintf("VSYNC-%s", name), 0), mWorkDuration(base::StringPrintf("VsyncWorkDuration-%s", name), workDuration), mReadyDuration(readyDuration), Loading Loading @@ -337,7 +338,7 @@ EventThread::EventThread(const char* name, std::shared_ptr<scheduler::VsyncSched EventThread::~EventThread() { { std::lock_guard<std::mutex> lock(mMutex); mState = State::Quit; updateState(State::Quit); mCondition.notify_all(); } mThread.join(); Loading Loading @@ -448,6 +449,8 @@ void EventThread::enableSyntheticVsync(bool enable) { return; } ALOGD("%s synthetic vsync", enable ? "Enabling" : "Disabling"); mVSyncState->synthetic = enable; mCondition.notify_all(); } Loading Loading @@ -574,17 +577,17 @@ void EventThread::threadMain(std::unique_lock<std::mutex>& lock) { const bool vsyncOmitted = FlagManager::getInstance().no_vsyncs_on_screen_off() && mVSyncState->omitted; if (vsyncOmitted) { mState = State::Idle; updateState(State::Idle); SFTRACE_INT("VsyncPendingScreenOn", 1); } else { mState = mVSyncState->synthetic ? State::SyntheticVSync : State::VSync; updateState(mVSyncState->synthetic ? State::SyntheticVSync : State::VSync); if (FlagManager::getInstance().no_vsyncs_on_screen_off()) { SFTRACE_INT("VsyncPendingScreenOn", 0); } } } else { ALOGW_IF(!mVSyncState, "Ignoring VSYNC request while display is disconnected"); mState = State::Idle; updateState(State::Idle); } if (mState == State::VSync) { Loading Loading @@ -830,6 +833,16 @@ void EventThread::dump(std::string& result) const { result += '\n'; } void EventThread::updateState(State state) { if (state == mState) { return; } mState = state; SFTRACE_ASYNC_FOR_TRACK_END(mEventThreadStateName.c_str(), 0); SFTRACE_ASYNC_FOR_TRACK_BEGIN(mEventThreadStateName.c_str(), toCString(mState), 0); } const char* EventThread::toCString(State state) { switch (state) { case State::Idle: Loading services/surfaceflinger/Scheduler/EventThread.h +3 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,7 @@ private: std::shared_ptr<scheduler::VsyncSchedule>) EXCLUDES(mMutex); const char* const mThreadName; std::string mEventThreadStateName; TracedOrdinal<int> mVsyncTracer; TracedOrdinal<std::chrono::nanoseconds> mWorkDuration GUARDED_BY(mMutex); std::chrono::nanoseconds mReadyDuration GUARDED_BY(mMutex); Loading Loading @@ -271,6 +272,8 @@ private: State mState GUARDED_BY(mMutex) = State::Idle; void updateState(State state) REQUIRES(mMutex); static const char* toCString(State); }; Loading Loading
services/surfaceflinger/Scheduler/EventThread.cpp +17 −4 Original line number Diff line number Diff line Loading @@ -307,6 +307,7 @@ EventThread::EventThread(const char* name, std::shared_ptr<scheduler::VsyncSched IEventThreadCallback& callback, std::chrono::nanoseconds workDuration, std::chrono::nanoseconds readyDuration) : mThreadName(name), mEventThreadStateName(base::StringPrintf("EventThreadState-%s", name)), mVsyncTracer(base::StringPrintf("VSYNC-%s", name), 0), mWorkDuration(base::StringPrintf("VsyncWorkDuration-%s", name), workDuration), mReadyDuration(readyDuration), Loading Loading @@ -337,7 +338,7 @@ EventThread::EventThread(const char* name, std::shared_ptr<scheduler::VsyncSched EventThread::~EventThread() { { std::lock_guard<std::mutex> lock(mMutex); mState = State::Quit; updateState(State::Quit); mCondition.notify_all(); } mThread.join(); Loading Loading @@ -448,6 +449,8 @@ void EventThread::enableSyntheticVsync(bool enable) { return; } ALOGD("%s synthetic vsync", enable ? "Enabling" : "Disabling"); mVSyncState->synthetic = enable; mCondition.notify_all(); } Loading Loading @@ -574,17 +577,17 @@ void EventThread::threadMain(std::unique_lock<std::mutex>& lock) { const bool vsyncOmitted = FlagManager::getInstance().no_vsyncs_on_screen_off() && mVSyncState->omitted; if (vsyncOmitted) { mState = State::Idle; updateState(State::Idle); SFTRACE_INT("VsyncPendingScreenOn", 1); } else { mState = mVSyncState->synthetic ? State::SyntheticVSync : State::VSync; updateState(mVSyncState->synthetic ? State::SyntheticVSync : State::VSync); if (FlagManager::getInstance().no_vsyncs_on_screen_off()) { SFTRACE_INT("VsyncPendingScreenOn", 0); } } } else { ALOGW_IF(!mVSyncState, "Ignoring VSYNC request while display is disconnected"); mState = State::Idle; updateState(State::Idle); } if (mState == State::VSync) { Loading Loading @@ -830,6 +833,16 @@ void EventThread::dump(std::string& result) const { result += '\n'; } void EventThread::updateState(State state) { if (state == mState) { return; } mState = state; SFTRACE_ASYNC_FOR_TRACK_END(mEventThreadStateName.c_str(), 0); SFTRACE_ASYNC_FOR_TRACK_BEGIN(mEventThreadStateName.c_str(), toCString(mState), 0); } const char* EventThread::toCString(State state) { switch (state) { case State::Idle: Loading
services/surfaceflinger/Scheduler/EventThread.h +3 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,7 @@ private: std::shared_ptr<scheduler::VsyncSchedule>) EXCLUDES(mMutex); const char* const mThreadName; std::string mEventThreadStateName; TracedOrdinal<int> mVsyncTracer; TracedOrdinal<std::chrono::nanoseconds> mWorkDuration GUARDED_BY(mMutex); std::chrono::nanoseconds mReadyDuration GUARDED_BY(mMutex); Loading Loading @@ -271,6 +272,8 @@ private: State mState GUARDED_BY(mMutex) = State::Idle; void updateState(State state) REQUIRES(mMutex); static const char* toCString(State); }; Loading