Issue #6196: Make initialization of Glean metrics faster
setStartupMetrics is very expensive and does not need to be done synchronously at the time the Glean Metrics Service is initialized.master
parent
ddd484387d
commit
7173bdf0b1
|
@ -6,9 +6,8 @@ package org.mozilla.fenix.components.metrics
|
|||
|
||||
import android.content.Context
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.MainScope
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.MainScope
|
||||
import mozilla.components.service.glean.BuildConfig
|
||||
import mozilla.components.service.glean.Glean
|
||||
import mozilla.components.service.glean.config.Configuration
|
||||
|
@ -439,7 +438,8 @@ class GleanMetricsService(private val context: Context) : MetricsService {
|
|||
* We need to keep an eye on when we are done starting so that we don't
|
||||
* accidentally stop ourselves before we've ever started.
|
||||
*/
|
||||
private lateinit var starter: Job
|
||||
private lateinit var gleanInitializer: Job
|
||||
private lateinit var gleanSetStartupMetrics: Job
|
||||
|
||||
private val activationPing = ActivationPing(context)
|
||||
|
||||
|
@ -454,7 +454,7 @@ class GleanMetricsService(private val context: Context) : MetricsService {
|
|||
// because it calls Google ad APIs that must be called *off* of the main thread.
|
||||
// These two things actually happen in parallel, but that should be ok because Glean
|
||||
// can handle events being recorded before it's initialized.
|
||||
starter = MainScope().launch {
|
||||
gleanInitializer = MainScope().launch {
|
||||
Glean.registerPings(Pings)
|
||||
Glean.initialize(context,
|
||||
Configuration(channel = BuildConfig.BUILD_TYPE,
|
||||
|
@ -462,8 +462,11 @@ class GleanMetricsService(private val context: Context) : MetricsService {
|
|||
lazy(LazyThreadSafetyMode.NONE) { context.components.core.client }
|
||||
)))
|
||||
}
|
||||
|
||||
// setStartupMetrics is not a fast function. It does not need to be done before we can consider
|
||||
// ourselves initialized. So, let's do it, well, later.
|
||||
gleanSetStartupMetrics = MainScope().launch {
|
||||
setStartupMetrics()
|
||||
}
|
||||
|
||||
context.settings().totalUriCount = 0
|
||||
}
|
||||
|
@ -495,10 +498,8 @@ class GleanMetricsService(private val context: Context) : MetricsService {
|
|||
}
|
||||
|
||||
override fun stop() {
|
||||
/*
|
||||
* We cannot stop until we're done starting.
|
||||
*/
|
||||
runBlocking { starter.join(); }
|
||||
gleanInitializer.cancel()
|
||||
gleanSetStartupMetrics.cancel()
|
||||
Glean.setUploadEnabled(false)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue