package org.wordpress.android.util; import android.os.SystemClock; import org.wordpress.android.util.AppLog.T; import java.util.ArrayList; /** * forked from android.util.TimingLogger to use AppLog instead of Log + new static interface. */ public class ProfilingUtils { private static ProfilingUtils sInstance; private String mLabel; private ArrayList<Long> mSplits; private ArrayList<String> mSplitLabels; public static void start(String label) { getInstance().reset(label); } public static void split(String splitLabel) { getInstance().addSplit(splitLabel); } public static void dump() { getInstance().dumpToLog(); } public static void stop() { getInstance().reset(null); } private static ProfilingUtils getInstance() { if (sInstance == null) { sInstance = new ProfilingUtils(); } return sInstance; } public ProfilingUtils() { reset("init"); } public void reset(String label) { mLabel = label; reset(); } public void reset() { if (mSplits == null) { mSplits = new ArrayList<Long>(); mSplitLabels = new ArrayList<String>(); } else { mSplits.clear(); mSplitLabels.clear(); } addSplit(null); } public void addSplit(String splitLabel) { if (mLabel == null) { return; } long now = SystemClock.elapsedRealtime(); mSplits.add(now); mSplitLabels.add(splitLabel); } public void dumpToLog() { if (mLabel == null) { return; } AppLog.d(T.PROFILING, mLabel + ": begin"); final long first = mSplits.get(0); long now = first; for (int i = 1; i < mSplits.size(); i++) { now = mSplits.get(i); final String splitLabel = mSplitLabels.get(i); final long prev = mSplits.get(i - 1); AppLog.d(T.PROFILING, mLabel + ": " + (now - prev) + " ms, " + splitLabel); } AppLog.d(T.PROFILING, mLabel + ": end, " + (now - first) + " ms"); } }