- 28,932 files - Full Java source code - Smali files - Resources Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
140 lines
5.0 KiB
Java
140 lines
5.0 KiB
Java
package androidx.tracing;
|
|
|
|
import android.os.Build;
|
|
import androidx.annotation.NonNull;
|
|
import java.lang.reflect.InvocationTargetException;
|
|
import java.lang.reflect.Method;
|
|
|
|
/* loaded from: classes.dex */
|
|
public final class Trace {
|
|
static final int MAX_TRACE_LABEL_LENGTH = 127;
|
|
static final String TAG = "Trace";
|
|
private static Method sAsyncTraceBeginMethod;
|
|
private static Method sAsyncTraceEndMethod;
|
|
private static boolean sHasAppTracingEnabled;
|
|
private static Method sIsTagEnabledMethod;
|
|
private static Method sTraceCounterMethod;
|
|
private static long sTraceTagApp;
|
|
|
|
public static boolean isEnabled() {
|
|
if (Build.VERSION.SDK_INT >= 29) {
|
|
return TraceApi29Impl.isEnabled();
|
|
}
|
|
return isEnabledFallback();
|
|
}
|
|
|
|
public static void forceEnableAppTracing() {
|
|
if (Build.VERSION.SDK_INT < 31) {
|
|
try {
|
|
if (sHasAppTracingEnabled) {
|
|
return;
|
|
}
|
|
sHasAppTracingEnabled = true;
|
|
android.os.Trace.class.getMethod("setAppTracingAllowed", Boolean.TYPE).invoke(null, Boolean.TRUE);
|
|
} catch (Exception e) {
|
|
handleException("setAppTracingAllowed", e);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void beginSection(@NonNull String str) {
|
|
TraceApi18Impl.beginSection(truncatedTraceSectionLabel(str));
|
|
}
|
|
|
|
public static void endSection() {
|
|
TraceApi18Impl.endSection();
|
|
}
|
|
|
|
public static void beginAsyncSection(@NonNull String str, int i) {
|
|
if (Build.VERSION.SDK_INT >= 29) {
|
|
TraceApi29Impl.beginAsyncSection(truncatedTraceSectionLabel(str), i);
|
|
} else {
|
|
beginAsyncSectionFallback(truncatedTraceSectionLabel(str), i);
|
|
}
|
|
}
|
|
|
|
public static void endAsyncSection(@NonNull String str, int i) {
|
|
if (Build.VERSION.SDK_INT >= 29) {
|
|
TraceApi29Impl.endAsyncSection(truncatedTraceSectionLabel(str), i);
|
|
} else {
|
|
endAsyncSectionFallback(truncatedTraceSectionLabel(str), i);
|
|
}
|
|
}
|
|
|
|
public static void setCounter(@NonNull String str, int i) {
|
|
if (Build.VERSION.SDK_INT >= 29) {
|
|
TraceApi29Impl.setCounter(truncatedTraceSectionLabel(str), i);
|
|
} else {
|
|
setCounterFallback(truncatedTraceSectionLabel(str), i);
|
|
}
|
|
}
|
|
|
|
private static boolean isEnabledFallback() {
|
|
try {
|
|
if (sIsTagEnabledMethod == null) {
|
|
sTraceTagApp = android.os.Trace.class.getField("TRACE_TAG_APP").getLong(null);
|
|
sIsTagEnabledMethod = android.os.Trace.class.getMethod("isTagEnabled", Long.TYPE);
|
|
}
|
|
return ((Boolean) sIsTagEnabledMethod.invoke(null, Long.valueOf(sTraceTagApp))).booleanValue();
|
|
} catch (Exception e) {
|
|
handleException("isTagEnabled", e);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private static void beginAsyncSectionFallback(@NonNull String str, int i) {
|
|
try {
|
|
if (sAsyncTraceBeginMethod == null) {
|
|
sAsyncTraceBeginMethod = android.os.Trace.class.getMethod("asyncTraceBegin", Long.TYPE, String.class, Integer.TYPE);
|
|
}
|
|
sAsyncTraceBeginMethod.invoke(null, Long.valueOf(sTraceTagApp), str, Integer.valueOf(i));
|
|
} catch (Exception e) {
|
|
handleException("asyncTraceBegin", e);
|
|
}
|
|
}
|
|
|
|
private static void endAsyncSectionFallback(@NonNull String str, int i) {
|
|
try {
|
|
if (sAsyncTraceEndMethod == null) {
|
|
sAsyncTraceEndMethod = android.os.Trace.class.getMethod("asyncTraceEnd", Long.TYPE, String.class, Integer.TYPE);
|
|
}
|
|
sAsyncTraceEndMethod.invoke(null, Long.valueOf(sTraceTagApp), str, Integer.valueOf(i));
|
|
} catch (Exception e) {
|
|
handleException("asyncTraceEnd", e);
|
|
}
|
|
}
|
|
|
|
private static void setCounterFallback(@NonNull String str, int i) {
|
|
try {
|
|
if (sTraceCounterMethod == null) {
|
|
sTraceCounterMethod = android.os.Trace.class.getMethod("traceCounter", Long.TYPE, String.class, Integer.TYPE);
|
|
}
|
|
sTraceCounterMethod.invoke(null, Long.valueOf(sTraceTagApp), str, Integer.valueOf(i));
|
|
} catch (Exception e) {
|
|
handleException("traceCounter", e);
|
|
}
|
|
}
|
|
|
|
private static void handleException(@NonNull String str, @NonNull Exception exc) {
|
|
if (exc instanceof InvocationTargetException) {
|
|
Throwable cause = exc.getCause();
|
|
if (cause instanceof RuntimeException) {
|
|
throw ((RuntimeException) cause);
|
|
}
|
|
throw new RuntimeException(cause);
|
|
}
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.append("Unable to call ");
|
|
sb.append(str);
|
|
sb.append(" via reflection");
|
|
}
|
|
|
|
@NonNull
|
|
private static String truncatedTraceSectionLabel(@NonNull String str) {
|
|
return str.length() <= 127 ? str : str.substring(0, 127);
|
|
}
|
|
|
|
private Trace() {
|
|
}
|
|
}
|