aaudio: add MediaMetrics for MMAP streams
Log events from service.
Log start, stop, disconnect and other events.
Log underruns and bufferSize.
Bug: 154543374
Test: adb shell dumpsys media.metrics --clear
Test: run an app that uses MMAP, like OboeTester
Test: adb shell dumpsys media.metrics
Test: Expect to see lots of "audio.stream" events.
Change-Id: I690e5226b695d53d038d644f4438c759e08f9fbb
diff --git a/media/libaudioclient/AudioTrack.cpp b/media/libaudioclient/AudioTrack.cpp
index 8b357a3..cd1a847 100644
--- a/media/libaudioclient/AudioTrack.cpp
+++ b/media/libaudioclient/AudioTrack.cpp
@@ -777,7 +777,9 @@
.set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_STOP)
.set(AMEDIAMETRICS_PROP_DURATIONNS, (int64_t)(systemTime() - beginNs))
.set(AMEDIAMETRICS_PROP_STATE, stateToString(mState))
- .record(); });
+ .record();
+ logBufferSizeUnderruns();
+ });
ALOGV("%s(%d): prior state:%s", __func__, mPortId, stateToString(mState));
@@ -1107,6 +1109,7 @@
if (mOutput == AUDIO_IO_HANDLE_NONE || mProxy.get() == 0) {
return NO_INIT;
}
+
return (ssize_t) mProxy->getBufferSizeInFrames();
}
@@ -1128,6 +1131,16 @@
return NO_ERROR;
}
+void AudioTrack::logBufferSizeUnderruns() {
+ LOG_ALWAYS_FATAL_IF(mMetricsId.size() == 0, "mMetricsId is empty!");
+ ALOGD("%s(), mMetricsId = %s", __func__, mMetricsId.c_str());
+ // FIXME THis hangs! Why?
+// android::mediametrics::LogItem(mMetricsId)
+// .set(AMEDIAMETRICS_PROP_BUFFERSIZEFRAMES, (int32_t) getBufferSizeInFrames())
+// .set(AMEDIAMETRICS_PROP_UNDERRUN, (int32_t) getUnderrunCount())
+// .record();
+}
+
ssize_t AudioTrack::setBufferSizeInFrames(size_t bufferSizeInFrames)
{
AutoMutex lock(mLock);
@@ -1138,7 +1151,13 @@
if (!audio_is_linear_pcm(mFormat)) {
return INVALID_OPERATION;
}
- return (ssize_t) mProxy->setBufferSizeInFrames((uint32_t) bufferSizeInFrames);
+
+ ssize_t originalBufferSize = mProxy->getBufferSizeInFrames();
+ ssize_t finalBufferSize = mProxy->setBufferSizeInFrames((uint32_t) bufferSizeInFrames);
+ if (originalBufferSize != finalBufferSize) {
+ logBufferSizeUnderruns();
+ }
+ return finalBufferSize;
}
status_t AudioTrack::setLoop(uint32_t loopStart, uint32_t loopEnd, int loopCount)