Merge "libmediadrm: save IPC failure logs" into sc-dev
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{};
diff --git a/media/ndk/NdkMediaDrm.cpp b/media/ndk/NdkMediaDrm.cpp
index 3af9771..6e9945d 100644
--- a/media/ndk/NdkMediaDrm.cpp
+++ b/media/ndk/NdkMediaDrm.cpp
@@ -380,12 +380,15 @@
}
Vector<uint8_t> session;
status_t status = mObj->mDrm->openSession(DrmPlugin::kSecurityLevelMax, session);
- if (status == OK) {
- mObj->mIds.push_front(session);
- List<idvec_t>::iterator iter = mObj->mIds.begin();
- sessionId->ptr = iter->array();
- sessionId->length = iter->size();
+ if (status != OK) {
+ sessionId->ptr = NULL;
+ sessionId->length = 0;
+ return translateStatus(status);
}
+ mObj->mIds.push_front(session);
+ List<idvec_t>::iterator iter = mObj->mIds.begin();
+ sessionId->ptr = iter->array();
+ sessionId->length = iter->size();
return AMEDIA_OK;
}
@@ -489,6 +492,7 @@
} else {
keySetId->ptr = NULL;
keySetId->length = 0;
+ return translateStatus(status);
}
return AMEDIA_OK;
}