Loading Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -425,6 +425,7 @@ java_defaults { "perfetto_trace_javastream_protos_jarjar", "libaconfig_java_proto_nano", "aconfig_device_paths_java", "perfetto_trace_lib_framework_java", ], } Loading apct-tests/perftests/core/src/android/os/TracePerfTest.java +90 −0 Original line number Diff line number Diff line Loading @@ -46,7 +46,14 @@ public class TracePerfTest { private static final String FOO = "foo"; private static final Category FOO_CATEGORY = new Category(FOO); private static final com.android.internal.dev.perfetto.sdk.PerfettoTrace.Category FOO_CATEGORY_V3 = new com.android.internal.dev.perfetto.sdk.PerfettoTrace.Category(FOO); private static final Category UNREGISTERED_CATEGORY = new Category("unregistered"); private static final com.android.internal.dev.perfetto.sdk.PerfettoTrace.Category UNREGISTERED_CATEGORY_V3 = new com.android.internal.dev.perfetto.sdk.PerfettoTrace.Category( "unregistered"); private static PerfettoTrace.Session sPerfettoSession; @BeforeClass Loading @@ -54,6 +61,7 @@ public class TracePerfTest { ShellHelper.runShellCommandRaw("atrace -c --async_start -a *"); PerfettoTrace.register(false /* isBackendInProcess */); FOO_CATEGORY.register(); FOO_CATEGORY_V3.register(); sPerfettoSession = new PerfettoTrace.Session(false /* isBackendInProcess */, getTraceConfig(FOO).toByteArray()); } Loading Loading @@ -188,6 +196,88 @@ public class TracePerfTest { } } @Test public void testInstantPerfettoV3() { com.android.internal.dev.perfetto.sdk.PerfettoTrace.instant(FOO_CATEGORY_V3, "testInstantP") .emit(); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { com.android.internal.dev.perfetto.sdk.PerfettoTrace.instant( FOO_CATEGORY_V3, "testInstantP") .emit(); } } @Test public void testInstantPerfettoV3WithArgs() { com.android.internal.dev.perfetto.sdk.PerfettoTrace.instant(FOO_CATEGORY_V3, "testInstantP") .addArg("foo", "bar") .setFlow(1) .emit(); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { com.android.internal.dev.perfetto.sdk.PerfettoTrace.instant( FOO_CATEGORY_V3, "testInstantP") .addArg("foo", "bar") .setFlow(1) .emit(); } } @Test public void testInstantPerfettoV3WithProto() { com.android.internal.dev.perfetto.sdk.PerfettoTrace.begin( FOO_CATEGORY_V3, "message_queue_receive") .beginProto() .beginNested(2004 /* message_queue */) .addField(1 /* sending_thread_name */, "foo") .endNested() .endProto() .setTerminatingFlow(5) .emit(); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { com.android.internal.dev.perfetto.sdk.PerfettoTrace.begin( FOO_CATEGORY_V3, "message_queue_receive") .beginProto() .beginNested(2004 /* message_queue */) .addField(1 /* sending_thread_name */, "foo") .endNested() .endProto() .setTerminatingFlow(5) .emit(); } } @Test public void testInstantPerfettoV3WithProtoUnregistered() { com.android.internal.dev.perfetto.sdk.PerfettoTrace.begin( UNREGISTERED_CATEGORY_V3, "message_queue_receive") .beginProto() .beginNested(2004 /* message_queue */) .addField(1 /* sending_thread_name */, "foo") .endNested() .endProto() .setTerminatingFlow(5) .emit(); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { com.android.internal.dev.perfetto.sdk.PerfettoTrace.begin( UNREGISTERED_CATEGORY_V3, "message_queue_receive") .beginProto() .beginNested(2004 /* message_queue */) .addField(1 /* sending_thread_name */, "foo") .endNested() .endProto() .setTerminatingFlow(5) .emit(); } } private static TraceConfig getTraceConfig(String cat) { BufferConfig bufferConfig = BufferConfig.newBuilder().setSizeKb(1024).build(); TrackEventConfig trackEventConfig = TrackEventConfig Loading boot/boot-image-profile-extra.txt +42 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,48 @@ HSPLjava/util/concurrent/ConcurrentSkipListMap$KeyIterator;->* HSPLjava/util/concurrent/ConcurrentSkipListMap$KeySet;->* HSPLjava/util/concurrent/ConcurrentSkipListSet;->* # For now, also compile all method in the 'com.android.internal.dev.perfetto.sdk' Perfetto Trace API. # Similar to the existing Trace APIs, these new APIs can impact the performance # of many subsystems including MessageQueue. This also keeps benchmark # comparisons between both APIs fair. # The list is generated from the # 'out/soong/.intermediates/external/perfetto/perfetto_trace_lib_framework_java/android_common/jarjar/perfetto_trace_lib_framework_java.jar' # jar file, using the following command: # ``` # jar tvf \ # out/soong/.intermediates/external/perfetto/perfetto_trace_lib_framework_java/android_common/jarjar/perfetto_trace_lib_framework_java.jar \ # | awk '$8 ~ /\.class$/ {sub(/\.class$/, "", $8); print "HSPL" $8 ";->*"}' # ``` HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$Proto;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$PerfettoPointer;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$NamedTrack;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$Flow;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$FieldString;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$FieldNested;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$FieldInt64;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$FieldDouble;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$FieldContainer;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$CounterTrack;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$CounterInt64;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$CounterDouble;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$ArgString;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$ArgInt64;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$ArgDouble;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$ArgBool;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventBuilder;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventBuilder$RingBuffer;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventBuilder$Pool;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventBuilder$ObjectsPool;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventBuilder$ObjectsCache;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventBuilder$LazyInitObjects;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrace;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrace$Session;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrace$Category;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoNativeMemoryCleaner;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoNativeMemoryCleaner$FreeNativeMemoryRunnable;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoNativeMemoryCleaner$AllocationStats;->* # While the SystemFeaturesMetadata static cache isn't heavyweight, ensure it's # pre-initialized in the boot image to avoid redundant per-process overhead. # TODO(b/326623529): Consider removing this after the feature has fully ramped Loading core/java/android/os/CombinedMessageQueue/MessageQueue.java +36 −16 Original line number Diff line number Diff line Loading @@ -43,7 +43,6 @@ import java.lang.invoke.MethodHandles; import java.lang.invoke.VarHandle; import java.util.ArrayList; import java.util.Comparator; import java.util.Iterator; import java.util.NoSuchElementException; import java.util.concurrent.ConcurrentSkipListSet; import java.util.concurrent.atomic.AtomicInteger; Loading Loading @@ -245,19 +244,32 @@ public final class MessageQueue { private void decAndTraceMessageCount() { mMessageCount.decrementAndGet(); if (PerfettoTrace.MQ_CATEGORY.isEnabled()) { if (PerfettoTrace.isMQCategoryEnabled()) { traceMessageCount(); } } private void incAndTraceMessageCount(Message msg, long when) { mMessageCount.incrementAndGet(); if (PerfettoTrace.MQ_CATEGORY.isEnabled()) { if (PerfettoTrace.isMQCategoryEnabled()) { msg.sendingThreadName = Thread.currentThread().getName(); final long eventId = msg.eventId = PerfettoTrace.getFlowId(); traceMessageCount(); final long messageDelayMs = Math.max(0L, when - SystemClock.uptimeMillis()); if (PerfettoTrace.IS_USE_SDK_TRACING_API_V3) { com.android.internal.dev.perfetto.sdk.PerfettoTrace.instant( PerfettoTrace.MQ_CATEGORY_V3, "message_queue_send") .setFlow(eventId) .beginProto() .beginNested(2004 /* message_queue */) .addField(2 /* receiving_thread_name */, mThreadName) .addField(3 /* message_code */, msg.what) .addField(4 /* message_delay_ms */, messageDelayMs) .endNested() .endProto() .emit(); } else { PerfettoTrace.instant(PerfettoTrace.MQ_CATEGORY, "message_queue_send") .setFlow(eventId) .beginProto() Loading @@ -270,12 +282,20 @@ public final class MessageQueue { .emit(); } } } private void traceMessageCount() { if (PerfettoTrace.IS_USE_SDK_TRACING_API_V3) { com.android.internal.dev.perfetto.sdk.PerfettoTrace.counter( PerfettoTrace.MQ_CATEGORY_V3, mMessageCount.get()) .usingThreadCounterTrack(mTid, mThreadName) .emit(); } else { PerfettoTrace.counter(PerfettoTrace.MQ_CATEGORY, mMessageCount.get()) .usingThreadCounterTrack(mTid, mThreadName) .emit(); } } // Disposes of the underlying message queue. // Must only be called on the looper thread or the finalizer. Loading core/java/android/os/Looper.java +29 −11 Original line number Diff line number Diff line Loading @@ -200,7 +200,18 @@ public final class Looper { return false; } if (PerfettoTrace.MQ_CATEGORY.isEnabled()) { if (PerfettoTrace.isMQCategoryEnabled()) { if (PerfettoTrace.IS_USE_SDK_TRACING_API_V3) { com.android.internal.dev.perfetto.sdk.PerfettoTrace.begin( PerfettoTrace.MQ_CATEGORY_V3, "message_queue_receive") .beginProto() .beginNested(2004 /* message_queue */) .addField(1 /* sending_thread_name */, msg.sendingThreadName) .endNested() .endProto() .setTerminatingFlow(msg.eventId) .emit(); } else { PerfettoTrace.begin(PerfettoTrace.MQ_CATEGORY, "message_queue_receive") .beginProto() .beginNested(2004 /* message_queue */) Loading @@ -210,6 +221,7 @@ public final class Looper { .setTerminatingFlow(msg.eventId) .emit(); } } // This must be in a local variabe, in case a UI event sets the logger final Printer logging = me.mLogging; Loading Loading @@ -300,9 +312,15 @@ public final class Looper { + msg.target.getClass().getName() + " " + msg.callback + " what=" + msg.what); } if (PerfettoTrace.MQ_CATEGORY.isEnabled()) { if (PerfettoTrace.isMQCategoryEnabled()) { if (PerfettoTrace.IS_USE_SDK_TRACING_API_V3) { com.android.internal.dev.perfetto.sdk.PerfettoTrace.end( PerfettoTrace.MQ_CATEGORY_V3) .emit(); } else { PerfettoTrace.end(PerfettoTrace.MQ_CATEGORY).emit(); } } msg.recycleUnchecked(); Loading Loading
Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -425,6 +425,7 @@ java_defaults { "perfetto_trace_javastream_protos_jarjar", "libaconfig_java_proto_nano", "aconfig_device_paths_java", "perfetto_trace_lib_framework_java", ], } Loading
apct-tests/perftests/core/src/android/os/TracePerfTest.java +90 −0 Original line number Diff line number Diff line Loading @@ -46,7 +46,14 @@ public class TracePerfTest { private static final String FOO = "foo"; private static final Category FOO_CATEGORY = new Category(FOO); private static final com.android.internal.dev.perfetto.sdk.PerfettoTrace.Category FOO_CATEGORY_V3 = new com.android.internal.dev.perfetto.sdk.PerfettoTrace.Category(FOO); private static final Category UNREGISTERED_CATEGORY = new Category("unregistered"); private static final com.android.internal.dev.perfetto.sdk.PerfettoTrace.Category UNREGISTERED_CATEGORY_V3 = new com.android.internal.dev.perfetto.sdk.PerfettoTrace.Category( "unregistered"); private static PerfettoTrace.Session sPerfettoSession; @BeforeClass Loading @@ -54,6 +61,7 @@ public class TracePerfTest { ShellHelper.runShellCommandRaw("atrace -c --async_start -a *"); PerfettoTrace.register(false /* isBackendInProcess */); FOO_CATEGORY.register(); FOO_CATEGORY_V3.register(); sPerfettoSession = new PerfettoTrace.Session(false /* isBackendInProcess */, getTraceConfig(FOO).toByteArray()); } Loading Loading @@ -188,6 +196,88 @@ public class TracePerfTest { } } @Test public void testInstantPerfettoV3() { com.android.internal.dev.perfetto.sdk.PerfettoTrace.instant(FOO_CATEGORY_V3, "testInstantP") .emit(); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { com.android.internal.dev.perfetto.sdk.PerfettoTrace.instant( FOO_CATEGORY_V3, "testInstantP") .emit(); } } @Test public void testInstantPerfettoV3WithArgs() { com.android.internal.dev.perfetto.sdk.PerfettoTrace.instant(FOO_CATEGORY_V3, "testInstantP") .addArg("foo", "bar") .setFlow(1) .emit(); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { com.android.internal.dev.perfetto.sdk.PerfettoTrace.instant( FOO_CATEGORY_V3, "testInstantP") .addArg("foo", "bar") .setFlow(1) .emit(); } } @Test public void testInstantPerfettoV3WithProto() { com.android.internal.dev.perfetto.sdk.PerfettoTrace.begin( FOO_CATEGORY_V3, "message_queue_receive") .beginProto() .beginNested(2004 /* message_queue */) .addField(1 /* sending_thread_name */, "foo") .endNested() .endProto() .setTerminatingFlow(5) .emit(); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { com.android.internal.dev.perfetto.sdk.PerfettoTrace.begin( FOO_CATEGORY_V3, "message_queue_receive") .beginProto() .beginNested(2004 /* message_queue */) .addField(1 /* sending_thread_name */, "foo") .endNested() .endProto() .setTerminatingFlow(5) .emit(); } } @Test public void testInstantPerfettoV3WithProtoUnregistered() { com.android.internal.dev.perfetto.sdk.PerfettoTrace.begin( UNREGISTERED_CATEGORY_V3, "message_queue_receive") .beginProto() .beginNested(2004 /* message_queue */) .addField(1 /* sending_thread_name */, "foo") .endNested() .endProto() .setTerminatingFlow(5) .emit(); BenchmarkState state = mPerfStatusReporter.getBenchmarkState(); while (state.keepRunning()) { com.android.internal.dev.perfetto.sdk.PerfettoTrace.begin( UNREGISTERED_CATEGORY_V3, "message_queue_receive") .beginProto() .beginNested(2004 /* message_queue */) .addField(1 /* sending_thread_name */, "foo") .endNested() .endProto() .setTerminatingFlow(5) .emit(); } } private static TraceConfig getTraceConfig(String cat) { BufferConfig bufferConfig = BufferConfig.newBuilder().setSizeKb(1024).build(); TrackEventConfig trackEventConfig = TrackEventConfig Loading
boot/boot-image-profile-extra.txt +42 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,48 @@ HSPLjava/util/concurrent/ConcurrentSkipListMap$KeyIterator;->* HSPLjava/util/concurrent/ConcurrentSkipListMap$KeySet;->* HSPLjava/util/concurrent/ConcurrentSkipListSet;->* # For now, also compile all method in the 'com.android.internal.dev.perfetto.sdk' Perfetto Trace API. # Similar to the existing Trace APIs, these new APIs can impact the performance # of many subsystems including MessageQueue. This also keeps benchmark # comparisons between both APIs fair. # The list is generated from the # 'out/soong/.intermediates/external/perfetto/perfetto_trace_lib_framework_java/android_common/jarjar/perfetto_trace_lib_framework_java.jar' # jar file, using the following command: # ``` # jar tvf \ # out/soong/.intermediates/external/perfetto/perfetto_trace_lib_framework_java/android_common/jarjar/perfetto_trace_lib_framework_java.jar \ # | awk '$8 ~ /\.class$/ {sub(/\.class$/, "", $8); print "HSPL" $8 ";->*"}' # ``` HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$Proto;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$PerfettoPointer;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$NamedTrack;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$Flow;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$FieldString;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$FieldNested;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$FieldInt64;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$FieldDouble;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$FieldContainer;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$CounterTrack;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$CounterInt64;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$CounterDouble;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$ArgString;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$ArgInt64;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$ArgDouble;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventExtra$ArgBool;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventBuilder;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventBuilder$RingBuffer;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventBuilder$Pool;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventBuilder$ObjectsPool;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventBuilder$ObjectsCache;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrackEventBuilder$LazyInitObjects;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrace;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrace$Session;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoTrace$Category;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoNativeMemoryCleaner;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoNativeMemoryCleaner$FreeNativeMemoryRunnable;->* HSPLcom/android/internal/dev/perfetto/sdk/PerfettoNativeMemoryCleaner$AllocationStats;->* # While the SystemFeaturesMetadata static cache isn't heavyweight, ensure it's # pre-initialized in the boot image to avoid redundant per-process overhead. # TODO(b/326623529): Consider removing this after the feature has fully ramped Loading
core/java/android/os/CombinedMessageQueue/MessageQueue.java +36 −16 Original line number Diff line number Diff line Loading @@ -43,7 +43,6 @@ import java.lang.invoke.MethodHandles; import java.lang.invoke.VarHandle; import java.util.ArrayList; import java.util.Comparator; import java.util.Iterator; import java.util.NoSuchElementException; import java.util.concurrent.ConcurrentSkipListSet; import java.util.concurrent.atomic.AtomicInteger; Loading Loading @@ -245,19 +244,32 @@ public final class MessageQueue { private void decAndTraceMessageCount() { mMessageCount.decrementAndGet(); if (PerfettoTrace.MQ_CATEGORY.isEnabled()) { if (PerfettoTrace.isMQCategoryEnabled()) { traceMessageCount(); } } private void incAndTraceMessageCount(Message msg, long when) { mMessageCount.incrementAndGet(); if (PerfettoTrace.MQ_CATEGORY.isEnabled()) { if (PerfettoTrace.isMQCategoryEnabled()) { msg.sendingThreadName = Thread.currentThread().getName(); final long eventId = msg.eventId = PerfettoTrace.getFlowId(); traceMessageCount(); final long messageDelayMs = Math.max(0L, when - SystemClock.uptimeMillis()); if (PerfettoTrace.IS_USE_SDK_TRACING_API_V3) { com.android.internal.dev.perfetto.sdk.PerfettoTrace.instant( PerfettoTrace.MQ_CATEGORY_V3, "message_queue_send") .setFlow(eventId) .beginProto() .beginNested(2004 /* message_queue */) .addField(2 /* receiving_thread_name */, mThreadName) .addField(3 /* message_code */, msg.what) .addField(4 /* message_delay_ms */, messageDelayMs) .endNested() .endProto() .emit(); } else { PerfettoTrace.instant(PerfettoTrace.MQ_CATEGORY, "message_queue_send") .setFlow(eventId) .beginProto() Loading @@ -270,12 +282,20 @@ public final class MessageQueue { .emit(); } } } private void traceMessageCount() { if (PerfettoTrace.IS_USE_SDK_TRACING_API_V3) { com.android.internal.dev.perfetto.sdk.PerfettoTrace.counter( PerfettoTrace.MQ_CATEGORY_V3, mMessageCount.get()) .usingThreadCounterTrack(mTid, mThreadName) .emit(); } else { PerfettoTrace.counter(PerfettoTrace.MQ_CATEGORY, mMessageCount.get()) .usingThreadCounterTrack(mTid, mThreadName) .emit(); } } // Disposes of the underlying message queue. // Must only be called on the looper thread or the finalizer. Loading
core/java/android/os/Looper.java +29 −11 Original line number Diff line number Diff line Loading @@ -200,7 +200,18 @@ public final class Looper { return false; } if (PerfettoTrace.MQ_CATEGORY.isEnabled()) { if (PerfettoTrace.isMQCategoryEnabled()) { if (PerfettoTrace.IS_USE_SDK_TRACING_API_V3) { com.android.internal.dev.perfetto.sdk.PerfettoTrace.begin( PerfettoTrace.MQ_CATEGORY_V3, "message_queue_receive") .beginProto() .beginNested(2004 /* message_queue */) .addField(1 /* sending_thread_name */, msg.sendingThreadName) .endNested() .endProto() .setTerminatingFlow(msg.eventId) .emit(); } else { PerfettoTrace.begin(PerfettoTrace.MQ_CATEGORY, "message_queue_receive") .beginProto() .beginNested(2004 /* message_queue */) Loading @@ -210,6 +221,7 @@ public final class Looper { .setTerminatingFlow(msg.eventId) .emit(); } } // This must be in a local variabe, in case a UI event sets the logger final Printer logging = me.mLogging; Loading Loading @@ -300,9 +312,15 @@ public final class Looper { + msg.target.getClass().getName() + " " + msg.callback + " what=" + msg.what); } if (PerfettoTrace.MQ_CATEGORY.isEnabled()) { if (PerfettoTrace.isMQCategoryEnabled()) { if (PerfettoTrace.IS_USE_SDK_TRACING_API_V3) { com.android.internal.dev.perfetto.sdk.PerfettoTrace.end( PerfettoTrace.MQ_CATEGORY_V3) .emit(); } else { PerfettoTrace.end(PerfettoTrace.MQ_CATEGORY).emit(); } } msg.recycleUnchecked(); Loading