AudioRecord: Add setLogSessionId
Update AudioTrack::setLogSessionId to match.
Test: atest AudioRecordTest#testSetLogSessionId
Test: atest AudioTrackTest#testSetLogSessionId
Test: adb shell dumpsys media.metrics
Bug: 181271535
Change-Id: I9754ce222a4723cf9b10a03db4e769cef6f3e93a
diff --git a/media/libaudioclient/AudioRecord.cpp b/media/libaudioclient/AudioRecord.cpp
index 112cb67..00ed3b8 100644
--- a/media/libaudioclient/AudioRecord.cpp
+++ b/media/libaudioclient/AudioRecord.cpp
@@ -114,6 +114,7 @@
mMetricsItem->setInt32(MM_PREFIX "lastError.code", (int32_t)mLastError);
mMetricsItem->setCString(MM_PREFIX "lastError.at", mLastErrorFunc.c_str());
}
+ mMetricsItem->setCString(MM_PREFIX "logSessionId", record->mLogSessionId.c_str());
}
static const char *stateToString(bool active) {
@@ -953,6 +954,7 @@
.set(AMEDIAMETRICS_PROP_ORIGINALFLAGS, toString(mOrigFlags).c_str())
.set(AMEDIAMETRICS_PROP_SESSIONID, (int32_t)mSessionId)
.set(AMEDIAMETRICS_PROP_TRACKID, mPortId)
+ .set(AMEDIAMETRICS_PROP_LOGSESSIONID, mLogSessionId)
.set(AMEDIAMETRICS_PROP_SOURCE, toString(mAttributes.source).c_str())
.set(AMEDIAMETRICS_PROP_THREADID, (int32_t)output.inputId)
.set(AMEDIAMETRICS_PROP_SELECTEDDEVICEID, (int32_t)mSelectedDeviceId)
@@ -1574,6 +1576,19 @@
}
}
+void AudioRecord::setLogSessionId(const char *logSessionId)
+{
+ AutoMutex lock(mLock);
+ if (logSessionId == nullptr) logSessionId = ""; // an empty string is an unset session id.
+ if (mLogSessionId == logSessionId) return;
+
+ mLogSessionId = logSessionId;
+ mediametrics::LogItem(mMetricsId)
+ .set(AMEDIAMETRICS_PROP_EVENT, AMEDIAMETRICS_PROP_EVENT_VALUE_SETLOGSESSIONID)
+ .set(AMEDIAMETRICS_PROP_LOGSESSIONID, logSessionId)
+ .record();
+}
+
// =========================================================================
void AudioRecord::DeathNotifier::binderDied(const wp<IBinder>& who __unused)
diff --git a/media/libaudioclient/AudioTrack.cpp b/media/libaudioclient/AudioTrack.cpp
index b7ba30d..d2f714a 100644
--- a/media/libaudioclient/AudioTrack.cpp
+++ b/media/libaudioclient/AudioTrack.cpp
@@ -3269,6 +3269,7 @@
void AudioTrack::setLogSessionId(const char *logSessionId)
{
AutoMutex lock(mLock);
+ if (logSessionId == nullptr) logSessionId = ""; // an empty string is an unset session id.
if (mLogSessionId == logSessionId) return;
mLogSessionId = logSessionId;
diff --git a/media/libaudioclient/include/media/AudioRecord.h b/media/libaudioclient/include/media/AudioRecord.h
index 2f66658..d70d91e 100644
--- a/media/libaudioclient/include/media/AudioRecord.h
+++ b/media/libaudioclient/include/media/AudioRecord.h
@@ -578,6 +578,12 @@
*/
audio_port_handle_t getPortId() const { return mPortId; };
+ /* Sets the LogSessionId field which is used for metrics association of
+ * this object with other objects. A nullptr or empty string clears
+ * the logSessionId.
+ */
+ void setLogSessionId(const char *logSessionId);
+
/*
* Dumps the state of an audio record.
*/
@@ -701,6 +707,14 @@
audio_session_t mSessionId;
audio_port_handle_t mPortId; // Id from Audio Policy Manager
+
+ /**
+ * mLogSessionId is a string identifying this AudioRecord for the metrics service.
+ * It may be unique or shared with other objects. An empty string means the
+ * logSessionId is not set.
+ */
+ std::string mLogSessionId{};
+
transfer_type mTransfer;
// Next 5 fields may be changed if IAudioRecord is re-created, but always != 0
diff --git a/media/libaudioclient/include/media/AudioTrack.h b/media/libaudioclient/include/media/AudioTrack.h
index 51f1445..2609ec1 100644
--- a/media/libaudioclient/include/media/AudioTrack.h
+++ b/media/libaudioclient/include/media/AudioTrack.h
@@ -987,7 +987,8 @@
audio_port_handle_t getPortId() const { return mPortId; };
/* Sets the LogSessionId field which is used for metrics association of
- * this object with other objects.
+ * this object with other objects. A nullptr or empty string clears
+ * the logSessionId.
*/
void setLogSessionId(const char *logSessionId);
@@ -1279,7 +1280,8 @@
/**
* mLogSessionId is a string identifying this AudioTrack for the metrics service.
- * It may be unique or shared with other objects.
+ * It may be unique or shared with other objects. An empty string means the
+ * logSessionId is not set.
*/
std::string mLogSessionId{};