In frameworks/av look at git show 291f824e02ff517a34cfe50220b4e2b402ee998d It might be related to that fix, but I'm not sure.
On Tuesday, December 18, 2012 8:21:26 PM UTC-8, [email protected] wrote: > > 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: [email protected] website: http://groups.google.com/group/android-porting
