2
0
mirror of https://github.com/fork-maintainers/iceraven-browser synced 2024-11-03 23:15:31 +00:00

[fenix] For https://github.com/mozilla-mobile/fenix/issues/21183: remove lazyMonitored wrapper functionality.

We're not using the functionality so there's no sense in doing the work.
However, we keep the wrapper: see the code comments for details.
This commit is contained in:
Michael Comella 2021-09-08 14:55:40 -07:00 committed by mergify[bot]
parent afea6772f2
commit 88f34d654e
2 changed files with 7 additions and 73 deletions

View File

@ -4,42 +4,12 @@
package org.mozilla.fenix.perf
import mozilla.components.support.base.log.logger.Logger
import java.util.concurrent.atomic.AtomicInteger
private val logger = Logger("LazyMonitored")
/**
* A container for the number of components initialized.
* A function which wraps [lazy].
*
* This functionality was previously used to add performance monitoring. This
* wrapper could be useful in the future to add more monitoring. Even though
* this method is unused, we keep the code because re-adding this wrapper to
* every component is non-trivial.
*/
object ComponentInitCount {
val count = AtomicInteger(0)
}
/**
* A convenience function for setting the [LazyMonitored] property delegate, which wraps
* [lazy] to add performance monitoring.
*/
fun <T> lazyMonitored(initializer: () -> T): Lazy<T> = LazyMonitored(initializer)
/**
* A wrapper around the [lazy] property delegate to monitor for performance related issues.
* For example, we can count the number of components initialized to see how the number of
* components initialized on start up impacts start up time.
*/
private class LazyMonitored<T>(initializer: () -> T) : Lazy<T> {
// Lazy is thread safe.
private val lazyValue = lazy {
// We're unlikely to have 4 billion components so we don't handle overflow.
val componentInitCount = ComponentInitCount.count.incrementAndGet()
initializer().also {
@Suppress("UNNECESSARY_NOT_NULL_ASSERTION") // the compiler fails with !! but warns with !!.
val className = if (it == null) "null" else it!!::class.java.canonicalName
logger.debug("Init component #$componentInitCount: $className")
}
}
override val value: T get() = lazyValue.value
override fun isInitialized(): Boolean = lazyValue.isInitialized()
}
fun <T> lazyMonitored(initializer: () -> T): Lazy<T> = lazy(initializer)

View File

@ -1,36 +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.perf
import org.junit.Assert.assertEquals
import org.junit.Before
import org.junit.Test
class LazyMonitoredTest {
private val componentInitCount get() = ComponentInitCount.count.get()
@Before
fun setUp() {
ComponentInitCount.count.set(0)
}
@Test
fun `WHEN accessing a lazy monitored THEN it returns the initializer value`() {
val actual by lazyMonitored { 4 }
assertEquals(4, actual)
}
@Test
fun `WHEN accessing a lazy monitored THEN the component init count is incremented`() {
assertEquals(0, componentInitCount)
val monitored by lazyMonitored { }
// We must access the value to trigger init.
@Suppress("UNUSED_EXPRESSION") monitored
assertEquals(1, componentInitCount)
}
}