Choreographer 调用 mDisplayEventReceiver.scheduleVsync()
DisplayEventDispatcher::scheduleVsync()
DisplayEventReceiver::requestNextVsync
mEventConnection->requestNextVsync();
然后通过ipc 到
EventThreadConnection::requestNextVsync 到 EventThread的 requestNextVsync 。
void EventThread::requestNextVsync(const sp<EventThreadConnection>& connection) {
ATRACE_NAME("EventThread::requestNextVsync");
if (connection->resyncCallback) {
connection->resyncCallback();
}
std::lock_guard<std::mutex> lock(mMutex);
if (connection->vsyncRequest == VSyncRequest::None) {
connection->vsyncRequest = VSyncRequest::Single;
mCondition.notify_all();
} else if (connection->vsyncRequest == VSyncRequest::SingleSuppressCallback) {
connection->vsyncRequest = VSyncRequest::Single;
}
}
设置 connection->vsyncRequest = VSyncRequest::Single ,
然后唤醒 threadMain ,
然后调用 mVSyncSource->setVSyncEnabled(true) ; 如下:
void DispSyncSource::setVSyncEnabled(bool enable) {
std::lock_guard lock(mVsyncMutex);
if (enable) {
ATRACE_NAME("DispSyncSource::setVSyncEnabled true 0305");
ALOGE("DispSyncSource::setVSyncEnabled true andy0306");
ALOGE("mCallbackRepeater->start andy0306");
mCallbackRepeater->start(mWorkDuration, mReadyDuration);
// ATRACE_INT(mVsyncOnLabel.c_str(), 1);
} else {
ATRACE_NAME("DispSyncSource::setVSyncEnabled false 0305");
ALOGE("DispSyncSource::setVSyncEnabled false andy0306");
ALOGE("mCallbackRepeater->stop andy0306");
mCallbackRepeater->stop();
// ATRACE_INT(mVsyncOnLabel.c_str(), 0);
}
mEnabled = enable;
}
启动 mCallbackRepeater , 到 VSyncDispatchTimerQueue::schedule
rearmTimerSkippingUpdateFor
VSyncDispatchTimerQueue::setTimer
最终回调到DispSyncSource::onVsyncCallback,然后到 EventThread的 onVSyncEvent , 然后继续唤醒 threadMain , 最终调用EventThread::dispatchEvent
EventThreadConnection 的 postEvent
把事件发送出去。