package com.kabouzeid.gramophone.misc; import android.util.Log; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; /** * @author Aidan Follestad (afollestad) */ public class LagTracker { private static LagTracker mSingleton; private static Map<String, Long> mMap; private boolean mEnabled = true; private LagTracker() { mMap = new HashMap<>(); } public static LagTracker get() { if (mSingleton == null) mSingleton = new LagTracker(); return mSingleton; } public LagTracker enable() { mEnabled = true; return this; } public LagTracker disable() { mEnabled = false; return this; } public void start(String key) { final long start = System.nanoTime(); if (!mEnabled) { if (!mMap.isEmpty()) mMap.clear(); return; } mMap.put(key, start); } public void end(String key) { final long end = System.nanoTime(); if (!mEnabled) { if (!mMap.isEmpty()) mMap.clear(); return; } if (!mMap.containsKey(key)) throw new IllegalStateException("No start time found for " + key); long start = mMap.get(key); long diff = end - start; print(key, diff); mMap.remove(key); } private void print(String key, long diff) { long ms = TimeUnit.NANOSECONDS.toMillis(diff); long s = TimeUnit.NANOSECONDS.toSeconds(diff); Log.d("LagTracker", "[" + key + " completed in]: " + diff + " ns (" + ms + "ms, " + s + "s)"); } }