public class LogPrinter implements Printer, UiPerfMonitorConfig { private final String TAG = "LogPrinter"; private LogPrinterListener mLogPrinter = null; private long startTime;
public LogPrinter(LogPrinterListener logPrinter) { mLogPrinter = logPrinter; }
private void excuTime(String logInfo, long diffTime) { int level = 0; if (diffTime > TIME_WARNING_LEVEL_2) { level = UI_PERF_LEVEL_2; } else if (diffTime > TIME_WARNING_LEVEL_1) { level = UI_PERF_LEVEL_1; } mLogPrinter.onEndLog(logInfo, level); } }
UiPerfMonitorConfig定义了相关常量:
1 2 3 4 5 6 7 8 9 10
public interface UiPerfMonitorConfig{ public final int UI_PERF_LEVEL_1 = 1; public final int UI_PERF_LEVEL_2 = 2; public final long TIME_WARNING_LEVEL_1 = 100; public final long TIME_WARNING_LEVEL_2 = 300; public final String LOG_PATH = Enviroment.getExternalStorageDirectory().getPath() + "androidtech/uiperf"; }
public abstract class BaseSampler { private final String TAG = "BaseSampler"; private Handler mControlHandler = null; private int intervalTime = 500; //采样间隔 private AtomicBoolean mIsSampling = new AtomicBoolean(false);
private Runnable mRunnable = new Runnable() { @Override public void run() { doSample(); if (mIsSampling.get()) { getControlHandler().postDelayed(mRunnable, intervalTime); } } };
public BaseSampler() { GLog.d(TAG, "Init BaseSampler!"); }
/** * 开始采样 */ public void start() { if (!mIsSampling.get()) { GLog.d(TAG, "start sampler!"); getControlHandler().removeCallbacks(mRunnable); getControlHandler().post(mRunnable); mIsSampling.set(true); } }
/** * 开始采样 */ public void stop() { if (mIsSampling.get()) { GLog.d(TAG, "stop sampler!"); getControlHandler().removeCallbacks(mRunnable); mIsSampling.set(false); } }
private Handler getControlHandler() { if (mControlHandler == null) { HandlerThread mHT = new HandlerThread("SamplerThread"); mHT.start(); mControlHandler = new Handler(mHT.getLooper()); } return mControlHandler; }
public class UiMonitorManager implements UiPerfMonitorConfig, LogPrinterListener { private final String TAG = "UiMonitorManager"; private static UiMonitorManager mInstance = null; private LogPrinter mLogPrinter; private LogWriteThread mLogWriteThread; private int monitorState = UI_PERF_MONITOR_STOP; private CPUInfoSampler mCpuInfoSampler;
public synchronized static UiMonitorManager getInstance() { if (mInstance == null) { mInstance = new UiMonitorManager(); } return mInstance; }
public UiMonitorManager() { mLogPrinter = new LogPrinter(this); mCpuInfoSampler = new CPUInfoSampler(); mLogWriteThread = new LogWriteThread(); initLogPath(); }