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

Commit a700c5d8 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Add traceAsync to TraceUtils" into udc-qpr-dev am: 227a0348

parents 444d8dab 227a0348
Loading
Loading
Loading
Loading
+44 −10
Original line number Original line Diff line number Diff line
@@ -18,10 +18,11 @@ package com.android.systemui.util


import android.os.Trace
import android.os.Trace
import android.os.TraceNameSupplier
import android.os.TraceNameSupplier
import java.util.concurrent.atomic.AtomicInteger


/**
/**
 * Run a block within a [Trace] section.
 * Run a block within a [Trace] section. Calls [Trace.beginSection] before and [Trace.endSection]
 * Calls [Trace.beginSection] before and [Trace.endSection] after the passed block.
 * after the passed block.
 */
 */
inline fun <T> traceSection(tag: String, block: () -> T): T =
inline fun <T> traceSection(tag: String, block: () -> T): T =
    if (Trace.isTagEnabled(Trace.TRACE_TAG_APP)) {
    if (Trace.isTagEnabled(Trace.TRACE_TAG_APP)) {
@@ -43,6 +44,7 @@ class TraceUtils {


        /**
        /**
         * Helper function for creating a Runnable object that implements TraceNameSupplier.
         * Helper function for creating a Runnable object that implements TraceNameSupplier.
         *
         * This is useful for posting Runnables to Handlers with meaningful names.
         * This is useful for posting Runnables to Handlers with meaningful names.
         */
         */
        inline fun namedRunnable(tag: String, crossinline block: () -> Unit): Runnable {
        inline fun namedRunnable(tag: String, crossinline block: () -> Unit): Runnable {
@@ -51,5 +53,37 @@ class TraceUtils {
                override fun run() = block()
                override fun run() = block()
            }
            }
        }
        }

        /**
         * Cookie used for async traces. Shouldn't be public, but to use it inside inline methods
         * there is no other way around.
         */
        val lastCookie = AtomicInteger(0)

        /**
         * Creates an async slice in a track called "AsyncTraces".
         *
         * This can be used to trace coroutine code. Note that all usages of this method will appear
         * under a single track.
         */
        inline fun <T> traceAsync(method: String, block: () -> T): T =
            traceAsync(method, "AsyncTraces", block)

        /**
         * Creates an async slice in a track with [trackName] while [block] runs.
         *
         * This can be used to trace coroutine code. [method] will be the name of the slice,
         * [trackName] of the track. The track is one of the rows visible in a perfetto trace inside
         * SystemUI process.
         */
        inline fun <T> traceAsync(method: String, trackName: String, block: () -> T): T {
            val cookie = lastCookie.incrementAndGet()
            Trace.asyncTraceForTrackBegin(Trace.TRACE_TAG_APP, trackName, method, cookie)
            try {
                return block()
            } finally {
                Trace.asyncTraceForTrackEnd(Trace.TRACE_TAG_APP, trackName, cookie)
            }
        }
    }
    }
}
}
+5 −2
Original line number Original line Diff line number Diff line
@@ -49,6 +49,7 @@ import com.android.systemui.settings.UserTracker
import com.android.systemui.shared.customization.data.content.CustomizationProviderContract as Contract
import com.android.systemui.shared.customization.data.content.CustomizationProviderContract as Contract
import com.android.systemui.statusbar.phone.SystemUIDialog
import com.android.systemui.statusbar.phone.SystemUIDialog
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.statusbar.policy.KeyguardStateController
import com.android.systemui.util.TraceUtils.Companion.traceAsync
import dagger.Lazy
import dagger.Lazy
import javax.inject.Inject
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.CoroutineDispatcher
@@ -442,9 +443,11 @@ constructor(
    }
    }


    private suspend fun isFeatureDisabledByDevicePolicy(): Boolean =
    private suspend fun isFeatureDisabledByDevicePolicy(): Boolean =
        traceAsync("isFeatureDisabledByDevicePolicy", TAG) {
            withContext(backgroundDispatcher) {
            withContext(backgroundDispatcher) {
                devicePolicyManager.areKeyguardShortcutsDisabled(userId = userTracker.userId)
                devicePolicyManager.areKeyguardShortcutsDisabled(userId = userTracker.userId)
            }
            }
        }


    companion object {
    companion object {
        private const val TAG = "KeyguardQuickAffordanceInteractor"
        private const val TAG = "KeyguardQuickAffordanceInteractor"