1
0
Fork 0

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
Will Hawkins 2019-11-12 23:14:23 -05:00 committed by Christian Sadilek
parent ddd484387d
commit 7173bdf0b1
1 changed files with 11 additions and 10 deletions

View File

@ -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()
// 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)
}