Index: base/time/time.h |
diff --git a/base/time/time.h b/base/time/time.h |
index e0a6ea37eaa9f2c2035a8b04ad80b9d3d7818223..a02fbeb01ffb7e82761d524fd8c8bcacb9f618eb 100644 |
--- a/base/time/time.h |
+++ b/base/time/time.h |
@@ -264,9 +264,6 @@ |
explicit TimeDelta(int64 delta_us) : delta_(delta_us) { |
} |
- // Private method to build a delta from a double. |
- static TimeDelta FromDouble(double value); |
- |
// Delta in microseconds. |
int64 delta_; |
}; |
@@ -600,6 +597,7 @@ |
// static |
inline TimeDelta TimeDelta::FromDays(int days) { |
+ // Preserve max to prevent overflow. |
if (days == std::numeric_limits<int>::max()) |
return Max(); |
return TimeDelta(days * Time::kMicrosecondsPerDay); |
@@ -607,6 +605,7 @@ |
// static |
inline TimeDelta TimeDelta::FromHours(int hours) { |
+ // Preserve max to prevent overflow. |
if (hours == std::numeric_limits<int>::max()) |
return Max(); |
return TimeDelta(hours * Time::kMicrosecondsPerHour); |
@@ -614,6 +613,7 @@ |
// static |
inline TimeDelta TimeDelta::FromMinutes(int minutes) { |
+ // Preserve max to prevent overflow. |
if (minutes == std::numeric_limits<int>::max()) |
return Max(); |
return TimeDelta(minutes * Time::kMicrosecondsPerMinute); |
@@ -621,38 +621,42 @@ |
// static |
inline TimeDelta TimeDelta::FromSeconds(int64 secs) { |
- return TimeDelta(secs) * Time::kMicrosecondsPerSecond; |
+ // Preserve max to prevent overflow. |
+ if (secs == std::numeric_limits<int64>::max()) |
+ return Max(); |
+ return TimeDelta(secs * Time::kMicrosecondsPerSecond); |
} |
// static |
inline TimeDelta TimeDelta::FromMilliseconds(int64 ms) { |
- return TimeDelta(ms) * Time::kMicrosecondsPerMillisecond; |
+ // Preserve max to prevent overflow. |
+ if (ms == std::numeric_limits<int64>::max()) |
+ return Max(); |
+ return TimeDelta(ms * Time::kMicrosecondsPerMillisecond); |
} |
// static |
inline TimeDelta TimeDelta::FromSecondsD(double secs) { |
- return FromDouble(secs * Time::kMicrosecondsPerSecond); |
+ // Preserve max to prevent overflow. |
+ if (secs == std::numeric_limits<double>::infinity()) |
+ return Max(); |
+ return TimeDelta(static_cast<int64>(secs * Time::kMicrosecondsPerSecond)); |
} |
// static |
inline TimeDelta TimeDelta::FromMillisecondsD(double ms) { |
- return FromDouble(ms * Time::kMicrosecondsPerMillisecond); |
+ // Preserve max to prevent overflow. |
+ if (ms == std::numeric_limits<double>::infinity()) |
+ return Max(); |
+ return TimeDelta(static_cast<int64>(ms * Time::kMicrosecondsPerMillisecond)); |
} |
// static |
inline TimeDelta TimeDelta::FromMicroseconds(int64 us) { |
+ // Preserve max to prevent overflow. |
+ if (us == std::numeric_limits<int64>::max()) |
+ return Max(); |
return TimeDelta(us); |
-} |
- |
-// static |
-inline TimeDelta TimeDelta::FromDouble(double value) { |
- double max_magnitude = std::numeric_limits<int64>::max(); |
- TimeDelta delta = TimeDelta(static_cast<int64>(value)); |
- if (value > max_magnitude) |
- delta = Max(); |
- else if (value < -max_magnitude) |
- delta = -Max(); |
- return delta; |
} |
// For logging use only. |