1、mSleepTimeUs
表示要sleep的时间,一般是等于mIdleSleepTimeUs,而
mIdleSleepTimeUs是idleSleepTimeUs()的返回。
uint32_t AudioFlinger::MixerThread::idleSleepTimeUs() const
{
return (uint32_t)(((mNormalFrameCount * 1000) / mSampleRate) * 1000) / 2;
}
大概就是等于out_write一次数据的时间的一半。比如mNormalFrameCount = 1920, mSampleRate = 48000, 那idleSleepTimeUs = 1920/4800/2 = 20ms,但是mNormalFrameCount还不一定
等于hal层返回的framecount,mNormalFrameCount = multiplier * mFrameCount;
mFrameCount 才是hal层返回的framecount,mFrameCount = mBufferSize / mFrameSize;
2、mActiveSleepTimeUs
mActiveSleepTimeUs = activeSleepTimeUs();
uint32_t AudioFlinger::PlaybackThread::activeSleepTimeUs() const
{
return (uint32_t)((uint32_t)((mNormalFrameCount * 1000) / mSampleRate) * 1000);
}
所以mActiveSleepTimeUs会等于idleSleepTimeUs的2倍,大概是40ms。
3、sleepTimeShift
一个移位参数,主要用于计算实际mSleepTimeUs的值, mSleepTimeUs 不超过kMaxThreadSleepTimeShift(即static const uint32_t kMaxThreadSleepTimeShift = 2;)
</

本文详细解析了Android AudioFlinger中MixerThread的mSleepTimeUs、mIdleSleepTimeUs和mActiveSleepTimeUs的计算及作用,讨论了在不同条件下线程如何进入sleep状态以及对hal层数据的影响。通过分析threadLoop_sleepTime函数和mix函数,揭示了在systrace中的表现,特别是0数据的写入情况。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



