post again, because I didn't see my posted info. Clients: pid: 2141 Global session refs: session pid count 1 1541 1 2 1541 1 10 2141 1 12 3449 1 13 3449 1 14 3449 1 15 3449 1 19 3449 1 20 3449 1 Hardware status: 0 Standby Time mSec: 3000
Output thread 0x411b8008 internals last write occurred (msecs): 238843 total writes: 14 delayed writes: 0 blocked in write: 0 suspend count: 1 mix buffer : 0x40d0f148 Fast track availMask=0xf8 io handle: 5 TID: 1952 standby: 1 Sample rate: 48000 HAL frame count: 768 Normal frame count: 1152 Channel Count: 2 Channel Mask: 0x00000003 Format: 1 Frame size: 4 Pending setParameters commands: Index Command Pending config events: Index event param AudioMixer tracks: 00000003 FastMixer command=COLD_IDLE writeSequence=52 framesWritten=19968 numTracks=2 writeErrors=0 underruns=1 overruns=6 sampleRate=48000 frameCount=768 measuredWarmup=35.8 ms, warmupCycles=2 mixPeriod=16.00 ms Simple moving statistics over last 0.4 seconds: wall clock time in ms per mix cycle: mean=13.55 min=0.31 max=41.44 stddev=10.09 raw CPU load in us per mix cycle: mean=253 min=0 max=397 stddev=89 Fast tracks: kMaxFastTracks=8 activeMask=0x5 Index Active Full Partial Empty Recent Ready 0 yes 21 0 2 empty 0 1 no 0 0 0 full 0 2 yes 14 0 9 empty 0 3 no 0 0 0 full 0 4 no 0 0 0 full 0 5 no 0 0 0 full 0 6 no 0 0 0 full 0 7 no 0 0 0 full 0 State queue observer: stateChanges=8 State queue mutator: pushDirty=8 pushAck=3 blockedSequence=6 Output thread 0x411b8008 stream volumes in dB: 0:0, 1:-29, 2:-29, 3:-14, 4:-7.5, 5:-29, 6:-6.6, 7:-29, 8:-30, 9:-14, 10:-14 Output thread 0x411b8008 tracks Name Client Type Fmt Chn mask Session mFrCnt fCount S M F SRate L dB R dB Server User Main buf Aux Buf Flags Underruns F 2 2141 0 1 0x00000001 17 768 1536 T 0 1 48000 -10 -10 0x00002a00 0x00002a00 0x40d0f148 0x00000000 0x82 3* F 1 2141 0 1 0x00000001 10 0 1536 I 0 0 48000 -10 -10 0x00000000 0x00000000 0x40d0f148 0x00000000 0x83 0 Output thread 0x411b8008 active tracks Name Client Type Fmt Chn mask Session mFrCnt fCount S M F SRate L dB R dB Server User Main buf Aux Buf Flags Underruns F 2 2141 0 1 0x00000001 17 768 1536 T 0 1 48000 -10 -10 0x00002a00 0x00002a00 0x40d0f148 0x00000000 0x82 3* Normal mixer raw underrun counters: partial=0 empty=2 - 0 Effect Chains: >From below dump, we could see that another fasttrack didn't exit. Thanks 在 2012年12月18日星期二UTC+8下午11时05分39秒,Glenn Kasten写道: > > I have not seen this happen on my test devices so far. > Which device are you having the problem on? > Does the same problem happen on all other devices you try, or only this > one? > Is it 100% repeatable, or only happens sometimes? > Please supply output of adb shell dumpsys media.audio_flinger > and the last 20 lines of adb logcat immediately after a failure. > > On Wednesday, December 12, 2012 9:59:14 PM UTC-8, eleven wrote: >> >> Dear Glenn, >> >> I met a issue when I hang up a phone call after communication. >> When hang up a phone call, there will be a notification stream from >> earpiece to >> notify user that phone call is ended. >> >> From the log, ToneGenerator will create a FastTrack to play it. >> >> And the Question is after palying the sound, this FastTrack will be set >> to >> TERMINATED state and stay in Active state in MixerThread. >> >> After track the code, I found that below function never return ture: >> >> if (!track->presentationComplete(framesWritten, audioHALFrames)) { >> // track stays in active list until presentation is complete >> break; >> } >> >> >> bool AudioFlinger::PlaybackThread::Track::presentationComplete(size_t >> framesWritten, size_t audioHalFrames) >> { >> // a track is considered presented when the total number of frames >> written >> to audio HAL >> // corresponds to the number of frames written when >> presentationComplete() >> is called for the >> // first time (mPresentationCompleteFrames == 0) plus the buffer >> filling >> status at that time. >> if (mPresentationCompleteFrames == 0) { >> mPresentationCompleteFrames = framesWritten + audioHalFrames; >> ALOGV("presentationComplete() reset: mPresentationCompleteFrames >> %d >> audioHalFrames %d", >> mPresentationCompleteFrames, audioHalFrames); >> } >> if (framesWritten >= mPresentationCompleteFrames) { >> ALOGV("presentationComplete() session %d complete: framesWritten >> %d", >> mSessionId, framesWritten); >> triggerEvents(AudioSystem::SYNC_EVENT_PRESENTATION_COMPLETE); >> return true; >> } >> return false; >> } >> >> After add some log to track I found that "framesWritten" alwasy be 0, >> because in >> playtrackthread, mBytesWritten was reset to 0 at the front of >> PlaybackThread::threadLoop() >> // put audio hardware into standby after short delay >> if (CC_UNLIKELY((!mActiveTracks.size() && systemTime() > >> standbyTime) || >> mSuspended > 0)) { >> if (!mStandby) { >> >> threadLoop_standby(); >> >> mStandby = true; >> mBytesWritten = 0; >> } >> >> Because it will just call presentationComplete() after Track's state >> becomming >> STOPPING_2 or TERMINATED.So the question is why Track's state changed so >> slow >> which make the next suspend operation reset the mBytesWritten always ?? >> >> BTW, I tried to make the mixerThread suspend just after >> mActiveTracks.size >> =0,which means waiting FastTrack finish its presentationComplete. >> but it still failed, because when Clinet AP call track's stop function, >> it will >> also stop writing, and mBytesWritten also can not get increased, so >> presentationComplete will never return true. >> >> it is very weird !! And our platform support FastMixer, after happened >> this, the >> mixerthread will keep pushing state into FastMixer. >> >> Could you help me ? >> >> Thanks >> >> -- unsubscribe: android-porting+unsubscr...@googlegroups.com website: http://groups.google.com/group/android-porting