metrics: Creates |Pause| and |Resume| methods for timers.
BUG=chromium:244589
TEST=unittest
Change-Id: I54e6dd7f5a8eb08ff42b1ee0e60df5cc895d0819
Reviewed-on: https://gerrit.chromium.org/gerrit/56849
Reviewed-by: Darin Petkov <petkov@chromium.org>
Reviewed-by: Wade Guthrie <wdg@chromium.org>
Tested-by: Wade Guthrie <wdg@chromium.org>
Commit-Queue: Wade Guthrie <wdg@chromium.org>
diff --git a/metrics/timer.cc b/metrics/timer.cc
index 67b0fd1..c8e6176 100644
--- a/metrics/timer.cc
+++ b/metrics/timer.cc
@@ -18,38 +18,70 @@
}
Timer::Timer()
- : is_started_(false),
+ : timer_state_(kTimerStopped),
clock_wrapper_(new ClockWrapper()) {}
bool Timer::Start() {
+ elapsed_time_ = base::TimeDelta(); // Sets elapsed_time_ to zero.
start_time_ = clock_wrapper_->GetCurrentTime();
- is_started_ = true;
+ timer_state_ = kTimerRunning;
return true;
}
bool Timer::Stop() {
- // Check if the timer has been started.
- if (!is_started_) return false;
- is_started_ = false;
- elapsed_time_ = clock_wrapper_->GetCurrentTime() - start_time_;
+ if (timer_state_ == kTimerStopped)
+ return false;
+ if (timer_state_ == kTimerRunning)
+ elapsed_time_ += clock_wrapper_->GetCurrentTime() - start_time_;
+ timer_state_ = kTimerStopped;
return true;
}
+bool Timer::Pause() {
+ switch (timer_state_) {
+ case kTimerStopped:
+ if (!Start())
+ return false;
+ timer_state_ = kTimerPaused;
+ return true;
+ case kTimerRunning:
+ timer_state_ = kTimerPaused;
+ elapsed_time_ += clock_wrapper_->GetCurrentTime() - start_time_;
+ return true;
+ default:
+ return false;
+ }
+}
+
+bool Timer::Resume() {
+ switch (timer_state_) {
+ case kTimerStopped:
+ return Start();
+ case kTimerPaused:
+ start_time_ = clock_wrapper_->GetCurrentTime();
+ timer_state_ = kTimerRunning;
+ return true;
+ default:
+ return false;
+ }
+}
+
bool Timer::Reset() {
- is_started_ = false;
+ elapsed_time_ = base::TimeDelta(); // Sets elapsed_time_ to zero.
+ timer_state_ = kTimerStopped;
return true;
}
bool Timer::HasStarted() const {
- return is_started_;
+ return timer_state_ != kTimerStopped;
}
bool Timer::GetElapsedTime(base::TimeDelta* elapsed_time) const {
- if (start_time_.is_null() || !elapsed_time) return false;
- if (is_started_) {
- *elapsed_time = clock_wrapper_->GetCurrentTime() - start_time_;
- } else {
- *elapsed_time = elapsed_time_;
+ if (start_time_.is_null() || !elapsed_time)
+ return false;
+ *elapsed_time = elapsed_time_;
+ if (timer_state_ == kTimerRunning) {
+ *elapsed_time += clock_wrapper_->GetCurrentTime() - start_time_;
}
return true;
}