Add log session id to MediaParser
Bug: 167036690
Test: atest CtsMediaParserHostTestCases
Change-Id: Idee9c7248ee6107379c8e58410346b8c92d3c250
Merged-In: Idee9c7248ee6107379c8e58410346b8c92d3c250
diff --git a/apex/media/framework/Android.bp b/apex/media/framework/Android.bp
index 7020f18..1bf732b 100644
--- a/apex/media/framework/Android.bp
+++ b/apex/media/framework/Android.bp
@@ -41,7 +41,10 @@
installable: true,
sdk_version: "module_current",
- libs: ["framework-annotations-lib"],
+ libs: [
+ "androidx.annotation_annotation",
+ "framework-annotations-lib",
+ ],
static_libs: [
"exoplayer2-extractor",
"mediatranscoding_aidl_interface-java",
diff --git a/apex/media/framework/java/android/media/MediaParser.java b/apex/media/framework/java/android/media/MediaParser.java
index cff422d..8cc3bc0 100644
--- a/apex/media/framework/java/android/media/MediaParser.java
+++ b/apex/media/framework/java/android/media/MediaParser.java
@@ -28,6 +28,10 @@
import android.util.Pair;
import android.util.SparseArray;
+import androidx.annotation.RequiresApi;
+
+import com.android.modules.utils.build.SdkLevel;
+
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.Format;
import com.google.android.exoplayer2.ParserException;
@@ -1068,7 +1072,7 @@
private boolean mReleased;
// MediaMetrics fields.
- @NonNull private LogSessionId mLogSessionId = LogSessionId.LOG_SESSION_ID_NONE;
+ @Nullable private LogSessionId mLogSessionId;
private final boolean mCreatedByName;
private final SparseArray<Format> mTrackFormats;
private String mLastObservedExceptionName;
@@ -1331,7 +1335,7 @@
MEDIAMETRICS_PARAMETER_LIST_MAX_LENGTH));
nativeSubmitMetrics(
- // TODO: mLogSessionId,
+ SdkLevel.isAtLeastS() ? getLogSessionIdStringV31() : "",
mParserName,
mCreatedByName,
String.join(MEDIAMETRICS_ELEMENT_SEPARATOR, mParserNamesPool),
@@ -1345,13 +1349,15 @@
videoHeight);
}
- public void setLogSessionId(@NonNull LogSessionId sessionId) {
- this.mLogSessionId = Objects.requireNonNull(sessionId);
+ @RequiresApi(31)
+ public void setLogSessionId(@NonNull LogSessionId logSessionId) {
+ this.mLogSessionId = Objects.requireNonNull(logSessionId);
}
+ @RequiresApi(31)
@NonNull
public LogSessionId getLogSessionId() {
- return mLogSessionId;
+ return mLogSessionId != null ? mLogSessionId : LogSessionId.LOG_SESSION_ID_NONE;
}
// Private methods.
@@ -1548,6 +1554,11 @@
return (String) mParserParameters.getOrDefault(name, defaultValue);
}
+ @RequiresApi(31)
+ private String getLogSessionIdStringV31() {
+ return mLogSessionId != null ? mLogSessionId.getStringId() : "";
+ }
+
// Private classes.
private static final class InputReadingDataReader implements DataReader {
@@ -2197,7 +2208,7 @@
// Native methods.
private native void nativeSubmitMetrics(
- // TODO: String logSessionId,
+ String logSessionId,
String parserName,
boolean createdByName,
String parserPool,
diff --git a/apex/media/framework/jni/android_media_MediaParserJNI.cpp b/apex/media/framework/jni/android_media_MediaParserJNI.cpp
index 7fc4628..c81152c 100644
--- a/apex/media/framework/jni/android_media_MediaParserJNI.cpp
+++ b/apex/media/framework/jni/android_media_MediaParserJNI.cpp
@@ -29,6 +29,7 @@
constexpr char kMediaMetricsKey[] = "mediaparser";
+constexpr char kAttributeLogSessionId[] = "android.media.mediaparser.logSessionId";
constexpr char kAttributeParserName[] = "android.media.mediaparser.parserName";
constexpr char kAttributeCreatedByName[] = "android.media.mediaparser.createdByName";
constexpr char kAttributeParserPool[] = "android.media.mediaparser.parserPool";
@@ -65,11 +66,14 @@
} // namespace
-JNI_FUNCTION(void, nativeSubmitMetrics, jstring parserNameJstring, jboolean createdByName,
- jstring parserPoolJstring, jstring lastExceptionJstring, jlong resourceByteCount,
- jlong durationMillis, jstring trackMimeTypesJstring, jstring trackCodecsJstring,
- jstring alteredParameters, jint videoWidth, jint videoHeight) {
+JNI_FUNCTION(void, nativeSubmitMetrics, jstring logSessionIdJstring, jstring parserNameJstring,
+ jboolean createdByName, jstring parserPoolJstring, jstring lastExceptionJstring,
+ jlong resourceByteCount, jlong durationMillis, jstring trackMimeTypesJstring,
+ jstring trackCodecsJstring, jstring alteredParameters, jint videoWidth,
+ jint videoHeight) {
mediametrics_handle_t item(mediametrics_create(kMediaMetricsKey));
+ mediametrics_setCString(item, kAttributeLogSessionId,
+ JstringHandle(env, logSessionIdJstring).value());
mediametrics_setCString(item, kAttributeParserName,
JstringHandle(env, parserNameJstring).value());
mediametrics_setInt32(item, kAttributeCreatedByName, createdByName ? 1 : 0);