| // Copyright (c) 2013 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef POWER_MANAGER_COMMON_CLOCK_H_ |
| #define POWER_MANAGER_COMMON_CLOCK_H_ |
| |
| #include <base/macros.h> |
| #include <base/time/time.h> |
| |
| namespace power_manager { |
| |
| // Simple class that allows tests to control the time. |
| // |
| // Classes should create a Clock member, provide a getter method that |
| // returns a pointer to it or some other means to call the |
| // set_current_*time_for_testing() setters, and then call GetCurrentTime() |
| // instead of base::TimeTicks::Now() and GetCurrentWallTime() instead of |
| // base::Time::Now(). |
| // |
| // TODO(chromeos-power): Consider replacing this class with base::Clock and |
| // base::TickClock. |
| class Clock { |
| public: |
| Clock(); |
| Clock(const Clock&) = delete; |
| Clock& operator=(const Clock&) = delete; |
| |
| ~Clock(); |
| |
| void set_current_time_for_testing(base::TimeTicks now) { |
| current_time_for_testing_ = now; |
| } |
| void set_current_boot_time_for_testing(base::TimeTicks now) { |
| current_boot_time_for_testing_ = now; |
| } |
| void set_current_wall_time_for_testing(base::Time now) { |
| current_wall_time_for_testing_ = now; |
| } |
| void advance_current_boot_time_for_testing(base::TimeDelta delta) { |
| current_boot_time_for_testing_ += delta; |
| } |
| void set_time_step_for_testing(base::TimeDelta step) { |
| time_step_for_testing_ = step; |
| } |
| |
| // Returns the last-set monotonically-increasing time, or the actual time |
| // (i.e. CLOCK_MONOTONIC) if |current_time_for_testing_| is unset. Time does |
| // not advance while the system is suspended. |
| base::TimeTicks GetCurrentTime(); |
| |
| // Similar to GetCurrentTime(), except time also advances while the system is |
| // suspended (i.e. CLOCK_BOOTTIME). |
| base::TimeTicks GetCurrentBootTime(); |
| |
| // Returns the last-set wall time, or the actual time (i.e. gettimeofday()) if |
| // |current_wall_time_for_testing_| is unset. |
| base::Time GetCurrentWallTime(); |
| |
| private: |
| base::TimeTicks current_time_for_testing_; |
| base::TimeTicks current_boot_time_for_testing_; |
| base::Time current_wall_time_for_testing_; |
| |
| // Amount of time that |current_*time_for_testing_| should be advanced by each |
| // successive call to GetCurrent*Time(). |
| base::TimeDelta time_step_for_testing_; |
| }; |
| |
| } // namespace power_manager |
| |
| #endif // POWER_MANAGER_COMMON_CLOCK_H_ |