diff options
| -rw-r--r-- | packages/SystemUI/shared/src/com/android/systemui/util/TraceUtils.kt | 54 | ||||
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt | 7 |
2 files changed, 49 insertions, 12 deletions
diff --git a/packages/SystemUI/shared/src/com/android/systemui/util/TraceUtils.kt b/packages/SystemUI/shared/src/com/android/systemui/util/TraceUtils.kt index 64234c205617..e02e592c32cc 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/util/TraceUtils.kt +++ b/packages/SystemUI/shared/src/com/android/systemui/util/TraceUtils.kt @@ -18,22 +18,23 @@ package com.android.systemui.util import android.os.Trace import android.os.TraceNameSupplier +import java.util.concurrent.atomic.AtomicInteger /** - * Run a block within a [Trace] section. - * Calls [Trace.beginSection] before and [Trace.endSection] after the passed block. + * Run a block within a [Trace] section. Calls [Trace.beginSection] before and [Trace.endSection] + * after the passed block. */ inline fun <T> traceSection(tag: String, block: () -> T): T = - if (Trace.isTagEnabled(Trace.TRACE_TAG_APP)) { - Trace.traceBegin(Trace.TRACE_TAG_APP, tag) - try { - block() - } finally { - Trace.traceEnd(Trace.TRACE_TAG_APP) - } - } else { + if (Trace.isTagEnabled(Trace.TRACE_TAG_APP)) { + Trace.traceBegin(Trace.TRACE_TAG_APP, tag) + try { block() + } finally { + Trace.traceEnd(Trace.TRACE_TAG_APP) } + } else { + block() + } class TraceUtils { companion object { @@ -43,6 +44,7 @@ class TraceUtils { /** * Helper function for creating a Runnable object that implements TraceNameSupplier. + * * This is useful for posting Runnables to Handlers with meaningful names. */ inline fun namedRunnable(tag: String, crossinline block: () -> Unit): Runnable { @@ -51,5 +53,37 @@ class TraceUtils { 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) + } + } } } diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt index d1ac49bd4409..f692a390c847 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt +++ b/packages/SystemUI/src/com/android/systemui/keyguard/domain/interactor/KeyguardQuickAffordanceInteractor.kt @@ -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.statusbar.phone.SystemUIDialog import com.android.systemui.statusbar.policy.KeyguardStateController +import com.android.systemui.util.TraceUtils.Companion.traceAsync import dagger.Lazy import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher @@ -442,8 +443,10 @@ constructor( } private suspend fun isFeatureDisabledByDevicePolicy(): Boolean = - withContext(backgroundDispatcher) { - devicePolicyManager.areKeyguardShortcutsDisabled(userId = userTracker.userId) + traceAsync("isFeatureDisabledByDevicePolicy", TAG) { + withContext(backgroundDispatcher) { + devicePolicyManager.areKeyguardShortcutsDisabled(userId = userTracker.userId) + } } companion object { |