Skip to content

Commit 706973a

Browse files
Treehugger RobotAndroid (Google) Code Review
authored andcommitted
Merge "Add tracing for EventThread VSYNC state" into main
2 parents 597482d + e78b2ba commit 706973a

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
@@ -307,6 +307,7 @@ EventThread::EventThread(const char* name, std::shared_ptr<scheduler::VsyncSched
307307
IEventThreadCallback& callback, std::chrono::nanoseconds workDuration,
308308
std::chrono::nanoseconds readyDuration)
309309
: mThreadName(name),
310+
mEventThreadStateName(base::StringPrintf("EventThreadState-%s", name)),
310311
mVsyncTracer(base::StringPrintf("VSYNC-%s", name), 0),
311312
mWorkDuration(base::StringPrintf("VsyncWorkDuration-%s", name), workDuration),
312313
mReadyDuration(readyDuration),
@@ -337,7 +338,7 @@ EventThread::EventThread(const char* name, std::shared_ptr<scheduler::VsyncSched
337338
EventThread::~EventThread() {
338339
{
339340
std::lock_guard<std::mutex> lock(mMutex);
340-
mState = State::Quit;
341+
updateState(State::Quit);
341342
mCondition.notify_all();
342343
}
343344
mThread.join();
@@ -448,6 +449,8 @@ void EventThread::enableSyntheticVsync(bool enable) {
448449
return;
449450
}
450451

452+
ALOGD("%s synthetic vsync", enable ? "Enabling" : "Disabling");
453+
451454
mVSyncState->synthetic = enable;
452455
mCondition.notify_all();
453456
}
@@ -574,17 +577,17 @@ void EventThread::threadMain(std::unique_lock<std::mutex>& lock) {
574577
const bool vsyncOmitted =
575578
FlagManager::getInstance().no_vsyncs_on_screen_off() && mVSyncState->omitted;
576579
if (vsyncOmitted) {
577-
mState = State::Idle;
580+
updateState(State::Idle);
578581
SFTRACE_INT("VsyncPendingScreenOn", 1);
579582
} else {
580-
mState = mVSyncState->synthetic ? State::SyntheticVSync : State::VSync;
583+
updateState(mVSyncState->synthetic ? State::SyntheticVSync : State::VSync);
581584
if (FlagManager::getInstance().no_vsyncs_on_screen_off()) {
582585
SFTRACE_INT("VsyncPendingScreenOn", 0);
583586
}
584587
}
585588
} else {
586589
ALOGW_IF(!mVSyncState, "Ignoring VSYNC request while display is disconnected");
587-
mState = State::Idle;
590+
updateState(State::Idle);
588591
}
589592

590593
if (mState == State::VSync) {
@@ -830,6 +833,16 @@ void EventThread::dump(std::string& result) const {
830833
result += '\n';
831834
}
832835

836+
void EventThread::updateState(State state) {
837+
if (state == mState) {
838+
return;
839+
}
840+
mState = state;
841+
842+
SFTRACE_ASYNC_FOR_TRACK_END(mEventThreadStateName.c_str(), 0);
843+
SFTRACE_ASYNC_FOR_TRACK_BEGIN(mEventThreadStateName.c_str(), toCString(mState), 0);
844+
}
845+
833846
const char* EventThread::toCString(State state) {
834847
switch (state) {
835848
case State::Idle:

services/surfaceflinger/Scheduler/EventThread.h

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

229229
const char* const mThreadName;
230+
std::string mEventThreadStateName;
230231
TracedOrdinal<int> mVsyncTracer;
231232
TracedOrdinal<std::chrono::nanoseconds> mWorkDuration GUARDED_BY(mMutex);
232233
std::chrono::nanoseconds mReadyDuration GUARDED_BY(mMutex);
@@ -271,6 +272,8 @@ class EventThread : public android::EventThread {
271272

272273
State mState GUARDED_BY(mMutex) = State::Idle;
273274

275+
void updateState(State state) REQUIRES(mMutex);
276+
274277
static const char* toCString(State);
275278
};
276279

0 commit comments

Comments
 (0)