diff --git a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionLifecycleService.kt b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionLifecycleService.kt index 6807d8bec69..85930dc5455 100644 --- a/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionLifecycleService.kt +++ b/firebase-sessions/src/main/kotlin/com/google/firebase/sessions/SessionLifecycleService.kt @@ -193,6 +193,7 @@ internal class SessionLifecycleService : Service() { handlerThread.start() messageHandler = MessageHandler(handlerThread.looper) messenger = Messenger(messageHandler) + Log.d(TAG, "Service created on process ${android.os.Process.myPid()}") } /** Called when a new [SessionLifecycleClient] binds to this service. */ diff --git a/firebase-sessions/test-app/src/main/kotlin/com/google/firebase/testing/sessions/BaseActivity.kt b/firebase-sessions/test-app/src/main/kotlin/com/google/firebase/testing/sessions/BaseActivity.kt index 8c2670696aa..8163abbccf2 100644 --- a/firebase-sessions/test-app/src/main/kotlin/com/google/firebase/testing/sessions/BaseActivity.kt +++ b/firebase-sessions/test-app/src/main/kotlin/com/google/firebase/testing/sessions/BaseActivity.kt @@ -24,12 +24,16 @@ import android.os.Bundle import android.util.Log import androidx.appcompat.app.AppCompatActivity import com.google.firebase.FirebaseApp +import com.google.firebase.perf.FirebasePerformance open class BaseActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) FirebaseApp.initializeApp(this) + setProcessAttribute() + logProcessDetails() + logFirebaseDetails() Log.i(TAG, "onCreate - ${getProcessName()} - ${getImportance()}") } @@ -64,9 +68,31 @@ open class BaseActivity : AppCompatActivity() { return processInfo.importance } - private fun getProcessName(): String = + protected fun getProcessName(): String = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) Application.getProcessName() else "unknown" + private fun logProcessDetails() { + val pid = android.os.Process.myPid() + val uid = android.os.Process.myUid() + val activity = javaClass.name + val process = getProcessName() + Log.i(TAG, "activity: $activity process: $process, pid: $pid, uid: $uid") + } + + private fun logFirebaseDetails() { + val activity = javaClass.name + val firebaseApps = FirebaseApp.getApps(this) + val defaultFirebaseApp = FirebaseApp.getInstance() + Log.i( + TAG, + "activity: $activity firebase: ${defaultFirebaseApp.name} appsCount: ${firebaseApps.count()}" + ) + } + + private fun setProcessAttribute() { + FirebasePerformance.getInstance().putAttribute("process_name", getProcessName()) + } + companion object { val TAG = "BaseActivity" } diff --git a/firebase-sessions/test-app/src/main/kotlin/com/google/firebase/testing/sessions/FirstFragment.kt b/firebase-sessions/test-app/src/main/kotlin/com/google/firebase/testing/sessions/FirstFragment.kt index 88488a4cc92..f5a965da7d4 100644 --- a/firebase-sessions/test-app/src/main/kotlin/com/google/firebase/testing/sessions/FirstFragment.kt +++ b/firebase-sessions/test-app/src/main/kotlin/com/google/firebase/testing/sessions/FirstFragment.kt @@ -16,6 +16,7 @@ package com.google.firebase.testing.sessions +import android.app.Application import android.content.Intent import android.content.Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT import android.content.Intent.FLAG_ACTIVITY_NEW_TASK @@ -26,14 +27,20 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.fragment.app.Fragment +import androidx.lifecycle.lifecycleScope import com.google.firebase.crashlytics.FirebaseCrashlytics +import com.google.firebase.perf.FirebasePerformance import com.google.firebase.testing.sessions.databinding.FragmentFirstBinding import java.util.Date import java.util.Locale +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch /** A simple [Fragment] subclass as the default destination in the navigation. */ class FirstFragment : Fragment() { val crashlytics = FirebaseCrashlytics.getInstance() + val performance = FirebasePerformance.getInstance() private var _binding: FragmentFirstBinding? = null @@ -64,6 +71,14 @@ class FirstFragment : Fragment() { Thread.sleep(1_000) } } + binding.createTrace.setOnClickListener { + lifecycleScope.launch(Dispatchers.IO) { + val performanceTrace = performance.newTrace("test_trace") + performanceTrace.start() + delay(1000) + performanceTrace.stop() + } + } binding.buttonForegroundProcess.setOnClickListener { if (binding.buttonForegroundProcess.getText().startsWith("Start")) { ForegroundService.startService(requireContext(), "Starting service at ${getDateText()}") @@ -89,6 +104,7 @@ class FirstFragment : Fragment() { intent.addFlags(FLAG_ACTIVITY_NEW_TASK) startActivity(intent) } + binding.processName.text = getProcessName() } override fun onResume() { @@ -111,5 +127,9 @@ class FirstFragment : Fragment() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(Date()) else "unknown" + + fun getProcessName(): String = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) Application.getProcessName() + else "unknown" } } diff --git a/firebase-sessions/test-app/src/main/kotlin/com/google/firebase/testing/sessions/SecondActivity.kt b/firebase-sessions/test-app/src/main/kotlin/com/google/firebase/testing/sessions/SecondActivity.kt index 9272510d0f3..6c2fd3c06b0 100644 --- a/firebase-sessions/test-app/src/main/kotlin/com/google/firebase/testing/sessions/SecondActivity.kt +++ b/firebase-sessions/test-app/src/main/kotlin/com/google/firebase/testing/sessions/SecondActivity.kt @@ -22,10 +22,14 @@ import android.content.Intent.FLAG_ACTIVITY_NEW_TASK import android.os.Build import android.os.Bundle import android.widget.Button +import android.widget.TextView +import androidx.lifecycle.lifecycleScope +import com.google.firebase.perf.FirebasePerformance +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch /** Second activity from the MainActivity that runs on a different process. */ class SecondActivity : BaseActivity() { - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_second) @@ -38,12 +42,21 @@ class SecondActivity : BaseActivity() { findViewById