Skip to content

Commit e78b2ba

Browse files
author
Dennis Kiilerich
committed
Add tracing for EventThread VSYNC state
This enables seeing whether VSYNC is synthetic, idle, or real VSYNC in Perfetto. Bug: 342681202 Bug: 404073995 Flag: EXEMPT tracing only update Test: verified in Perfetto with and without Android Auto Projected Change-Id: Id303ec71155c61bd67aadd627aab5438ef5fdec8
1 parent e20c771 commit e78b2ba

2 files changed

Lines changed: 20 additions & 4 deletions

File tree

services/surfaceflinger/Scheduler/EventThread.cpp

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,7 @@ EventThread::EventThread(const char* name, std::shared_ptr<scheduler::VsyncSched
298298
IEventThreadCallback& callback, std::chrono::nanoseconds workDuration,
299299
std::chrono::nanoseconds readyDuration)
300300
: mThreadName(name),
301+
mEventThreadStateName(base::StringPrintf("EventThreadState-%s", name)),
301302
mVsyncTracer(base::StringPrintf("VSYNC-%s", name), 0),
302303
mWorkDuration(base::StringPrintf("VsyncWorkDuration-%s", name), workDuration),
303304
mReadyDuration(readyDuration),
@@ -328,7 +329,7 @@ EventThread::EventThread(const char* name, std::shared_ptr<scheduler::VsyncSched
328329
EventThread::~EventThread() {
329330
{
330331
std::lock_guard<std::mutex> lock(mMutex);
331-
mState = State::Quit;
332+
updateState(State::Quit);
332333
mCondition.notify_all();
333334
}
334335
mThread.join();
@@ -439,6 +440,8 @@ void EventThread::enableSyntheticVsync(bool enable) {
439440
return;
440441
}
441442

443+
ALOGD("%s synthetic vsync", enable ? "Enabling" : "Disabling");
444+
442445
mVSyncState->synthetic = enable;
443446
mCondition.notify_all();
444447
}
@@ -564,17 +567,17 @@ void EventThread::threadMain(std::unique_lock<std::mutex>& lock) {
564567
const bool vsyncOmitted =
565568
FlagManager::getInstance().no_vsyncs_on_screen_off() && mVSyncState->omitted;
566569
if (vsyncOmitted) {
567-
mState = State::Idle;
570+
updateState(State::Idle);
568571
SFTRACE_INT("VsyncPendingScreenOn", 1);
569572
} else {
570-
mState = mVSyncState->synthetic ? State::SyntheticVSync : State::VSync;
573+
updateState(mVSyncState->synthetic ? State::SyntheticVSync : State::VSync);
571574
if (FlagManager::getInstance().no_vsyncs_on_screen_off()) {
572575
SFTRACE_INT("VsyncPendingScreenOn", 0);
573576
}
574577
}
575578
} else {
576579
ALOGW_IF(!mVSyncState, "Ignoring VSYNC request while display is disconnected");
577-
mState = State::Idle;
580+
updateState(State::Idle);
578581
}
579582

580583
if (mState == State::VSync) {
@@ -820,6 +823,16 @@ void EventThread::dump(std::string& result) const {
820823
result += '\n';
821824
}
822825

826+
void EventThread::updateState(State state) {
827+
if (state == mState) {
828+
return;
829+
}
830+
mState = state;
831+
832+
SFTRACE_ASYNC_FOR_TRACK_END(mEventThreadStateName.c_str(), 0);
833+
SFTRACE_ASYNC_FOR_TRACK_BEGIN(mEventThreadStateName.c_str(), toCString(mState), 0);
834+
}
835+
823836
const char* EventThread::toCString(State state) {
824837
switch (state) {
825838
case State::Idle:

services/surfaceflinger/Scheduler/EventThread.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ class EventThread : public android::EventThread {
225225
std::shared_ptr<scheduler::VsyncSchedule>) EXCLUDES(mMutex);
226226

227227
const char* const mThreadName;
228+
std::string mEventThreadStateName;
228229
TracedOrdinal<int> mVsyncTracer;
229230
TracedOrdinal<std::chrono::nanoseconds> mWorkDuration GUARDED_BY(mMutex);
230231
std::chrono::nanoseconds mReadyDuration GUARDED_BY(mMutex);
@@ -269,6 +270,8 @@ class EventThread : public android::EventThread {
269270

270271
State mState GUARDED_BY(mMutex) = State::Idle;
271272

273+
void updateState(State state) REQUIRES(mMutex);
274+
272275
static const char* toCString(State);
273276
};
274277

0 commit comments

Comments
 (0)