blob: 4660a3500b254427ae998e71990c529fdb5e75da [file] [log] [blame]
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");
}
}