Loading core/java/android/os/Trace.java +40 −0 Original line number Original line Diff line number Diff line Loading @@ -131,6 +131,10 @@ public final class Trace { private static native void nativeAsyncTraceBegin(long tag, String name, int cookie); private static native void nativeAsyncTraceBegin(long tag, String name, int cookie); @FastNative @FastNative private static native void nativeAsyncTraceEnd(long tag, String name, int cookie); private static native void nativeAsyncTraceEnd(long tag, String name, int cookie); @FastNative private static native void nativeInstant(long tag, String name); @FastNative private static native void nativeInstantForTrack(long tag, String trackName, String name); private Trace() { private Trace() { } } Loading Loading @@ -257,6 +261,42 @@ public final class Trace { } } } } /** * Writes a trace message to indicate that a given section of code was invoked. * * @param traceTag The trace tag. * @param methodName The method name to appear in the trace. * @hide */ public static void instant(long traceTag, String methodName) { if (methodName == null) { throw new IllegalArgumentException("methodName cannot be null"); } if (isTagEnabled(traceTag)) { nativeInstant(traceTag, methodName); } } /** * Writes a trace message to indicate that a given section of code was invoked. * * @param traceTag The trace tag. * @param trackName The track where the event should appear in the trace. * @param methodName The method name to appear in the trace. * @hide */ public static void instantForTrack(long traceTag, String trackName, String methodName) { if (trackName == null) { throw new IllegalArgumentException("trackName cannot be null"); } if (methodName == null) { throw new IllegalArgumentException("methodName cannot be null"); } if (isTagEnabled(traceTag)) { nativeInstantForTrack(traceTag, trackName, methodName); } } /** /** * Checks whether or not tracing is currently enabled. This is useful to avoid intermediate * Checks whether or not tracing is currently enabled. This is useful to avoid intermediate * string creation for trace sections that require formatting. It is not necessary * string creation for trace sections that require formatting. It is not necessary Loading core/jni/android_os_Trace.cpp +22 −0 Original line number Original line Diff line number Diff line Loading @@ -90,6 +90,22 @@ static void android_os_Trace_nativeSetTracingEnabled(JNIEnv*, jclass, jboolean e atrace_set_tracing_enabled(enabled); atrace_set_tracing_enabled(enabled); } } static void android_os_Trace_nativeInstant(JNIEnv* env, jclass, jlong tag, jstring nameStr) { withString(env, nameStr, [tag](char* str) { atrace_instant(tag, str); }); } static void android_os_Trace_nativeInstantForTrack(JNIEnv* env, jclass, jlong tag, jstring trackStr, jstring nameStr) { withString(env, trackStr, [env, tag, nameStr](char* track) { withString(env, nameStr, [tag, track](char* name) { atrace_instant_for_track(tag, track, name); }); }); } static const JNINativeMethod gTraceMethods[] = { static const JNINativeMethod gTraceMethods[] = { /* name, signature, funcPtr */ /* name, signature, funcPtr */ { "nativeSetAppTracingAllowed", { "nativeSetAppTracingAllowed", Loading @@ -116,6 +132,12 @@ static const JNINativeMethod gTraceMethods[] = { { "nativeAsyncTraceEnd", { "nativeAsyncTraceEnd", "(JLjava/lang/String;I)V", "(JLjava/lang/String;I)V", (void*)android_os_Trace_nativeAsyncTraceEnd }, (void*)android_os_Trace_nativeAsyncTraceEnd }, { "nativeInstant", "(JLjava/lang/String;)V", (void*)android_os_Trace_nativeInstant }, { "nativeInstantForTrack", "(JLjava/lang/String;Ljava/lang/String;)V", (void*)android_os_Trace_nativeInstantForTrack }, // ----------- @CriticalNative ---------------- // ----------- @CriticalNative ---------------- { "nativeGetEnabledTags", { "nativeGetEnabledTags", Loading packages/SystemUI/src/com/android/systemui/log/LogBuffer.kt +4 −2 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.log package com.android.systemui.log import android.os.Trace import android.util.Log import android.util.Log import com.android.systemui.log.dagger.LogModule import com.android.systemui.log.dagger.LogModule import java.io.PrintWriter import java.io.PrintWriter Loading Loading @@ -169,7 +170,7 @@ class LogBuffer( buffer.add(message as LogMessageImpl) buffer.add(message as LogMessageImpl) if (logcatEchoTracker.isBufferLoggable(name, message.level) || if (logcatEchoTracker.isBufferLoggable(name, message.level) || logcatEchoTracker.isTagLoggable(message.tag, message.level)) { logcatEchoTracker.isTagLoggable(message.tag, message.level)) { echoToLogcat(message) echo(message) } } } } Loading Loading @@ -219,7 +220,7 @@ class LogBuffer( pw.println(message.printer(message)) pw.println(message.printer(message)) } } private fun echoToLogcat(message: LogMessage) { private fun echo(message: LogMessage) { val strMessage = message.printer(message) val strMessage = message.printer(message) when (message.level) { when (message.level) { LogLevel.VERBOSE -> Log.v(message.tag, strMessage) LogLevel.VERBOSE -> Log.v(message.tag, strMessage) Loading @@ -229,6 +230,7 @@ class LogBuffer( LogLevel.ERROR -> Log.e(message.tag, strMessage) LogLevel.ERROR -> Log.e(message.tag, strMessage) LogLevel.WTF -> Log.wtf(message.tag, strMessage) LogLevel.WTF -> Log.wtf(message.tag, strMessage) } } Trace.instantForTrack(Trace.TRACE_TAG_APP, "UI Events", strMessage) } } } } Loading Loading
core/java/android/os/Trace.java +40 −0 Original line number Original line Diff line number Diff line Loading @@ -131,6 +131,10 @@ public final class Trace { private static native void nativeAsyncTraceBegin(long tag, String name, int cookie); private static native void nativeAsyncTraceBegin(long tag, String name, int cookie); @FastNative @FastNative private static native void nativeAsyncTraceEnd(long tag, String name, int cookie); private static native void nativeAsyncTraceEnd(long tag, String name, int cookie); @FastNative private static native void nativeInstant(long tag, String name); @FastNative private static native void nativeInstantForTrack(long tag, String trackName, String name); private Trace() { private Trace() { } } Loading Loading @@ -257,6 +261,42 @@ public final class Trace { } } } } /** * Writes a trace message to indicate that a given section of code was invoked. * * @param traceTag The trace tag. * @param methodName The method name to appear in the trace. * @hide */ public static void instant(long traceTag, String methodName) { if (methodName == null) { throw new IllegalArgumentException("methodName cannot be null"); } if (isTagEnabled(traceTag)) { nativeInstant(traceTag, methodName); } } /** * Writes a trace message to indicate that a given section of code was invoked. * * @param traceTag The trace tag. * @param trackName The track where the event should appear in the trace. * @param methodName The method name to appear in the trace. * @hide */ public static void instantForTrack(long traceTag, String trackName, String methodName) { if (trackName == null) { throw new IllegalArgumentException("trackName cannot be null"); } if (methodName == null) { throw new IllegalArgumentException("methodName cannot be null"); } if (isTagEnabled(traceTag)) { nativeInstantForTrack(traceTag, trackName, methodName); } } /** /** * Checks whether or not tracing is currently enabled. This is useful to avoid intermediate * Checks whether or not tracing is currently enabled. This is useful to avoid intermediate * string creation for trace sections that require formatting. It is not necessary * string creation for trace sections that require formatting. It is not necessary Loading
core/jni/android_os_Trace.cpp +22 −0 Original line number Original line Diff line number Diff line Loading @@ -90,6 +90,22 @@ static void android_os_Trace_nativeSetTracingEnabled(JNIEnv*, jclass, jboolean e atrace_set_tracing_enabled(enabled); atrace_set_tracing_enabled(enabled); } } static void android_os_Trace_nativeInstant(JNIEnv* env, jclass, jlong tag, jstring nameStr) { withString(env, nameStr, [tag](char* str) { atrace_instant(tag, str); }); } static void android_os_Trace_nativeInstantForTrack(JNIEnv* env, jclass, jlong tag, jstring trackStr, jstring nameStr) { withString(env, trackStr, [env, tag, nameStr](char* track) { withString(env, nameStr, [tag, track](char* name) { atrace_instant_for_track(tag, track, name); }); }); } static const JNINativeMethod gTraceMethods[] = { static const JNINativeMethod gTraceMethods[] = { /* name, signature, funcPtr */ /* name, signature, funcPtr */ { "nativeSetAppTracingAllowed", { "nativeSetAppTracingAllowed", Loading @@ -116,6 +132,12 @@ static const JNINativeMethod gTraceMethods[] = { { "nativeAsyncTraceEnd", { "nativeAsyncTraceEnd", "(JLjava/lang/String;I)V", "(JLjava/lang/String;I)V", (void*)android_os_Trace_nativeAsyncTraceEnd }, (void*)android_os_Trace_nativeAsyncTraceEnd }, { "nativeInstant", "(JLjava/lang/String;)V", (void*)android_os_Trace_nativeInstant }, { "nativeInstantForTrack", "(JLjava/lang/String;Ljava/lang/String;)V", (void*)android_os_Trace_nativeInstantForTrack }, // ----------- @CriticalNative ---------------- // ----------- @CriticalNative ---------------- { "nativeGetEnabledTags", { "nativeGetEnabledTags", Loading
packages/SystemUI/src/com/android/systemui/log/LogBuffer.kt +4 −2 Original line number Original line Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.systemui.log package com.android.systemui.log import android.os.Trace import android.util.Log import android.util.Log import com.android.systemui.log.dagger.LogModule import com.android.systemui.log.dagger.LogModule import java.io.PrintWriter import java.io.PrintWriter Loading Loading @@ -169,7 +170,7 @@ class LogBuffer( buffer.add(message as LogMessageImpl) buffer.add(message as LogMessageImpl) if (logcatEchoTracker.isBufferLoggable(name, message.level) || if (logcatEchoTracker.isBufferLoggable(name, message.level) || logcatEchoTracker.isTagLoggable(message.tag, message.level)) { logcatEchoTracker.isTagLoggable(message.tag, message.level)) { echoToLogcat(message) echo(message) } } } } Loading Loading @@ -219,7 +220,7 @@ class LogBuffer( pw.println(message.printer(message)) pw.println(message.printer(message)) } } private fun echoToLogcat(message: LogMessage) { private fun echo(message: LogMessage) { val strMessage = message.printer(message) val strMessage = message.printer(message) when (message.level) { when (message.level) { LogLevel.VERBOSE -> Log.v(message.tag, strMessage) LogLevel.VERBOSE -> Log.v(message.tag, strMessage) Loading @@ -229,6 +230,7 @@ class LogBuffer( LogLevel.ERROR -> Log.e(message.tag, strMessage) LogLevel.ERROR -> Log.e(message.tag, strMessage) LogLevel.WTF -> Log.wtf(message.tag, strMessage) LogLevel.WTF -> Log.wtf(message.tag, strMessage) } } Trace.instantForTrack(Trace.TRACE_TAG_APP, "UI Events", strMessage) } } } } Loading