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
commit a9666fccb9
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);
@FastNative
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() {
}
@ -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
* 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);
}
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[] = {
/* name, signature, funcPtr */
{ "nativeSetAppTracingAllowed",
@ -116,6 +132,12 @@ static const JNINativeMethod gTraceMethods[] = {
{ "nativeAsyncTraceEnd",
"(JLjava/lang/String;I)V",
(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 ----------------
{ "nativeGetEnabledTags",

View File

@ -16,6 +16,7 @@
package com.android.systemui.log
import android.os.Trace
import android.util.Log
import com.android.systemui.log.dagger.LogModule
import java.io.PrintWriter
@ -169,7 +170,7 @@ class LogBuffer(
buffer.add(message as LogMessageImpl)
if (logcatEchoTracker.isBufferLoggable(name, message.level) ||
logcatEchoTracker.isTagLoggable(message.tag, message.level)) {
echoToLogcat(message)
echo(message)
}
}
@ -219,7 +220,7 @@ class LogBuffer(
pw.println(message.printer(message))
}
private fun echoToLogcat(message: LogMessage) {
private fun echo(message: LogMessage) {
val strMessage = message.printer(message)
when (message.level) {
LogLevel.VERBOSE -> Log.v(message.tag, strMessage)
@ -229,6 +230,7 @@ class LogBuffer(
LogLevel.ERROR -> Log.e(message.tag, strMessage)
LogLevel.WTF -> Log.wtf(message.tag, strMessage)
}
Trace.instantForTrack(Trace.TRACE_TAG_APP, "UI Events", strMessage)
}
}