sorry, i dumped the wrong output thread, please refer below right one:
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:
在 2012年12月13日星期四UTC+8下午1时59分14秒,eleven写道:
>
> 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