diff --git a/firebase-perf/src/main/java/com/google/firebase/perf/transport/TransportManager.java b/firebase-perf/src/main/java/com/google/firebase/perf/transport/TransportManager.java index 159af53d3d3..6bfb3c9ef2c 100644 --- a/firebase-perf/src/main/java/com/google/firebase/perf/transport/TransportManager.java +++ b/firebase-perf/src/main/java/com/google/firebase/perf/transport/TransportManager.java @@ -14,6 +14,7 @@ package com.google.firebase.perf.transport; +import static com.google.firebase.sessions.ProcessDetailsProvider.getProcessDetailsProvider; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static java.util.concurrent.TimeUnit.MINUTES; @@ -230,6 +231,8 @@ private void finishInitialization() { applicationInfoBuilder = ApplicationInfo.newBuilder(); applicationInfoBuilder .setGoogleAppId(firebaseApp.getOptions().getApplicationId()) + .setProcessName( + getProcessDetailsProvider().getCurrentProcessDetails(appContext).getProcessName()) .setAndroidAppInfo( AndroidApplicationInfo.newBuilder() .setPackageName(packageName) diff --git a/firebase-perf/src/main/proto/firebase/perf/v1/perf_metric.proto b/firebase-perf/src/main/proto/firebase/perf/v1/perf_metric.proto index 8da196c0281..e10a1191671 100644 --- a/firebase-perf/src/main/proto/firebase/perf/v1/perf_metric.proto +++ b/firebase-perf/src/main/proto/firebase/perf/v1/perf_metric.proto @@ -292,7 +292,7 @@ message GaugeMetadata { // Additional metadata about an application and its state (including state of // the device at runtime) that is not provided by firebase data transport. // -// Next tag: 8 +// Next tag: 9 message ApplicationInfo { // Identifier for the application that has been registered with firebase. // Contains pantheon project number, platform and the hash of the (package @@ -316,6 +316,9 @@ message ApplicationInfo { // A map of global-level custom attribute names to values. map custom_attributes = 6; + + // The name of process that initiate the event. Currently only populated for Android apps. + optional string process_name = 8; } // Additional metadata about an android application that is not provided by diff --git a/firebase-perf/src/test/java/com/google/firebase/perf/transport/TransportManagerTest.java b/firebase-perf/src/test/java/com/google/firebase/perf/transport/TransportManagerTest.java index b10a48e135f..07b50c4377d 100644 --- a/firebase-perf/src/test/java/com/google/firebase/perf/transport/TransportManagerTest.java +++ b/firebase-perf/src/test/java/com/google/firebase/perf/transport/TransportManagerTest.java @@ -30,6 +30,7 @@ import android.content.Context; import android.content.pm.PackageInfo; +import android.os.Process; import androidx.test.core.app.ApplicationProvider; import com.google.android.datatransport.TransportFactory; import com.google.android.gms.tasks.Tasks; @@ -1399,6 +1400,11 @@ private void initializeTransport(boolean shouldInitialize) { if (shouldInitialize) { // Set the version name since Firebase sessions needs it. Context context = ApplicationProvider.getApplicationContext(); + + // For unit test, app context does not application info related to uid, so we have to force + // set it through process info. + context.getApplicationInfo().uid = Process.myUid(); + ShadowPackageManager shadowPackageManager = shadowOf(context.getPackageManager()); PackageInfo packageInfo = @@ -1468,6 +1474,8 @@ private static void validateApplicationInfo( .isEqualTo(FAKE_FIREBASE_APPLICATION_ID); assertThat(loggedPerfMetric.getApplicationInfo().getApplicationProcessState()) .isEqualTo(applicationProcessState); + assertThat(loggedPerfMetric.getApplicationInfo().getProcessName()) + .isEqualTo("com.google.firebase.perf.test"); assertThat(loggedPerfMetric.getApplicationInfo().hasAndroidAppInfo()).isTrue(); } diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/ProcessDetailsProvider.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/ProcessDetailsProvider.kt index 65d1dfbbc60..9a86a997513 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/ProcessDetailsProvider.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/ProcessDetailsProvider.kt @@ -28,7 +28,11 @@ import com.google.android.gms.common.util.ProcessUtils * * @hide */ -internal object ProcessDetailsProvider { +object ProcessDetailsProvider { + @JvmStatic + fun getProcessDetailsProvider(): ProcessDetailsProvider { + return this + } /** Gets the details for all of this app's running processes. */ fun getAppProcessDetails(context: Context): List { val appUid = context.applicationInfo.uid diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionEvent.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionEvent.kt index c9eff6684f6..0e37dcddadd 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionEvent.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionEvent.kt @@ -81,7 +81,7 @@ internal data class DataCollectionStatus( ) /** Container for information about the process */ -internal data class ProcessDetails( +data class ProcessDetails( val processName: String, val pid: Int, val importance: Int,