Bug 1830988 - Renew telemetry probes expiring in v116

fenix/114.1.0
Roger Yang 1 year ago committed by mergify[bot]
parent d5ad186095
commit bb81e099ad

@ -1379,11 +1379,12 @@ unified_search:
- https://github.com/mozilla-mobile/fenix/issues/24522
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/25544
- https://github.com/mozilla-mobile/firefox-android/pull/1875
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: 115
expires: 123
metadata:
tags:
- Search
@ -1401,9 +1402,10 @@ unified_search:
- https://github.com/mozilla-mobile/fenix/issues/24522
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/25544
- https://github.com/mozilla-mobile/firefox-android/pull/1875
notification_emails:
- android-probes@mozilla.com
expires: 115
expires: 123
metadata:
tags:
- Search
@ -4679,11 +4681,13 @@ tabs_tray:
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/20508#issuecomment-901336677
- https://github.com/mozilla-mobile/fenix/pull/25405#issuecomment-1139058237
- https://github.com/mozilla-mobile/firefox-android/pull/1875
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: 116
- cgordon@mozilla.com
expires: never
metadata:
tags:
- Tabs
@ -4697,11 +4701,13 @@ tabs_tray:
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/20508#issuecomment-901336677
- https://github.com/mozilla-mobile/fenix/pull/25405#issuecomment-1139058237
- https://github.com/mozilla-mobile/firefox-android/pull/1875
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: 116
- cgordon@mozilla.com
expires: never
metadata:
tags:
- Tabs
@ -6965,11 +6971,13 @@ addons:
- https://github.com/mozilla-mobile/fenix/pull/19924#issuecomment-861423789
- https://github.com/mozilla-mobile/fenix/pull/21316#issuecomment-944615938
- https://github.com/mozilla-mobile/fenix/pull/25405#issuecomment-1139058237
- https://github.com/mozilla-mobile/firefox-android/pull/1875
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: 116
- cgordon@mozilla.com
expires: never
metadata:
tags:
- WebExtensions
@ -6992,11 +7000,13 @@ addons:
- https://github.com/mozilla-mobile/fenix/pull/19924#issuecomment-861423789
- https://github.com/mozilla-mobile/fenix/pull/21316#issuecomment-944615938
- https://github.com/mozilla-mobile/fenix/pull/25405#issuecomment-1139058237
- https://github.com/mozilla-mobile/firefox-android/pull/1875
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: 116
- cgordon@mozilla.com
expires: never
metadata:
tags:
- WebExtensions
@ -7088,11 +7098,13 @@ addons:
- https://github.com/mozilla-mobile/fenix/pull/19924#issuecomment-861423789
- https://github.com/mozilla-mobile/fenix/pull/21316#issuecomment-944615938
- https://github.com/mozilla-mobile/fenix/pull/25405#issuecomment-1139058237
- https://github.com/mozilla-mobile/firefox-android/pull/1875
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: 116
- cgordon@mozilla.com
expires: never
metadata:
tags:
- WebExtensions
@ -7703,11 +7715,12 @@ site_permissions:
- https://github.com/mozilla-mobile/fenix/issues/25658
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/25664#issuecomment-1159151213
- https://github.com/mozilla-mobile/firefox-android/pull/1875
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: 115
expires: 123
metadata:
tags:
- SitePermissions
@ -7724,11 +7737,12 @@ site_permissions:
- https://github.com/mozilla-mobile/fenix/issues/25658
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/25664#issuecomment-1159151213
- https://github.com/mozilla-mobile/firefox-android/pull/1875
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: 115
expires: 123
metadata:
tags:
- SitePermissions
@ -7745,11 +7759,12 @@ site_permissions:
- https://github.com/mozilla-mobile/fenix/issues/25658
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/25664#issuecomment-1159151213
- https://github.com/mozilla-mobile/firefox-android/pull/1875
data_sensitivity:
- interaction
notification_emails:
- android-probes@mozilla.com
expires: 115
expires: 123
metadata:
tags:
- SitePermissions
@ -8030,123 +8045,6 @@ contextual_menu:
- TextSelection
engine_tab:
kills:
type: labeled_counter
labels:
- foreground
- background
description: |
How often was the content process of a foreground (selected) or
background tab killed.
bugs:
- https://github.com/mozilla-mobile/android-components/issues/9366
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/17864
- https://github.com/mozilla-mobile/fenix/pull/19924#issuecomment-861423789
- https://github.com/mozilla-mobile/fenix/pull/21779#issuecomment-938089467
- https://github.com/mozilla-mobile/fenix/pull/25405#issuecomment-1139058237
data_sensitivity:
- technical
notification_emails:
- android-probes@mozilla.com
expires: 116
metadata:
tags:
- Performance
kill_foreground_age:
type: timing_distribution
time_unit: millisecond
description: |
Measures the age of the engine session of a foreground (selected) tab
at the time its content process got killed.
bugs:
- https://github.com/mozilla-mobile/android-components/issues/9366
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/17864
- https://github.com/mozilla-mobile/fenix/pull/19924#issuecomment-861423789
- https://github.com/mozilla-mobile/fenix/pull/21779#issuecomment-938089467
- https://github.com/mozilla-mobile/fenix/pull/25405#issuecomment-1139058237
data_sensitivity:
- technical
notification_emails:
- android-probes@mozilla.com
expires: 116
metadata:
tags:
- Performance
kill_background_age:
type: timing_distribution
time_unit: millisecond
description: |
Measures the age of the engine session of a background tab at the
time its content process got killed.
bugs:
- https://github.com/mozilla-mobile/android-components/issues/9366
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/17864
- https://github.com/mozilla-mobile/fenix/pull/19924#issuecomment-861423789
- https://github.com/mozilla-mobile/fenix/pull/21779#issuecomment-938089467
- https://github.com/mozilla-mobile/fenix/pull/25405#issuecomment-1139058237
data_sensitivity:
- technical
notification_emails:
- android-probes@mozilla.com
expires: 116
metadata:
tags:
- Performance
foreground_metrics:
type: event
description: |
Event collecting data about the state of tabs when the app comes back to
the foreground.
bugs:
- https://github.com/mozilla-mobile/android-components/issues/9997
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/18747#issuecomment-815731764
- https://github.com/mozilla-mobile/fenix/pull/19924#issuecomment-861423789
- https://github.com/mozilla-mobile/fenix/pull/21779#issuecomment-938089467
- https://github.com/mozilla-mobile/fenix/pull/25405#issuecomment-1139058237
data_sensitivity:
- technical
notification_emails:
- android-probes@mozilla.com
expires: 116
extra_keys:
background_active_tabs:
description: |
Number of active tabs (with an engine session assigned) when the app
went to the background.
type: string
background_crashed_tabs:
description: |
Number of tabs marked as crashed when the app went to the background.
type: string
background_total_tabs:
description: |
Number of total tabs when the app went to the background.
type: string
foreground_active_tabs:
description: |
Number of active tabs (with an engine session assigned) when the
app came back to the foreground.
type: string
foreground_crashed_tabs:
description: |
Number of tabs marked as crashed when the app came back to the
foreground.
type: string
foreground_total_tabs:
description: |
Number of total tabs when the app came back to the foreground.
type: string
time_in_background:
description: |
Time (in milliseconds) the app was in the background.
type: string
metadata:
tags:
- Performance
tab_killed:
type: event
description: |
@ -9230,11 +9128,12 @@ wallpapers:
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/23382
- https://github.com/mozilla-mobile/fenix/pull/26893
- https://github.com/mozilla-mobile/firefox-android/pull/1875
notification_emails:
- android-probes@mozilla.com
data_sensitivity:
- interaction
expires: 116
expires: 123
no_lint:
- COMMON_PREFIX
metadata:
@ -9248,11 +9147,12 @@ wallpapers:
- https://github.com/mozilla-mobile/fenix/issues/26215
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/26893
- https://github.com/mozilla-mobile/firefox-android/pull/1875
notification_emails:
- android-probes@mozilla.com
data_sensitivity:
- interaction
expires: 116
expires: 123
metadata:
tags:
- Wallpapers
@ -9268,11 +9168,12 @@ wallpapers:
- https://github.com/mozilla-mobile/fenix/issues/26215
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/26893
- https://github.com/mozilla-mobile/firefox-android/pull/1875
notification_emails:
- android-probes@mozilla.com
data_sensitivity:
- interaction
expires: 116
expires: 123
metadata:
tags:
- Wallpapers
@ -9284,11 +9185,12 @@ wallpapers:
- https://github.com/mozilla-mobile/fenix/issues/26215
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/26893
- https://github.com/mozilla-mobile/firefox-android/pull/1875
notification_emails:
- android-probes@mozilla.com
data_sensitivity:
- interaction
expires: 116
expires: 123
metadata:
tags:
- Wallpapers
@ -9307,11 +9209,12 @@ wallpapers:
- https://github:com/mozilla-mobile/fenix/issues/26945
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/26990
- https://github.com/mozilla-mobile/firefox-android/pull/1875
notification_emails:
- android-probes@mozilla.com
data_sensitivity:
- interaction
expires: 116
expires: 123
metadata:
tags:
- Wallpapers

