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.master
parent
b0e4453fb7
commit
5bd0369aed
|
@ -59,7 +59,6 @@ import org.mozilla.fenix.home.intent.SpeechProcessingIntentProcessor
|
|||
import org.mozilla.fenix.home.intent.StartSearchIntentProcessor
|
||||
import org.mozilla.fenix.library.bookmarks.BookmarkFragmentDirections
|
||||
import org.mozilla.fenix.library.history.HistoryFragmentDirections
|
||||
import org.mozilla.fenix.perf.HotStartPerformanceMonitor
|
||||
import org.mozilla.fenix.perf.Performance
|
||||
import org.mozilla.fenix.perf.StartupTimeline
|
||||
import org.mozilla.fenix.search.SearchFragmentDirections
|
||||
|
@ -86,8 +85,6 @@ open class HomeActivity : LocaleAwareAppCompatActivity() {
|
|||
|
||||
private var sessionObserver: SessionManager.Observer? = null
|
||||
|
||||
private val hotStartMonitor = HotStartPerformanceMonitor()
|
||||
|
||||
private var isToolbarInflated = false
|
||||
|
||||
private val webExtensionPopupFeature by lazy {
|
||||
|
@ -161,16 +158,6 @@ open class HomeActivity : LocaleAwareAppCompatActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
final override fun onRestart() {
|
||||
hotStartMonitor.onRestartFirstMethodCall()
|
||||
super.onRestart()
|
||||
}
|
||||
|
||||
final override fun onPostResume() {
|
||||
super.onPostResume()
|
||||
hotStartMonitor.onPostResumeFinalMethodCall()
|
||||
}
|
||||
|
||||
final override fun onPause() {
|
||||
super.onPause()
|
||||
|
||||
|
|
|
@ -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