mirror of
https://github.com/fork-maintainers/iceraven-browser
synced 2024-11-15 18:12:54 +00:00
For #21921: add and register MarkersFragmentLifecycleCallbacks.
This commit is contained in:
parent
99533626f1
commit
f65ea1e972
@ -99,6 +99,7 @@ import org.mozilla.fenix.library.historymetadata.HistoryMetadataGroupFragmentDir
|
|||||||
import org.mozilla.fenix.library.recentlyclosed.RecentlyClosedFragmentDirections
|
import org.mozilla.fenix.library.recentlyclosed.RecentlyClosedFragmentDirections
|
||||||
import org.mozilla.fenix.onboarding.DefaultBrowserNotificationWorker
|
import org.mozilla.fenix.onboarding.DefaultBrowserNotificationWorker
|
||||||
import org.mozilla.fenix.perf.MarkersActivityLifecycleCallbacks
|
import org.mozilla.fenix.perf.MarkersActivityLifecycleCallbacks
|
||||||
|
import org.mozilla.fenix.perf.MarkersFragmentLifecycleCallbacks
|
||||||
import org.mozilla.fenix.perf.Performance
|
import org.mozilla.fenix.perf.Performance
|
||||||
import org.mozilla.fenix.perf.PerformanceInflater
|
import org.mozilla.fenix.perf.PerformanceInflater
|
||||||
import org.mozilla.fenix.perf.ProfilerMarkers
|
import org.mozilla.fenix.perf.ProfilerMarkers
|
||||||
@ -187,6 +188,8 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
|
|||||||
val startTimeProfiler = components.core.engine.profiler?.getProfilerTime()
|
val startTimeProfiler = components.core.engine.profiler?.getProfilerTime()
|
||||||
|
|
||||||
components.strictMode.attachListenerToDisablePenaltyDeath(supportFragmentManager)
|
components.strictMode.attachListenerToDisablePenaltyDeath(supportFragmentManager)
|
||||||
|
MarkersFragmentLifecycleCallbacks.register(supportFragmentManager, components.core.engine)
|
||||||
|
|
||||||
// There is disk read violations on some devices such as samsung and pixel for android 9/10
|
// There is disk read violations on some devices such as samsung and pixel for android 9/10
|
||||||
components.strictMode.resetAfter(StrictMode.allowThreadDiskReads()) {
|
components.strictMode.resetAfter(StrictMode.allowThreadDiskReads()) {
|
||||||
// Theme setup should always be called before super.onCreate
|
// Theme setup should always be called before super.onCreate
|
||||||
|
@ -0,0 +1,119 @@
|
|||||||
|
/* 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.content.Context
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import androidx.fragment.app.Fragment
|
||||||
|
import androidx.fragment.app.FragmentManager
|
||||||
|
import mozilla.components.concept.engine.Engine
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a profiler marker for each fragment lifecycle callbacks. The callbacks are called by the
|
||||||
|
* super method (e.g. [Fragment.onCreate] so the markers occur sometime during the execution of
|
||||||
|
* our implementation (e.g. [org.mozilla.fenix.home.HomeFragment.onCreate]) rather than at the
|
||||||
|
* beginning or end of that method.
|
||||||
|
*/
|
||||||
|
@Suppress("TooManyFunctions") // it's the interface so we don't have a choice
|
||||||
|
class MarkersFragmentLifecycleCallbacks(
|
||||||
|
private val engine: Engine
|
||||||
|
) : FragmentManager.FragmentLifecycleCallbacks() {
|
||||||
|
|
||||||
|
private fun shouldSkip(): Boolean {
|
||||||
|
return engine.profiler?.isProfilerActive() != true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onFragmentAttached(fm: FragmentManager, f: Fragment, context: Context) {
|
||||||
|
if (shouldSkip()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
engine.profiler?.addMarker(MARKER_NAME, "${f::class.simpleName}.onAttach (via callbacks)")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onFragmentPaused(fm: FragmentManager, f: Fragment) {
|
||||||
|
if (shouldSkip()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
engine.profiler?.addMarker(MARKER_NAME, "${f::class.simpleName}.onPause (via callbacks)")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onFragmentStopped(fm: FragmentManager, f: Fragment) {
|
||||||
|
if (shouldSkip()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
engine.profiler?.addMarker(MARKER_NAME, "${f::class.simpleName}.onStop (via callbacks)")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onFragmentDestroyed(fm: FragmentManager, f: Fragment) {
|
||||||
|
if (shouldSkip()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
engine.profiler?.addMarker(MARKER_NAME, "${f::class.simpleName}.onDestroy (via callbacks)")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onFragmentDetached(fm: FragmentManager, f: Fragment) {
|
||||||
|
if (shouldSkip()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
engine.profiler?.addMarker(MARKER_NAME, "${f::class.simpleName}.onDetach (via callbacks)")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onFragmentCreated(fm: FragmentManager, f: Fragment, savedInstanceState: Bundle?) {
|
||||||
|
if (shouldSkip()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
engine.profiler?.addMarker(MARKER_NAME, "${f::class.simpleName}.onCreate (via callbacks)")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onFragmentViewCreated(fm: FragmentManager, f: Fragment, v: View, savedInstanceState: Bundle?) {
|
||||||
|
if (shouldSkip()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
engine.profiler?.addMarker(MARKER_NAME, "${f::class.simpleName}.onViewCreated (via callbacks)")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onFragmentStarted(fm: FragmentManager, f: Fragment) {
|
||||||
|
if (shouldSkip()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
engine.profiler?.addMarker(MARKER_NAME, "${f::class.simpleName}.onStart (via callbacks)")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onFragmentResumed(fm: FragmentManager, f: Fragment) {
|
||||||
|
if (shouldSkip()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
engine.profiler?.addMarker(MARKER_NAME, "${f::class.simpleName}.onResume (via callbacks)")
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onFragmentViewDestroyed(fm: FragmentManager, f: Fragment) {
|
||||||
|
if (shouldSkip()) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
engine.profiler?.addMarker(MARKER_NAME, "${f::class.simpleName}.onViewDestroyed (via callbacks)")
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val MARKER_NAME = "Fragment Lifecycle"
|
||||||
|
|
||||||
|
fun register(supportFragmentManager: FragmentManager, engine: Engine) {
|
||||||
|
val callbacks = MarkersFragmentLifecycleCallbacks(engine)
|
||||||
|
|
||||||
|
// We do recursive because the NavHostFragment adds additional fragments as subfragments.
|
||||||
|
supportFragmentManager.registerFragmentLifecycleCallbacks(callbacks, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user