summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorGlenn Kasten <gkasten@google.com>2015-03-19 14:49:46 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-03-19 14:49:47 +0000
commit5a23aa949188fafe1d8d35966ff5a73974294dfd (patch)
tree51100d1057123aa3d7b6fd40a54c2b5611a82172 /services
parentd58b2ac7244a964caa3f4e386b8280ae2f5d2125 (diff)
parent17c9c998afed5ed9df7495eeed5822f3ed53ebec (diff)
downloadframeworks_av-5a23aa949188fafe1d8d35966ff5a73974294dfd.zip
frameworks_av-5a23aa949188fafe1d8d35966ff5a73974294dfd.tar.gz
frameworks_av-5a23aa949188fafe1d8d35966ff5a73974294dfd.tar.bz2
Merge "Initial implementation of fast capture dump"
Diffstat (limited to 'services')
-rw-r--r--services/audioflinger/FastCaptureDumpState.cpp23
-rw-r--r--services/audioflinger/FastCaptureDumpState.h2
-rw-r--r--services/audioflinger/FastMixerDumpState.cpp2
-rw-r--r--services/audioflinger/Threads.cpp4
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 c1da6bc..9881764 100644
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -6164,6 +6164,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)