From 46917e533615c8cf66754b96885155e847ed2ef2 Mon Sep 17 00:00:00 2001 From: Peter Kalauskas Date: Mon, 21 Nov 2022 16:53:34 -0800 Subject: [PATCH 1/2] TraceUtils updates, new helper for runnables Modify TraceUtils' traceSection to use traceBegin instead of beginSection because beginSection will crash at run-time if the string is longer than 127 chars. Also, guard against StringBuilder GC garbage while tracing. Test: manual Bug: 257075630 Change-Id: I74cb5687a206f5d7ab8eb570cf24715d7e671df1 --- .../com/android/systemui/util/TraceUtils.kt | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/util/TraceUtils.kt b/packages/SystemUI/src/com/android/systemui/util/TraceUtils.kt index 5b16ae999aa30..b311318fb111f 100644 --- a/packages/SystemUI/src/com/android/systemui/util/TraceUtils.kt +++ b/packages/SystemUI/src/com/android/systemui/util/TraceUtils.kt @@ -22,11 +22,22 @@ import android.os.Trace * Run a block within a [Trace] section. * Calls [Trace.beginSection] before and [Trace.endSection] after the passed block. */ -inline fun traceSection(tag: String, block: () -> T): T { - Trace.beginSection(tag) - try { - return block() - } finally { - Trace.endSection() +inline fun 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 { + block() + } + +class TraceUtils { + companion object { + inline fun traceRunnable(tag: String, crossinline block: () -> Unit): Runnable { + return Runnable { traceSection(tag) { block() } } + } } -} \ No newline at end of file +} From ab2c6aa021e9ea7ada1b606ec76b8a24335453cb Mon Sep 17 00:00:00 2001 From: Peter Kalauskas Date: Tue, 22 Nov 2022 12:57:40 -0800 Subject: [PATCH 2/2] Guard against possible exception when tracing Trace.beginSection() throws an IllegalArgumentException if section name is longer than 127 chars. Therefore, it shouldn't be used anytime a string name is generated at runtime. Instead, replace with equivalent call to Trace.traceBegin(). Also, guard against StringBuilder GC garbage while tracing. Test: manual Bug: 257075630 Change-Id: Ia3477dc98b7d87f6fcd0c4f2e0aaad976f2203a2 --- .../systemui/media/controls/ui/MediaControlPanel.java | 10 +++++++--- .../collection/listbuilder/pluggable/Pluggable.java | 4 +++- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java index 21e64e28ff197..827ac789073ac 100644 --- a/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java +++ b/packages/SystemUI/src/com/android/systemui/media/controls/ui/MediaControlPanel.java @@ -458,7 +458,9 @@ public class MediaControlPanel { if (mMediaViewHolder == null) { return; } - Trace.beginSection("MediaControlPanel#bindPlayer<" + key + ">"); + if (Trace.isEnabled()) { + Trace.traceBegin(Trace.TRACE_TAG_APP, "MediaControlPanel#bindPlayer<" + key + ">"); + } mKey = key; mMediaData = data; MediaSession.Token token = data.getToken(); @@ -1179,8 +1181,10 @@ public class MediaControlPanel { return; } - Trace.beginSection( - "MediaControlPanel#bindRecommendation<" + data.getPackageName() + ">"); + if (Trace.isEnabled()) { + Trace.traceBegin(Trace.TRACE_TAG_APP, + "MediaControlPanel#bindRecommendation<" + data.getPackageName() + ">"); + } mRecommendationData = data; mSmartspaceId = SmallHash.hash(data.getTargetId()); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/Pluggable.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/Pluggable.java index 966ab4c61b504..afdadeb74e234 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/Pluggable.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/pluggable/Pluggable.java @@ -51,7 +51,9 @@ public abstract class Pluggable { */ public final void invalidateList(@Nullable String reason) { if (mListener != null) { - Trace.beginSection("Pluggable<" + mName + ">.invalidateList"); + if (Trace.isEnabled()) { + Trace.traceBegin(Trace.TRACE_TAG_APP, "Pluggable<" + mName + ">.invalidateList"); + } mListener.onPluggableInvalidated((This) this, reason); Trace.endSection(); }