Android SurfaceFlibnger:postComposition 中代码段 bool haveNewListeners = false; { Mutex::Autolock lock(mStateLock); if (mFpsReporter) { mFpsReporter->dispatchLayerFps(); } if (mTunnelModeEnabledReporter) { mTunnelModeEnabledReporter->updateTunnelModeStatus(); } hdrInfoListeners.reserve(mHdrLayerInfoListeners.size()); for (const auto& [displayId, reporter] : mHdrLayerInfoListeners) { if (reporter && reporter->hasListeners()) { if (const auto display = getDisplayDeviceLocked(displayId)) { hdrInfoListeners.emplace_back(display->getCompositionDisplay(), reporter); } } } haveNewListeners = mAddingHDRLayerInfoListener; // grab this with state lock mAddingHDRLayerInfoListener = false;
时间: 2024-02-14 07:22:17 浏览: 147
这段代码是 Android SurfaceFlinger 中的 postComposition 函数的一部分。它的作用是在每次完成一帧的合成后,通知相应的监听者。具体来说,它会遍历所有注册的 HDR 信息监听者,并将其与对应的显示设备关联起来,然后将这些信息存储在 hdrInfoListeners 变量中。同时,它也会检查是否有新的 HDR 信息监听者需要注册,并将此信息存储在 haveNewListeners 变量中。需要注意的是,这个过程是在 mStateLock 互斥锁的保护下进行的,以确保多线程安全。
阅读全文