1 /*
2  * Copyright (C) 2015 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.tv.common.util;
18 
19 import android.os.SystemClock;
20 import android.util.Log;
21 import com.android.tv.common.BuildConfig;
22 
23 /** Times a duration. */
24 public final class DurationTimer {
25     private static final String TAG = "DurationTimer";
26     public static final long TIME_NOT_SET = -1;
27 
28     private long mStartTimeMs = TIME_NOT_SET;
29     private String mTag = TAG;
30     private boolean mLogEngOnly;
31 
DurationTimer()32     public DurationTimer() {}
33 
DurationTimer(String tag, boolean logEngOnly)34     public DurationTimer(String tag, boolean logEngOnly) {
35         mTag = tag;
36         mLogEngOnly = logEngOnly;
37     }
38 
39     /** Returns true if the timer is running. */
isRunning()40     public boolean isRunning() {
41         return mStartTimeMs != TIME_NOT_SET;
42     }
43 
44     /** Start the timer. */
start()45     public void start() {
46         mStartTimeMs = SystemClock.elapsedRealtime();
47     }
48 
49     /** Returns true if timer is started. */
isStarted()50     public boolean isStarted() {
51         return mStartTimeMs != TIME_NOT_SET;
52     }
53 
54     /**
55      * Returns the current duration in milliseconds or {@link #TIME_NOT_SET} if the timer is not
56      * running.
57      */
getDuration()58     public long getDuration() {
59         return isRunning() ? SystemClock.elapsedRealtime() - mStartTimeMs : TIME_NOT_SET;
60     }
61 
62     /**
63      * Stops the timer and resets its value to {@link #TIME_NOT_SET}.
64      *
65      * @return the current duration in milliseconds or {@link #TIME_NOT_SET} if the timer is not
66      *     running.
67      */
reset()68     public long reset() {
69         long duration = getDuration();
70         mStartTimeMs = TIME_NOT_SET;
71         return duration;
72     }
73 
74     /** Adds information and duration time to the log. */
log(String message)75     public void log(String message) {
76         if (isRunning() && (!mLogEngOnly || BuildConfig.ENG)) {
77             Log.i(mTag, message + " : " + getDuration() + "ms");
78         }
79     }
80 }
81