Chromium Code Reviews| Index: base/time/time_posix.cc |
| diff --git a/base/time/time_posix.cc b/base/time/time_posix.cc |
| index 8b207eb36a9d54ca7f6c3420c42b5755ac100921..c09ad240553c42f91db70e5ddb6559b8e222d731 100644 |
| --- a/base/time/time_posix.cc |
| +++ b/base/time/time_posix.cc |
| @@ -87,20 +87,21 @@ void SysTimeToTimeStruct(SysTime t, struct tm* timestruct, bool is_local) { |
| #if (defined(OS_POSIX) && \ |
| defined(_POSIX_MONOTONIC_CLOCK) && _POSIX_MONOTONIC_CLOCK >= 0) || \ |
| defined(OS_BSD) || defined(OS_ANDROID) |
| -base::TimeTicks ClockNow(clockid_t clk_id) { |
| +int64 ClockNow(clockid_t clk_id) { |
| uint64_t absolute_micro; |
|
Lei Zhang
2015/05/13 23:31:47
Maybe just use CheckedNumeric<int64_t> and forget
miu
2015/05/19 03:14:32
Done.
|
| struct timespec ts; |
| if (clock_gettime(clk_id, &ts) != 0) { |
| NOTREACHED() << "clock_gettime(" << clk_id << ") failed."; |
| - return base::TimeTicks(); |
| + return 0; |
| } |
| absolute_micro = |
| (static_cast<int64>(ts.tv_sec) * base::Time::kMicrosecondsPerSecond) + |
| (static_cast<int64>(ts.tv_nsec / base::Time::kNanosecondsPerMicrosecond)); |
| - |
| - return base::TimeTicks::FromInternalValue(absolute_micro); |
| + DCHECK_LE(absolute_micro, |
| + static_cast<uint64_t>(std::numeric_limits<int64>::max())); |
| + return static_cast<int64>(absolute_micro); |
| } |
| #else // _POSIX_MONOTONIC_CLOCK |
| #error No usable tick clock function on this platform. |
| @@ -310,7 +311,7 @@ Time Time::FromExploded(bool is_local, const Exploded& exploded) { |
| // TimeTicks ------------------------------------------------------------------ |
| // static |
| TimeTicks TimeTicks::Now() { |
| - return ClockNow(CLOCK_MONOTONIC); |
| + return TimeTicks(ClockNow(CLOCK_MONOTONIC)); |
| } |
| // static |
| @@ -319,40 +320,41 @@ bool TimeTicks::IsHighResolution() { |
| } |
| // static |
| -TimeTicks TimeTicks::ThreadNow() { |
| +ThreadTicks ThreadTicks::Now() { |
| #if (defined(_POSIX_THREAD_CPUTIME) && (_POSIX_THREAD_CPUTIME >= 0)) || \ |
| defined(OS_ANDROID) |
| - return ClockNow(CLOCK_THREAD_CPUTIME_ID); |
| + return ThreadTicks(ClockNow(CLOCK_THREAD_CPUTIME_ID)); |
| #else |
| NOTREACHED(); |
| - return TimeTicks(); |
| + return ThreadTicks(); |
| #endif |
| } |
| // Use the Chrome OS specific system-wide clock. |
| #if defined(OS_CHROMEOS) |
| // static |
| -TimeTicks TimeTicks::NowFromSystemTraceTime() { |
| +TraceTicks TraceTicks::Now() { |
| uint64_t absolute_micro; |
|
Lei Zhang
2015/05/13 23:31:47
Also use CheckedNumeric<int64_t> here?
miu
2015/05/19 03:14:32
Done.
|
| struct timespec ts; |
| if (clock_gettime(kClockSystemTrace, &ts) != 0) { |
| // NB: fall-back for a chrome os build running on linux |
| - return Now(); |
| + return TraceTicks(ClockNow(CLOCK_MONOTONIC)); |
| } |
| absolute_micro = |
| (static_cast<int64>(ts.tv_sec) * Time::kMicrosecondsPerSecond) + |
|
Lei Zhang
2015/05/13 23:31:47
This is a repeat of line 100-101...
miu
2015/05/19 03:14:32
Done. Factored repeated code into a new ConvertTi
|
| (static_cast<int64>(ts.tv_nsec) / Time::kNanosecondsPerMicrosecond); |
| - |
| - return TimeTicks(absolute_micro); |
| + DCHECK_LE(absolute_micro, |
| + static_cast<uint64_t>(std::numeric_limits<int64>::max())); |
| + return TraceTicks(static_cast<int64>(absolute_micro)); |
| } |
| #else // !defined(OS_CHROMEOS) |
| // static |
| -TimeTicks TimeTicks::NowFromSystemTraceTime() { |
| - return Now(); |
| +TraceTicks TraceTicks::Now() { |
| + return TraceTicks(ClockNow(CLOCK_MONOTONIC)); |
| } |
| #endif // defined(OS_CHROMEOS) |