[fenix] No issue: remove unused HotStartPerformanceMonitor.
This monitor for hot start was intended to be used by FNPRMS to measure hot start. However, hot start was deprioritized so it's now essentially unused.pull/600/head
parent
6d6db30a48
commit
9d832f24e7
@ -1,46 +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 android.os.SystemClock
|
|
||||||
import android.util.Log
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Monitors and reports elapsed time to complete hot startup of an Activity. Callers are expected
|
|
||||||
* to call the appropriate lifecycle methods at the appropriate times.
|
|
||||||
*
|
|
||||||
* A "hot startup" is when the application moves from the background to the foreground and both the
|
|
||||||
* Application/process and the Activity under measurement are already created.
|
|
||||||
*
|
|
||||||
* Unfortunately, this monitor does not capture the entire duration of hot start because the
|
|
||||||
* framework calls several Android framework methods in the application's process before we are able
|
|
||||||
* to add monitoring code (i.e. the first time our application code is called in onRestart). An
|
|
||||||
* alternative implementation could measure performance from outside the application.
|
|
||||||
*
|
|
||||||
* The logs from this class are not visible to users by default. To see logs from this class, the
|
|
||||||
* user must enable VERBOSE logging for the appropriate tag:
|
|
||||||
* adb shell setprop log.tag.FenixPerf VERBOSE
|
|
||||||
*/
|
|
||||||
class HotStartPerformanceMonitor(
|
|
||||||
// We use VERBOSE logging so that the logs are not visible to users by default. We use the
|
|
||||||
// Android Log methods to minimize overhead introduced in a-c logging.
|
|
||||||
private val log: (String) -> Unit = { Log.v(Performance.TAG, it) },
|
|
||||||
private val getElapsedRealtime: () -> Long = { SystemClock.elapsedRealtime() }
|
|
||||||
) {
|
|
||||||
|
|
||||||
private var onRestartMillis: Long = -1
|
|
||||||
|
|
||||||
fun onRestartFirstMethodCall() {
|
|
||||||
onRestartMillis = getElapsedRealtime()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun onPostResumeFinalMethodCall() {
|
|
||||||
// If onRestart was never called, this is not a hot start: ignore it.
|
|
||||||
if (onRestartMillis >= 0) {
|
|
||||||
val elapsedMillis = getElapsedRealtime() - onRestartMillis
|
|
||||||
log("hot start: $elapsedMillis")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,43 +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 io.mockk.Called
|
|
||||||
import io.mockk.MockKAnnotations
|
|
||||||
import io.mockk.impl.annotations.MockK
|
|
||||||
import io.mockk.verify
|
|
||||||
import org.junit.Before
|
|
||||||
import org.junit.Test
|
|
||||||
|
|
||||||
class HotStartPerformanceMonitorTest {
|
|
||||||
|
|
||||||
private lateinit var monitor: HotStartPerformanceMonitor
|
|
||||||
|
|
||||||
@MockK(relaxed = true) private lateinit var log: (String) -> Unit
|
|
||||||
private var elapsedRealtime = 0L
|
|
||||||
|
|
||||||
@Before
|
|
||||||
fun setUp() {
|
|
||||||
MockKAnnotations.init(this)
|
|
||||||
monitor = HotStartPerformanceMonitor(log, getElapsedRealtime = { elapsedRealtime })
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun `WHEN onRestart is not called but onPostResume is called THEN we do not log`() {
|
|
||||||
monitor.onPostResumeFinalMethodCall()
|
|
||||||
verify { log.invoke(any()) wasNot Called }
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun `WHEN onRestart then onPostResume is called THEN we log the elapsed time`() {
|
|
||||||
elapsedRealtime = 10
|
|
||||||
monitor.onRestartFirstMethodCall()
|
|
||||||
|
|
||||||
elapsedRealtime = 100
|
|
||||||
monitor.onPostResumeFinalMethodCall()
|
|
||||||
|
|
||||||
verify { log.invoke("hot start: 90") } // fragile but it's not worth the time to make robust.
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue