diff --git a/app/src/main/java/com/google/android/samples/socialite/ui/home/timeline/TimelineViewModel.kt b/app/src/main/java/com/google/android/samples/socialite/ui/home/timeline/TimelineViewModel.kt index caae0e19..dd1991e7 100644 --- a/app/src/main/java/com/google/android/samples/socialite/ui/home/timeline/TimelineViewModel.kt +++ b/app/src/main/java/com/google/android/samples/socialite/ui/home/timeline/TimelineViewModel.kt @@ -18,6 +18,7 @@ package com.google.android.samples.socialite.ui.home.timeline import android.content.Context import android.net.Uri +import android.util.Log import androidx.annotation.OptIn import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -52,6 +53,9 @@ class TimelineViewModel @Inject constructor( // Width/Height ratio of the current media item, used to properly size the Surface var videoRatio by mutableStateOf(null) + var timeAtPlayerPrepare: Long = 0 + private val TAG = TimelineViewModel::class.java.simpleName + private val videoSizeListener = object : Player.Listener { override fun onVideoSizeChanged(videoSize: VideoSize) { videoRatio = if (videoSize.height > 0 && videoSize.width > 0) { @@ -63,6 +67,16 @@ class TimelineViewModel @Inject constructor( } } + // Used to track performance of preload manager + private val firstFrameRenderedListener = object : Player.Listener { + override fun onRenderedFirstFrame() { + super.onRenderedFirstFrame() + val timeToFirstRenderFrame = System.currentTimeMillis() - timeAtPlayerPrepare + // Use this value in future to compare performance with and without preload manager + Log.d(TAG, "First frame rendered in $timeToFirstRenderFrame ms") + } + } + init { viewModelScope.launch { val allChats = repository.getChats().first() @@ -105,6 +119,7 @@ class TimelineViewModel @Inject constructor( it.repeatMode = ExoPlayer.REPEAT_MODE_ONE it.playWhenReady = true it.addListener(videoSizeListener) + it.addListener(firstFrameRenderedListener) } videoRatio = null @@ -129,6 +144,7 @@ class TimelineViewModel @Inject constructor( videoRatio = null if (uri != null) { setMediaItem(MediaItem.fromUri(uri)) + timeAtPlayerPrepare = System.currentTimeMillis() prepare() } else { clearMediaItems()