OSDN Git Service

Rename control block server to mServer and add comments
authorGlenn Kasten <gkasten@google.com>
Fri, 12 Jul 2013 16:45:18 +0000 (09:45 -0700)
committerGlenn Kasten <gkasten@google.com>
Tue, 30 Jul 2013 16:24:03 +0000 (09:24 -0700)
Change-Id: Ieabd91acee92d0e84e66fbd358df5282b856306e

include/private/media/AudioTrackShared.h
media/libmedia/AudioTrackShared.cpp
services/audioflinger/Threads.cpp
services/audioflinger/Tracks.cpp

index b890180..e950b9e 100644 (file)
@@ -89,8 +89,11 @@ struct audio_track_cblk_t
     // The data members are grouped so that members accessed frequently and in the same context
     // are in the same line of data cache.
 
-    volatile    uint32_t    server;     // updated asynchronously by server,
-                                        // "for entertainment purposes only"
+                uint32_t    mServer;    // Number of filled frames consumed by server (mIsOut),
+                                        // or filled frames provided by server (!mIsOut).
+                                        // It is updated asynchronously by server without a barrier.
+                                        // The value should be used "for entertainment purposes only",
+                                        // which means don't make important decisions based on it.
 
                 size_t      frameCount_;    // used during creation to pass actual track buffer size
                                             // from AudioFlinger to client, and not referenced again
@@ -235,7 +238,7 @@ public:
     void        interrupt();
 
     size_t      getPosition() {
-        return mEpoch + mCblk->server;
+        return mEpoch + mCblk->mServer;
     }
 
     void        setEpoch(size_t epoch) {
index aa45a2f..e5f7fcd 100644 (file)
@@ -26,7 +26,7 @@ extern "C" {
 namespace android {
 
 audio_track_cblk_t::audio_track_cblk_t()
-    : server(0), frameCount_(0), mFutex(0), mMinimum(0),
+    : mServer(0), frameCount_(0), mFutex(0), mMinimum(0),
     mVolumeLR(0x10001000), mSampleRate(0), mSendLevel(0), mName(0), flags(0)
 {
     memset(&u, 0, sizeof(u));
@@ -594,7 +594,7 @@ void ServerProxy::releaseBuffer(Buffer* buffer)
         android_atomic_release_store(stepCount + rear, &cblk->u.mStreaming.mRear);
     }
 
-    mCblk->server += stepCount;
+    mCblk->mServer += stepCount;
 
     size_t half = mFrameCount / 2;
     if (half == 0) {
@@ -805,7 +805,7 @@ void StaticAudioTrackServerProxy::releaseBuffer(Buffer* buffer)
     }
     mPosition = newPosition;
 
-    cblk->server += stepCount;
+    cblk->mServer += stepCount;
     cblk->u.mStatic.mBufferPosition = newPosition;
     if (setFlags != 0) {
         (void) android_atomic_or(setFlags, &cblk->flags);
index 62e2e1e..2bb6495 100644 (file)
@@ -2903,7 +2903,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac
         if ((framesReady >= minFrames) && track->isReady() &&
                 !track->isPaused() && !track->isTerminated())
         {
-            ALOGVV("track %d s=%08x [OK] on thread %p", name, cblk->server, this);
+            ALOGVV("track %d s=%08x [OK] on thread %p", name, cblk->mServer, this);
 
             mixedTracks++;
 
@@ -2932,7 +2932,8 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac
                     param = AudioMixer::RAMP_VOLUME;
                 }
                 mAudioMixer->setParameter(name, AudioMixer::RESAMPLE, AudioMixer::RESET, NULL);
-            } else if (cblk->server != 0) {
+            // FIXME should not make a decision based on mServer
+            } else if (cblk->mServer != 0) {
                 // If the track is stopped before the first frame was mixed,
                 // do not apply ramp
                 param = AudioMixer::RAMP_VOLUME;
@@ -3069,7 +3070,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTrac
                 chain->clearInputBuffer();
             }
 
-            ALOGVV("track %d s=%08x [NOT READY] on thread %p", name, cblk->server, this);
+            ALOGVV("track %d s=%08x [NOT READY] on thread %p", name, cblk->mServer, this);
             if ((track->sharedBuffer() != 0) || track->isTerminated() ||
                     track->isStopped() || track->isPaused()) {
                 // We have consumed all the buffers of this track.
@@ -3483,7 +3484,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::DirectOutputThread::prep
         if ((track->framesReady() >= minFrames) && track->isReady() &&
                 !track->isPaused() && !track->isTerminated())
         {
-            ALOGVV("track %d u=%08x, s=%08x [OK]", track->name(), cblk->user, cblk->server);
+            ALOGVV("track %d s=%08x [OK]", track->name(), cblk->mServer);
 
             if (track->mFillingUpStatus == Track::FS_FILLED) {
                 track->mFillingUpStatus = Track::FS_ACTIVE;
@@ -3508,7 +3509,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::DirectOutputThread::prep
                 mEffectChains[0]->clearInputBuffer();
             }
 
-            ALOGVV("track %d u=%08x, s=%08x [NOT READY]", track->name(), cblk->user, cblk->server);
+            ALOGVV("track %d s=%08x [NOT READY]", track->name(), cblk->mServer);
             if ((track->sharedBuffer() != 0) || track->isTerminated() ||
                     track->isStopped() || track->isPaused()) {
                 // We have consumed all the buffers of this track.
@@ -3847,7 +3848,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::OffloadThread::prepareTr
             tracksToRemove->add(track);
         } else if (track->framesReady() && track->isReady() &&
                 !track->isPaused() && !track->isTerminated()) {
-            ALOGVV("OffloadThread: track %d s=%08x [OK]", track->name(), cblk->server);
+            ALOGVV("OffloadThread: track %d s=%08x [OK]", track->name(), cblk->mServer);
             if (track->mFillingUpStatus == Track::FS_FILLED) {
                 track->mFillingUpStatus = Track::FS_ACTIVE;
                 mLeftVolFloat = mRightVolFloat = 0;
@@ -3875,7 +3876,7 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::OffloadThread::prepareTr
                 mixerStatus = MIXER_TRACKS_READY;
             }
         } else {
-            ALOGVV("OffloadThread: track %d s=%08x [NOT READY]", track->name(), cblk->server);
+            ALOGVV("OffloadThread: track %d s=%08x [NOT READY]", track->name(), cblk->mServer);
             if (track->isStopping_1()) {
                 // Hardware buffer can hold a large amount of audio so we must
                 // wait for all current track's data to drain before we say
index 3e184b4..4f2e372 100644 (file)
@@ -468,7 +468,7 @@ void AudioFlinger::PlaybackThread::Track::dump(char* buffer, size_t size)
             mAudioTrackServerProxy->getSampleRate(),
             20.0 * log10((vlr & 0xFFFF) / 4096.0),
             20.0 * log10((vlr >> 16) / 4096.0),
-            mCblk->server,
+            mCblk->mServer,
             (int)mMainBuffer,
             (int)mAuxBuffer,
             mCblk->flags,
@@ -1739,7 +1739,7 @@ void AudioFlinger::RecordThread::RecordTrack::dump(char* buffer, size_t size)
             mChannelMask,
             mSessionId,
             mState,
-            mCblk->server,
+            mCblk->mServer,
             mFrameCount);
 }