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

Reply via email to