Skip to content

Commit

Permalink
feat: Monitor barcode scanning performance (#4651)
Browse files Browse the repository at this point in the history
Monitor how long the barcode scanner took #4622
  • Loading branch information
g123k committed Nov 6, 2022
1 parent 5f17d51 commit 80770c8
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ sealed class AnalyticsEvent(val category: String, val action: String, val name:

object ProductSearchStart : AnalyticsEvent("search", "started", null, null)

data class BarcodeDecoder(val success: Boolean = false, val duration: Float = 0f) : AnalyticsEvent("scanner", "scanning", success.toString(), duration)

data class ScannedBarcode(val barcode: String) : AnalyticsEvent("scanner", "scanned", barcode, null)

data class ScannedBarcodeResultExpanded(val barcode: String?) :
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package openfoodfacts.github.scrachx.openfood.analytics

import android.app.Activity
import java.util.concurrent.TimeUnit
import kotlin.time.Duration.Companion.milliseconds

fun Activity.startTrackEvent(event: AnalyticsEvent): AnalyticsTrackingEvent {
return AnalyticsTrackingEvent(event = event)
}

data class AnalyticsTrackingEvent(
val startDate: Long = System.currentTimeMillis(),
val event: AnalyticsEvent
) {

fun computeDurationInSeconds(): Float =
(System.currentTimeMillis() - startDate).milliseconds.inWholeSeconds.toFloat()

}
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,7 @@ import kotlinx.coroutines.withContext
import openfoodfacts.github.scrachx.openfood.AppFlavor
import openfoodfacts.github.scrachx.openfood.AppFlavor.Companion.isFlavors
import openfoodfacts.github.scrachx.openfood.R
import openfoodfacts.github.scrachx.openfood.analytics.AnalyticsEvent
import openfoodfacts.github.scrachx.openfood.analytics.AnalyticsView
import openfoodfacts.github.scrachx.openfood.analytics.MatomoAnalytics
import openfoodfacts.github.scrachx.openfood.analytics.*
import openfoodfacts.github.scrachx.openfood.databinding.ActivityContinuousScanBinding
import openfoodfacts.github.scrachx.openfood.features.images.manage.ImagesManageActivity
import openfoodfacts.github.scrachx.openfood.features.product.edit.ProductEditActivity
Expand All @@ -69,6 +67,7 @@ import openfoodfacts.github.scrachx.openfood.features.product.view.summary.Abstr
import openfoodfacts.github.scrachx.openfood.features.product.view.summary.IngredientAnalysisTagsAdapter
import openfoodfacts.github.scrachx.openfood.features.product.view.summary.SummaryProductPresenter
import openfoodfacts.github.scrachx.openfood.features.shared.BaseActivity
import openfoodfacts.github.scrachx.openfood.features.simplescan.SimpleScanViewModel
import openfoodfacts.github.scrachx.openfood.listeners.CommonBottomListenerInstaller.installBottomNavigation
import openfoodfacts.github.scrachx.openfood.listeners.CommonBottomListenerInstaller.selectNavigationItem
import openfoodfacts.github.scrachx.openfood.models.Barcode
Expand Down Expand Up @@ -126,6 +125,7 @@ class ContinuousScanActivity : BaseActivity(), IProductView {

@Inject
lateinit var matomoAnalytics: MatomoAnalytics
private var trackingEvent: AnalyticsTrackingEvent? = null

@Inject
lateinit var sharedPreferences: SharedPreferences
Expand Down Expand Up @@ -557,6 +557,7 @@ class ContinuousScanActivity : BaseActivity(), IProductView {
cameraView.onResume()
}
matomoAnalytics.trackView(AnalyticsView.Scanner)
trackingEvent = startTrackEvent(AnalyticsEvent.BarcodeDecoder())
}

override fun onPostResume() {
Expand All @@ -573,6 +574,15 @@ class ContinuousScanActivity : BaseActivity(), IProductView {
override fun onPause() {
cameraView.stopCameraPreview()
super.onPause()

trackingEvent?.let {
matomoAnalytics.trackEvent(
AnalyticsEvent.BarcodeDecoder(
success = isBarcodeValid(lastBarcode),
duration = it.computeDurationInSeconds(),
)
)
}
}

override fun onStop() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,18 @@ import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import logcat.logcat
import openfoodfacts.github.scrachx.openfood.R
import openfoodfacts.github.scrachx.openfood.analytics.AnalyticsEvent
import openfoodfacts.github.scrachx.openfood.analytics.AnalyticsTrackingEvent
import openfoodfacts.github.scrachx.openfood.analytics.MatomoAnalytics
import openfoodfacts.github.scrachx.openfood.analytics.startTrackEvent
import openfoodfacts.github.scrachx.openfood.databinding.ActivitySimpleScanBinding
import openfoodfacts.github.scrachx.openfood.features.scan.CameraView
import openfoodfacts.github.scrachx.openfood.features.simplescan.SimpleScanActivityContract.Companion.KEY_SCANNED_BARCODE
import openfoodfacts.github.scrachx.openfood.features.simplescan.SimpleScanViewModel.SideEffect.BarcodeDetected
import openfoodfacts.github.scrachx.openfood.features.simplescan.SimpleScanViewModel.SideEffect.ScanTrouble
import openfoodfacts.github.scrachx.openfood.models.CameraState
import java.util.concurrent.atomic.AtomicBoolean
import javax.inject.Inject

@AndroidEntryPoint
class SimpleScanActivity : AppCompatActivity() {
Expand All @@ -37,6 +42,10 @@ class SimpleScanActivity : AppCompatActivity() {
private lateinit var cameraView: CameraView<*>
private val scannerInitialized = AtomicBoolean(false)

@Inject
lateinit var matomoAnalytics: MatomoAnalytics
private var trackingEvent: AnalyticsTrackingEvent? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivitySimpleScanBinding.inflate(layoutInflater)
Expand Down Expand Up @@ -79,11 +88,21 @@ class SimpleScanActivity : AppCompatActivity() {
override fun onResume() {
super.onResume()
startScanning()
trackingEvent = startTrackEvent(AnalyticsEvent.BarcodeDecoder())
}

override fun onPause() {
super.onPause()
stopScanning()

trackingEvent?.let {
matomoAnalytics.trackEvent(
AnalyticsEvent.BarcodeDecoder(
success = viewModel.sideEffectsFlow.replayCache.lastOrNull() is SimpleScanViewModel.SideEffect.BarcodeDetected,
duration = it.computeDurationInSeconds(),
)
)
}
}

override fun onWindowFocusChanged(hasFocus: Boolean) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ class SimpleScanViewModelTest {
whenever(prefsRepository.mlScannerEnabled).doReturn(false)
whenever(prefsRepository.cameraPref).doReturn(CameraState.Back)


viewModel = SimpleScanViewModel(prefsRepository, dispatchers)
}

Expand Down

0 comments on commit 80770c8

Please sign in to comment.