Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7767ba46 authored by Steve Elliott's avatar Steve Elliott
Browse files

Add IconContainerRefactor tracing to flow collects

Flag: ACONFIG com.android.systemui.notifications_icon_container_refactor TEAMFOOD
Bug: 317439747
Test: manual - verify traces appear in Perfetto
Change-Id: I0e1b65dd658c0fdcd0e41faf5a91e7f0bb742094
parent 2671bd0d
Loading
Loading
Loading
Loading
+13 −8
Original line number Diff line number Diff line
@@ -142,7 +142,7 @@ object NotificationIconContainerViewBinder {

    /** Binds to [NotificationIconContainer.setAnimationsEnabled] */
    private suspend fun Flow<Boolean>.bindAnimationsEnabled(view: NotificationIconContainer) {
        collect(view::setAnimationsEnabled)
        collectTracingEach("NIC#bindAnimationsEnabled", view::setAnimationsEnabled)
    }

    private suspend fun NotificationIconContainerStatusBarViewModel.bindIsolatedIcon(
@@ -151,12 +151,12 @@ object NotificationIconContainerViewBinder {
    ) {
        coroutineScope {
            launch {
                isolatedIconLocation.collect { location ->
                isolatedIconLocation.collectTracingEach("NIC#isolatedIconLocation") { location ->
                    view.setIsolatedIconLocation(location, true)
                }
            }
            launch {
                isolatedIcon.collect { iconInfo ->
                isolatedIcon.collectTracingEach("NIC#showIconIsolated") { iconInfo ->
                    val iconView = iconInfo.value?.let { viewStore.iconView(it.notifKey) }
                    if (iconInfo.isAnimating) {
                        view.showIconIsolatedAnimated(iconView, iconInfo::stopAnimating)
@@ -214,7 +214,7 @@ object NotificationIconContainerViewBinder {
        val failedBindings = mutableSetOf<String>()
        val boundViewsByNotifKey = ArrayMap<String, Pair<StatusBarIconView, Job>>()
        var prevIcons = NotificationIconsViewData()
        collectTracingEach("NotifIconContainer#bindIcons") { iconsData: NotificationIconsViewData ->
        collectTracingEach("NIC#bindIcons") { iconsData: NotificationIconsViewData ->
            val iconsDiff = NotificationIconsViewData.computeDifference(iconsData, prevIcons)
            prevIcons = iconsData

@@ -265,7 +265,11 @@ object NotificationIconContainerViewBinder {
                            Pair(
                                sbiv,
                                launch {
                                    launch { layoutParams.collect { sbiv.layoutParams = it } }
                                    launch {
                                        layoutParams.collectTracingEach("SBIV#bindLayoutParams") {
                                            sbiv.layoutParams = it
                                        }
                                    }
                                    bindIcon(notifKey, sbiv)
                                },
                            )
@@ -369,6 +373,7 @@ private val View.viewBounds: Rect
        )
    }

private suspend fun <T> Flow<T>.collectTracingEach(tag: String, collector: (T) -> Unit) {
    collect { traceSection(tag) { collector(it) } }
}
private suspend inline fun <T> Flow<T>.collectTracingEach(
    tag: String,
    crossinline collector: (T) -> Unit,
) = collect { traceSection(tag) { collector(it) } }
+10 −4
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.statusbar.notification.icon.ui.viewbinder

import android.graphics.Rect
import android.view.View
import com.android.app.tracing.traceSection
import com.android.internal.util.ContrastColorUtil
import com.android.systemui.res.R
import com.android.systemui.statusbar.StatusBarIconView
@@ -33,18 +34,18 @@ object StatusBarIconViewBinder {
    //  view-model (which, at the time of this writing, does not yet exist).

    suspend fun bindColor(view: StatusBarIconView, color: Flow<Int>) {
        color.collect { color ->
        color.collectTracingEach("SBIV#bindColor") { color ->
            view.staticDrawableColor = color
            view.setDecorColor(color)
        }
    }

    suspend fun bindTintAlpha(view: StatusBarIconView, tintAlpha: Flow<Float>) {
        tintAlpha.collect { amt -> view.setTintAlpha(amt) }
        tintAlpha.collectTracingEach("SBIV#bindTintAlpha") { amt -> view.setTintAlpha(amt) }
    }

    suspend fun bindAnimationsEnabled(view: StatusBarIconView, allowAnimation: Flow<Boolean>) {
        allowAnimation.collect(view::setAllowAnimation)
        allowAnimation.collectTracingEach("SBIV#bindAnimationsEnabled", view::setAllowAnimation)
    }

    suspend fun bindIconColors(
@@ -52,7 +53,7 @@ object StatusBarIconViewBinder {
        iconColors: Flow<NotificationIconColors>,
        contrastColorUtil: ContrastColorUtil,
    ) {
        iconColors.collect { colors ->
        iconColors.collectTracingEach("SBIV#bindIconColors") { colors ->
            val isPreL = java.lang.Boolean.TRUE == view.getTag(R.id.icon_is_pre_L)
            val isColorized = !isPreL || NotificationUtils.isGrayscale(view, contrastColorUtil)
            view.staticDrawableColor =
@@ -73,3 +74,8 @@ private val View.viewBounds: Rect
            /* bottom = */ top + height,
        )
    }

private suspend inline fun <T> Flow<T>.collectTracingEach(
    tag: String,
    crossinline collector: (T) -> Unit,
) = collect { traceSection(tag) { collector(it) } }