diff options
author | Glenn Kasten <gkasten@google.com> | 2015-03-02 15:53:01 -0800 |
---|---|---|
committer | Glenn Kasten <gkasten@google.com> | 2015-03-06 09:35:19 -0800 |
commit | 17c9c998afed5ed9df7495eeed5822f3ed53ebec (patch) | |
tree | 9b146046584a7093410ecb23b1265d770383c376 /services/audioflinger | |
parent | 44182c206f7c5584ef2cf504da6be98fab665dbf (diff) | |
download | frameworks_av-17c9c998afed5ed9df7495eeed5822f3ed53ebec.zip frameworks_av-17c9c998afed5ed9df7495eeed5822f3ed53ebec.tar.gz frameworks_av-17c9c998afed5ed9df7495eeed5822f3ed53ebec.tar.bz2 |
Initial implementation of fast capture dump
Change-Id: I898d903e539f760ef7caa80f41ca21c223f67264
Diffstat (limited to 'services/audioflinger')
-rw-r--r-- | services/audioflinger/FastCaptureDumpState.cpp | 23 | ||||
-rw-r--r-- | services/audioflinger/FastCaptureDumpState.h | 2 | ||||
-rw-r--r-- | services/audioflinger/FastMixerDumpState.cpp | 2 | ||||
-rw-r--r-- | services/audioflinger/Threads.cpp | 4 |
4 files changed, 30 insertions, 1 deletions
diff --git a/services/audioflinger/FastCaptureDumpState.cpp b/services/audioflinger/FastCaptureDumpState.cpp index 00f8da0..53eeba5 100644 --- a/services/audioflinger/FastCaptureDumpState.cpp +++ b/services/audioflinger/FastCaptureDumpState.cpp @@ -14,7 +14,13 @@ * limitations under the License. */ +#define LOG_TAG "FastCaptureDumpState" +//define LOG_NDEBUG 0 + +#include "Configuration.h" +#include <utils/Log.h> #include "FastCaptureDumpState.h" +#include "FastCaptureState.h" namespace android { @@ -27,4 +33,21 @@ FastCaptureDumpState::~FastCaptureDumpState() { } +void FastCaptureDumpState::dump(int fd) const +{ + if (mCommand == FastCaptureState::INITIAL) { + dprintf(fd, " FastCapture not initialized\n"); + return; + } + double measuredWarmupMs = (mMeasuredWarmupTs.tv_sec * 1000.0) + + (mMeasuredWarmupTs.tv_nsec / 1000000.0); + double periodSec = (double) mFrameCount / mSampleRate; + dprintf(fd, " FastCapture command=%s readSequence=%u framesRead=%u\n" + " readErrors=%u sampleRate=%u frameCount=%zu\n" + " measuredWarmup=%.3g ms, warmupCycles=%u period=%.2f ms\n", + FastCaptureState::commandToString(mCommand), mReadSequence, mFramesRead, + mReadErrors, mSampleRate, mFrameCount, measuredWarmupMs, mWarmupCycles, + periodSec * 1e3); +} + } // android diff --git a/services/audioflinger/FastCaptureDumpState.h b/services/audioflinger/FastCaptureDumpState.h index ee99099..6f9c4c3 100644 --- a/services/audioflinger/FastCaptureDumpState.h +++ b/services/audioflinger/FastCaptureDumpState.h @@ -27,6 +27,8 @@ struct FastCaptureDumpState : FastThreadDumpState { FastCaptureDumpState(); /*virtual*/ ~FastCaptureDumpState(); + void dump(int fd) const; // should only be called on a stable copy, not the original + // FIXME by renaming, could pull up many of these to FastThreadDumpState uint32_t mReadSequence; // incremented before and after each read() uint32_t mFramesRead; // total number of frames read successfully diff --git a/services/audioflinger/FastMixerDumpState.cpp b/services/audioflinger/FastMixerDumpState.cpp index 65fbf2b..b10942b 100644 --- a/services/audioflinger/FastMixerDumpState.cpp +++ b/services/audioflinger/FastMixerDumpState.cpp @@ -64,7 +64,7 @@ void FastMixerDumpState::dump(int fd) const } double measuredWarmupMs = (mMeasuredWarmupTs.tv_sec * 1000.0) + (mMeasuredWarmupTs.tv_nsec / 1000000.0); - double mixPeriodSec = (double) mFrameCount / (double) mSampleRate; + double mixPeriodSec = (double) mFrameCount / mSampleRate; dprintf(fd, " FastMixer command=%s writeSequence=%u framesWritten=%u\n" " numTracks=%u writeErrors=%u underruns=%u overruns=%u\n" " sampleRate=%u frameCount=%zu measuredWarmup=%.3g ms, warmupCycles=%u\n" diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp index 92bd295..b7807ee 100644 --- a/services/audioflinger/Threads.cpp +++ b/services/audioflinger/Threads.cpp @@ -6163,6 +6163,10 @@ void AudioFlinger::RecordThread::dumpInternals(int fd, const Vector<String16>& a } dprintf(fd, " Fast capture thread: %s\n", hasFastCapture() ? "yes" : "no"); dprintf(fd, " Fast track available: %s\n", mFastTrackAvail ? "yes" : "no"); + + // Make a non-atomic copy of fast capture dump state so it won't change underneath us + const FastCaptureDumpState copy(mFastCaptureDumpState); + copy.dump(fd); } void AudioFlinger::RecordThread::dumpTracks(int fd, const Vector<String16>& args __unused) |