TimingLoggerpublic class TimingLogger extends Object A utility class to help log timings splits throughout a method call.
Typical usage is:
TimingLogger timings = new TimingLogger(TAG, "methodA");
... do some work A ...
timings.addSplit("work A");
... do some work B ...
timings.addSplit("work B");
... do some work C ...
timings.addSplit("work C");
timings.dumpToLog();
The dumpToLog call would add the following to the log:
D/TAG ( 3459): methodA: begin
D/TAG ( 3459): methodA: 9 ms, work A
D/TAG ( 3459): methodA: 1 ms, work B
D/TAG ( 3459): methodA: 6 ms, work C
D/TAG ( 3459): methodA: end, 16 ms |
Fields Summary |
---|
private String | mTagThe Log tag to use for checking Log.isLoggable and for
logging the timings. | private String | mLabelA label to be included in every log. | private boolean | mDisabledUsed to track whether Log.isLoggable was enabled at reset time. | ArrayList | mSplitsStores the time of each split. | ArrayList | mSplitLabelsStores the labels for each split. |
Constructors Summary |
---|
public TimingLogger(String tag, String label)Create and initialize a TimingLogger object that will log using
the specific tag. If the Log.isLoggable is not enabled to at
least the Log.VERBOSE level for that tag at creation time then
the addSplit and dumpToLog call will do nothing.
reset(tag, label);
|
Methods Summary |
---|
public void | addSplit(java.lang.String splitLabel)Add a split for the current time, labeled with splitLabel. If
Log.isLoggable was not enabled to at least the Log.VERBOSE for
the specified tag at construction or reset() time then this
call does nothing.
if (mDisabled) return;
long now = SystemClock.elapsedRealtime();
mSplits.add(now);
mSplitLabels.add(splitLabel);
| public void | dumpToLog()Dumps the timings to the log using Log.d(). If Log.isLoggable was
not enabled to at least the Log.VERBOSE for the specified tag at
construction or reset() time then this call does nothing.
if (mDisabled) return;
Log.d(mTag, 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);
Log.d(mTag, mLabel + ": " + (now - prev) + " ms, " + splitLabel);
}
Log.d(mTag, mLabel + ": end, " + (now - first) + " ms");
| public void | reset(java.lang.String tag, java.lang.String label)Clear and initialize a TimingLogger object that will log using
the specific tag. If the Log.isLoggable is not enabled to at
least the Log.VERBOSE level for that tag at creation time then
the addSplit and dumpToLog call will do nothing.
mTag = tag;
mLabel = label;
reset();
| public void | reset()Clear and initialize a TimingLogger object that will log using
the tag and label that was specified previously, either via
the constructor or a call to reset(tag, label). If the
Log.isLoggable is not enabled to at least the Log.VERBOSE
level for that tag at creation time then the addSplit and
dumpToLog call will do nothing.
mDisabled = !Log.isLoggable(mTag, Log.VERBOSE);
if (mDisabled) return;
if (mSplits == null) {
mSplits = new ArrayList<Long>();
mSplitLabels = new ArrayList<String>();
} else {
mSplits.clear();
mSplitLabels.clear();
}
addSplit(null);
|
|