Choreographer请求vsync的流程

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
把事件发送出去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值