ADD week 5
This commit is contained in:
128
02-Easy5/E5/sources/androidx/tracing/Trace.java
Normal file
128
02-Easy5/E5/sources/androidx/tracing/Trace.java
Normal file
@@ -0,0 +1,128 @@
|
||||
package androidx.tracing;
|
||||
|
||||
import android.util.Log;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
/* loaded from: classes.dex */
|
||||
public final class Trace {
|
||||
static final String TAG = "Trace";
|
||||
private static Method sAsyncTraceBeginMethod;
|
||||
private static Method sAsyncTraceEndMethod;
|
||||
private static Method sIsTagEnabledMethod;
|
||||
private static Method sTraceCounterMethod;
|
||||
private static long sTraceTagApp;
|
||||
|
||||
public static boolean isEnabled() {
|
||||
boolean isEnabled;
|
||||
try {
|
||||
if (sIsTagEnabledMethod == null) {
|
||||
isEnabled = android.os.Trace.isEnabled();
|
||||
return isEnabled;
|
||||
}
|
||||
} catch (NoClassDefFoundError | NoSuchMethodError unused) {
|
||||
}
|
||||
return isEnabledFallback();
|
||||
}
|
||||
|
||||
public static void beginSection(String str) {
|
||||
TraceApi18Impl.beginSection(str);
|
||||
}
|
||||
|
||||
public static void endSection() {
|
||||
TraceApi18Impl.endSection();
|
||||
}
|
||||
|
||||
public static void beginAsyncSection(String str, int i) {
|
||||
try {
|
||||
if (sAsyncTraceBeginMethod == null) {
|
||||
TraceApi29Impl.beginAsyncSection(str, i);
|
||||
return;
|
||||
}
|
||||
} catch (NoClassDefFoundError | NoSuchMethodError unused) {
|
||||
}
|
||||
beginAsyncSectionFallback(str, i);
|
||||
}
|
||||
|
||||
public static void endAsyncSection(String str, int i) {
|
||||
try {
|
||||
if (sAsyncTraceEndMethod == null) {
|
||||
TraceApi29Impl.endAsyncSection(str, i);
|
||||
return;
|
||||
}
|
||||
} catch (NoClassDefFoundError | NoSuchMethodError unused) {
|
||||
}
|
||||
endAsyncSectionFallback(str, i);
|
||||
}
|
||||
|
||||
public static void setCounter(String str, int i) {
|
||||
try {
|
||||
if (sTraceCounterMethod == null) {
|
||||
TraceApi29Impl.setCounter(str, i);
|
||||
return;
|
||||
}
|
||||
} catch (NoClassDefFoundError | NoSuchMethodError unused) {
|
||||
}
|
||||
setCounterFallback(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(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(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(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(String str, Exception exc) {
|
||||
if (exc instanceof InvocationTargetException) {
|
||||
Throwable cause = exc.getCause();
|
||||
if (cause instanceof RuntimeException) {
|
||||
throw ((RuntimeException) cause);
|
||||
}
|
||||
throw new RuntimeException(cause);
|
||||
}
|
||||
Log.v(TAG, "Unable to call " + str + " via reflection", exc);
|
||||
}
|
||||
|
||||
private Trace() {
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user