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