@ -99,7 +99,6 @@ import org.mozilla.fenix.push.WebPushEngineIntegration
import org.mozilla.fenix.session.PerformanceActivityLifecycleCallbacks
import org.mozilla.fenix.session.VisibilityLifecycleCallback
import org.mozilla.fenix.settings.CustomizationFragment
import org.mozilla.fenix.telemetry.TelemetryLifecycleObserver
import org.mozilla.fenix.utils.BrowsersCache
import org.mozilla.fenix.utils.Settings
import org.mozilla.fenix.utils.Settings.Companion.TOP_SITES_PROVIDER_MAX_THRESHOLD
@ -280,7 +279,6 @@ open class FenixApplication : LocaleAwareApplication(), Provider {
initVisualCompletenessQueueAndQueueTasks()
ProcessLifecycleOwner.get().lifecycle.addObservers(
TelemetryLifecycleObserver(components.core.store),
StoreLifecycleObserver(
appStore = components.appStore,
browserStore = components.core.store,

@ -1,76 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.telemetry
import androidx.lifecycle.DefaultLifecycleObserver
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.LifecycleOwner
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.support.base.android.Clock
import org.mozilla.fenix.GleanMetrics.EngineTab as EngineMetrics
import org.mozilla.fenix.GleanMetrics.EngineTab.ForegroundMetricsExtra as MetricsExtra
/**
* [LifecycleObserver] to used on the process lifecycle to measure the amount of tabs getting killed
* while the app is in the background.
*
* See:
* - https://github.com/mozilla-mobile/android-components/issues/9624
* - https://github.com/mozilla-mobile/android-components/issues/9997
*/
class TelemetryLifecycleObserver(
private val store: BrowserStore,
) : DefaultLifecycleObserver {
private var pausedState: TabState? = null
override fun onPause(owner: LifecycleOwner) {
pausedState = createTabState()
}
override fun onResume(owner: LifecycleOwner) {
val lastState = pausedState ?: return
val currentState = createTabState()
EngineMetrics.foregroundMetrics.record(
MetricsExtra(
backgroundActiveTabs = lastState.activeEngineTabs.toString(),
backgroundCrashedTabs = lastState.crashedTabs.toString(),
backgroundTotalTabs = lastState.totalTabs.toString(),
foregroundActiveTabs = currentState.activeEngineTabs.toString(),
foregroundCrashedTabs = currentState.crashedTabs.toString(),
foregroundTotalTabs = currentState.totalTabs.toString(),
timeInBackground = (currentState.timestamp - lastState.timestamp).toString(),
),
)
pausedState = null
}
private fun createTabState(): TabState {
val tabsWithEngineSession = store.state.tabs
.filter { tab -> tab.engineState.engineSession != null }
.filter { tab -> !tab.engineState.crashed }
.count()
val totalTabs = store.state.tabs.count()
val crashedTabs = store.state.tabs
.filter { tab -> tab.engineState.crashed }
.count()
return TabState(
activeEngineTabs = tabsWithEngineSession,
totalTabs = totalTabs,
crashedTabs = crashedTabs,
)
}
private data class TabState(
val timestamp: Long = Clock.elapsedRealtime(),
val totalTabs: Int,
val crashedTabs: Int,
val activeEngineTabs: Int,
)
}

@ -14,12 +14,10 @@ import mozilla.components.browser.state.selector.findTab
import mozilla.components.browser.state.selector.findTabOrCustomTab
import mozilla.components.browser.state.selector.normalTabs
import mozilla.components.browser.state.state.BrowserState
import mozilla.components.browser.state.state.EngineState
import mozilla.components.browser.state.state.SessionState
import mozilla.components.concept.base.crash.CrashReporting
import mozilla.components.lib.state.Middleware
import mozilla.components.lib.state.MiddlewareContext
import mozilla.components.support.base.android.Clock
import mozilla.components.support.base.log.logger.Logger
import mozilla.telemetry.glean.private.NoExtras
import org.mozilla.fenix.Config
@ -119,11 +117,8 @@ class TelemetryMiddleware(
}
val isSelected = tab.id == state.selectedTabId
val age = tab.engineState.age()
// Increment the counter of killed foreground/background tabs
val tabKillLabel = if (isSelected) { "foreground" } else { "background" }
EngineMetrics.kills[tabKillLabel].add()
EngineMetrics.tabKilled.record(
EngineMetrics.TabKilledExtra(
foregroundTab = isSelected,
@ -131,19 +126,5 @@ class TelemetryMiddleware(
hadFormData = tab.content.hasFormData,
),
)
// Record the age of the engine session of the killed foreground/background tab.
if (isSelected && age != null) {
EngineMetrics.killForegroundAge.accumulateSamples(listOf(age))
} else if (age != null) {
EngineMetrics.killBackgroundAge.accumulateSamples(listOf(age))
}
}
}
@Suppress("MagicNumber")
private fun EngineState.age(): Long? {
val timestamp = (timestamp ?: return null)
val now = Clock.elapsedRealtime()
return (now - timestamp)
}

@ -1,123 +0,0 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.telemetry
import androidx.test.core.app.ApplicationProvider
import io.mockk.mockk
import mozilla.components.browser.state.action.EngineAction
import mozilla.components.browser.state.engine.EngineMiddleware
import mozilla.components.browser.state.state.BrowserState
import mozilla.components.browser.state.state.createTab
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.service.glean.testing.GleanTestRule
import mozilla.components.support.base.android.Clock
import mozilla.components.support.test.ext.joinBlocking
import org.junit.After
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull
import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
import org.mozilla.fenix.GleanMetrics.EngineTab as EngineMetrics
@RunWith(FenixRobolectricTestRunner::class)
class TelemetryLifecycleObserverTest {
@get:Rule
val gleanRule = GleanTestRule(ApplicationProvider.getApplicationContext())
private val clock = FakeClock()
@Before
fun setUp() {
Clock.delegate = clock
}
@After
fun tearDown() {
Clock.reset()
}
@Test
fun `resume without a pause does not record any metrics`() {
val store = BrowserStore()
val observer = TelemetryLifecycleObserver(store)
observer.onResume(mockk())
assertNull(EngineMetrics.foregroundMetrics.testGetValue())
}
@Test
fun `resume after pause records metrics`() {
val store = BrowserStore()
val observer = TelemetryLifecycleObserver(store)
observer.onPause(mockk())
clock.elapsedTime = 550
observer.onResume(mockk())
assertNotNull(EngineMetrics.foregroundMetrics.testGetValue())
val metrics = EngineMetrics.foregroundMetrics.testGetValue()!!
assertEquals(1, metrics.size)
val metric = metrics[0]
assertNotNull(metric.extra)
assertEquals("550", metric.extra!!["time_in_background"])
}
@Test
fun `resume records expected values`() {
val store = BrowserStore(
initialState = BrowserState(
tabs = listOf(
createTab("https://www.mozilla.org", id = "mozilla", engineSession = mockk(relaxed = true)),
createTab("https://news.google.com", id = "news"),
createTab("https://theverge.com", id = "theverge", engineSession = mockk(relaxed = true)),
createTab("https://www.google.com", id = "google", engineSession = mockk(relaxed = true)),
createTab("https://getpocket.com", id = "pocket", crashed = true),
),
),
middleware = EngineMiddleware.create(engine = mockk()),
)
val observer = TelemetryLifecycleObserver(store)
clock.elapsedTime = 120
observer.onPause(mockk())
store.dispatch(
EngineAction.KillEngineSessionAction("theverge"),
).joinBlocking()
store.dispatch(
EngineAction.SuspendEngineSessionAction("mozilla"),
).joinBlocking()
clock.elapsedTime = 10340
observer.onResume(mockk())
assertNotNull(EngineMetrics.foregroundMetrics.testGetValue())
val metrics = EngineMetrics.foregroundMetrics.testGetValue()!!
assertEquals(1, metrics.size)
val metric = metrics[0]
assertNotNull(metric.extra)
assertEquals("10220", metric.extra!!["time_in_background"])
assertEquals("3", metric.extra!!["background_active_tabs"])
assertEquals("1", metric.extra!!["background_crashed_tabs"])
assertEquals("5", metric.extra!!["background_total_tabs"])
assertEquals("1", metric.extra!!["foreground_active_tabs"])
assertEquals("1", metric.extra!!["foreground_crashed_tabs"])
assertEquals("5", metric.extra!!["foreground_total_tabs"])
}
}

@ -232,68 +232,6 @@ class TelemetryMiddlewareTest {
assertEquals(1, count)
}
@Test
fun `WHEN foreground tab getting killed THEN middleware counts it`() {
store.dispatch(
TabListAction.RestoreAction(
listOf(
RecoverableTab(null, TabState(url = "https://www.mozilla.org", id = "foreground")),
RecoverableTab(null, TabState(url = "https://developer.mozilla.org", id = "foreground_form_data", hasFormData = true)),
RecoverableTab(null, TabState(url = "https://getpocket.com", id = "background_pocket")),
RecoverableTab(null, TabState(url = "https://theverge.com", id = "background_verge")),
),
selectedTabId = "foreground",
restoreLocation = TabListAction.RestoreAction.RestoreLocation.BEGINNING,
),
).joinBlocking()
assertNull(EngineMetrics.kills["foreground"].testGetValue())
assertNull(EngineMetrics.kills["foreground-has-form-data"].testGetValue())
assertNull(EngineMetrics.kills["background"].testGetValue())
store.dispatch(
EngineAction.KillEngineSessionAction("foreground"),
).joinBlocking()
store.dispatch(
EngineAction.KillEngineSessionAction("foreground_form_data"),
).joinBlocking()
assertEquals(1, EngineMetrics.kills["foreground"].testGetValue())
}
@Test
fun `WHEN background tabs getting killed THEN middleware counts it`() {
store.dispatch(
TabListAction.RestoreAction(
listOf(
RecoverableTab(null, TabState(url = "https://www.mozilla.org", id = "foreground")),
RecoverableTab(null, TabState(url = "https://getpocket.com", id = "background_pocket")),
RecoverableTab(null, TabState(url = "https://theverge.com", id = "background_verge")),
),
selectedTabId = "foreground",
restoreLocation = TabListAction.RestoreAction.RestoreLocation.BEGINNING,
),
).joinBlocking()
assertNull(EngineMetrics.kills["foreground"].testGetValue())
assertNull(EngineMetrics.kills["background"].testGetValue())
store.dispatch(
EngineAction.KillEngineSessionAction("background_pocket"),
).joinBlocking()
assertNull(EngineMetrics.kills["foreground"].testGetValue())
assertEquals(1, EngineMetrics.kills["background"].testGetValue())
store.dispatch(
EngineAction.KillEngineSessionAction("background_verge"),
).joinBlocking()
assertNull(EngineMetrics.kills["foreground"].testGetValue())
assertEquals(2, EngineMetrics.kills["background"].testGetValue())
}
@Test
fun `WHEN tabs gets killed THEN middleware sends an event`() {
store.dispatch(
@ -336,78 +274,6 @@ class TelemetryMiddlewareTest {
}
}
@Test
fun `WHEN foreground tab gets killed THEN middleware records foreground age`() {
store.dispatch(
TabListAction.RestoreAction(
listOf(
RecoverableTab(null, TabState(url = "https://www.mozilla.org", id = "foreground")),
RecoverableTab(null, TabState(url = "https://getpocket.com", id = "background_pocket")),
RecoverableTab(null, TabState(url = "https://theverge.com", id = "background_verge")),
),
selectedTabId = "foreground",
restoreLocation = TabListAction.RestoreAction.RestoreLocation.BEGINNING,
),
).joinBlocking()
clock.elapsedTime = 100
store.dispatch(
EngineAction.LinkEngineSessionAction(
tabId = "foreground",
engineSession = mockk(relaxed = true),
),
).joinBlocking()
assertNull(EngineMetrics.killForegroundAge.testGetValue())
assertNull(EngineMetrics.killBackgroundAge.testGetValue())
clock.elapsedTime = 500
store.dispatch(
EngineAction.KillEngineSessionAction("foreground"),
).joinBlocking()
assertNull(EngineMetrics.killBackgroundAge.testGetValue())
assertEquals(400_000_000, EngineMetrics.killForegroundAge.testGetValue()!!.sum)
}
@Test
fun `WHEN background tab gets killed THEN middleware records background age`() {
store.dispatch(
TabListAction.RestoreAction(
listOf(
RecoverableTab(null, TabState(url = "https://www.mozilla.org", id = "foreground")),
RecoverableTab(null, TabState(url = "https://getpocket.com", id = "background_pocket")),
RecoverableTab(null, TabState(url = "https://theverge.com", id = "background_verge")),
),
selectedTabId = "foreground",
restoreLocation = TabListAction.RestoreAction.RestoreLocation.BEGINNING,
),
).joinBlocking()
clock.elapsedTime = 100
store.dispatch(
EngineAction.LinkEngineSessionAction(
tabId = "background_pocket",
engineSession = mockk(relaxed = true),
),
).joinBlocking()
clock.elapsedTime = 700
assertNull(EngineMetrics.killForegroundAge.testGetValue())
assertNull(EngineMetrics.killBackgroundAge.testGetValue())
store.dispatch(
EngineAction.KillEngineSessionAction("background_pocket"),
).joinBlocking()
assertNull(EngineMetrics.killForegroundAge.testGetValue())
assertEquals(600_000_000, EngineMetrics.killBackgroundAge.testGetValue()!!.sum)
}
@Test
fun `GIVEN the request to check for form data WHEN it fails THEN telemetry is sent`() {
assertNull(Events.formDataFailure.testGetValue())

Loading…
Cancel
Save