Merge "Log UI events to traces"

This commit is contained in:
Treehugger Robot
2021-12-15 18:11:52 +00:00
committed by Gerrit Code Review
3 changed files with 66 additions and 2 deletions

View File

@@ -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() {
} }
@@ -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

View File

@@ -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",
@@ -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",

View File

@@ -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
@@ -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)
} }
} }
@@ -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)
@@ -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)
} }
} }