摘要:
public class HackCallback implements Handler.Callback { private static final String TAG = "Matrix.HackCallback"; private static final int LAUNCH_ACTIV 阅读全文
摘要:
@Override public void onActivityCreated(Activity activity) { super.onActivityCreated(activity); if (isFirstActivityCreate && mFirstActivityMap.isEmpty 阅读全文
摘要:
内部FrameBeat类实现了Choreographer.FrameCallback,可以感知每一帧的绘制时间。通过前后两帧的时间差判断是否有慢函数发生。 @Override public void doFrame(long lastFrameNanos, long frameNanos) { if 阅读全文
摘要:
private final class AnalyseTask implements Runnable { private final long[] buffer; private final AnalyseExtraInfo analyseExtraInfo; private AnalyseTas 阅读全文
摘要:
目的:检测绘制过程中的FPS数量。 获取DectorView的ViewTreeObserver,感知UI绘制的开始 private void addDrawListener(final Activity activity) { activity.getWindow().getDecorView(). 阅读全文
摘要:
目的:检测UI绘制过程中的卡顿情况。 卡顿检测与FPS检测类似,在每一帧的`doFrame回调中判断是否有卡顿发生,如有卡顿将数据发送到后台分析线程处理。 @Override public void doFrame(final long lastFrameNanos, final long fram 阅读全文
摘要:
目的:检测启动阶段耗时 应用启动时,会直接对ActivityThread类hook public class Hacker { private static final String TAG = "Matrix.Hacker"; public static boolean isEnterAnimat 阅读全文
摘要:
目的:检测影响主线程执行的慢函数。 上文讲述了在编译期,会对每个方法的执行体前后添加上MethodBeat.i(int methodId)和MethodBeat.o(int methodId)的方法调用,且methodId是在编译期生成的,在运行时是一个写死的常量。通过编译期的这个操作,就能感知到具 阅读全文
摘要:
private void insertWindowFocusChangeMethod(ClassVisitor cv) { MethodVisitor methodVisitor = cv.visitMethod(Opcodes.ACC_PUBLIC, TraceBuildConstants.MAT 阅读全文