Inject lazyStats correctly

pull/2064/head
lihenggui 1 year ago
parent 6dbbaeb375
commit 2ec61cf6ac

@ -123,6 +123,8 @@ kotlin {
implementation(libs.androidx.window.core)
implementation(libs.kotlinx.coroutines.guava)
implementation(libs.koin.android)
implementation(libs.koin.androidx.compose)
implementation(libs.koin.androidx.startup)
}
commonTest.dependencies {

@ -21,7 +21,6 @@ import androidx.activity.ComponentActivity
import androidx.activity.SystemBarStyle
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
@ -52,13 +51,16 @@ import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.launch
import org.koin.android.ext.android.inject
import org.koin.androidx.compose.KoinAndroidContext
import org.koin.androidx.viewmodel.ext.android.viewModel
import org.koin.core.parameter.parametersOf
class MainActivity : ComponentActivity() {
/**
* Lazily inject [JankStats], which is used to track jank throughout the app.
*/
private val stats: JankStats by inject()
private val lazyStats by inject<JankStats> { parametersOf(this) }
private val networkMonitor: NetworkMonitor by inject()
@ -68,7 +70,7 @@ class MainActivity : ComponentActivity() {
private val userNewsResourceRepository: UserNewsResourceRepository by inject()
private val viewModel: MainScreenViewModel by inject()
private val viewModel: MainScreenViewModel by viewModel()
override fun onCreate(savedInstanceState: Bundle?) {
val splashScreen = installSplashScreen()
@ -138,7 +140,9 @@ class MainActivity : ComponentActivity() {
androidTheme = shouldUseAndroidTheme(uiState),
disableDynamicTheming = shouldDisableDynamicTheming(uiState),
) {
NiaApp(appState)
KoinAndroidContext {
NiaApp(appState)
}
}
}
}
@ -146,12 +150,12 @@ class MainActivity : ComponentActivity() {
override fun onResume() {
super.onResume()
stats.isTrackingEnabled = true
lazyStats.isTrackingEnabled = true
}
override fun onPause() {
super.onPause()
stats.isTrackingEnabled = false
lazyStats.isTrackingEnabled = false
}
}

@ -18,36 +18,21 @@ package com.google.samples.apps.nowinandroid.di
import android.app.Activity
import android.util.Log
import android.view.Window
import androidx.metrics.performance.JankStats
import androidx.metrics.performance.JankStats.OnFrameListener
import com.google.samples.apps.nowinandroid.util.ProfileVerifierLogger
import kotlinx.coroutines.CoroutineScope
import org.koin.core.annotation.Factory
import org.koin.core.annotation.Module
import org.koin.core.annotation.Single
import org.koin.core.module.dsl.singleOf
import org.koin.dsl.module
@Module
class JankStatsModule {
@Factory
fun providesOnFrameListener(): OnFrameListener = OnFrameListener { frameData ->
// Make sure to only log janky frames.
if (frameData.isJank) {
// We're currently logging this but would better report it to a backend.
Log.v("NiA Jank", frameData.toString())
}
}
@Single
fun providesWindow(activity: Activity): Window = activity.window
@Factory
fun providesJankStats(
window: Window,
frameListener: OnFrameListener,
): JankStats = JankStats.createAndTrack(window, frameListener)
@Single
fun provideProfileVerifierLogger(scope: CoroutineScope): ProfileVerifierLogger =
ProfileVerifierLogger(scope)
val jankStatsModule = module {
singleOf(::ProfileVerifierLogger)
factory { (activity : Activity) -> JankStats.createAndTrack(activity.window, providesOnFrameListener()) }
}
fun providesOnFrameListener(): OnFrameListener = OnFrameListener { frameData ->
// Make sure to only log janky frames.
if (frameData.isJank) {
// We're currently logging this but would better report it to a backend.
Log.v("NiA Jank", frameData.toString())
}
}

@ -151,6 +151,7 @@ koin-annotations = { group = "io.insert-koin", name = "koin-annotations" }
koin-ksp-compiler = { group = "io.insert-koin", name = "koin-ksp-compiler", version.ref = "koin-annotations" }
koin-bom = { group = "io.insert-koin", name = "koin-bom", version.ref = "koin" }
koin-android = { group = "io.insert-koin", name = "koin-android"}
koin-androidx-compose = { group = "io.insert-koin", name = "koin-androidx-compose"}
koin-androidx-startup = { group = "io.insert-koin", name = "koin-androidx-startup"}
koin-core = { group = "io.insert-koin", name = "koin-core"}
koin-core-coroutines = { group = "io.insert-koin", name = "koin-android-coroutines"}

Loading…
Cancel
Save