Chromium Code Reviews| Index: Source/core/html/TimeRanges.cpp |
| diff --git a/Source/core/html/TimeRanges.cpp b/Source/core/html/TimeRanges.cpp |
| index 943eb93468f6899f8510f24fee18dce0a1abbc79..72e1ee9c7052b75849b676c2a19d59b9e23a7368 100644 |
| --- a/Source/core/html/TimeRanges.cpp |
| +++ b/Source/core/html/TimeRanges.cpp |
| @@ -182,21 +182,32 @@ bool TimeRanges::contain(double time) const |
| return false; |
| } |
| -double TimeRanges::nearest(double time) const |
| +double TimeRanges::nearest(double time, double now) const |
|
acolwell GONE FROM CHROMIUM
2014/09/11 22:24:39
ditto.
DaleCurtis
2014/09/11 22:40:01
Done.
|
| { |
| - double closest = 0; |
| unsigned count = length(); |
| + double bestMatch = 0; |
| + double bestDelta = std::numeric_limits<double>::infinity(); |
| for (unsigned ndx = 0; ndx < count; ndx++) { |
| double startTime = start(ndx, IGNORE_EXCEPTION); |
| double endTime = end(ndx, IGNORE_EXCEPTION); |
| if (time >= startTime && time <= endTime) |
| return time; |
| - if (fabs(startTime - time) < closest) |
| - closest = fabs(startTime - time); |
| - else if (fabs(endTime - time) < closest) |
| - closest = fabs(endTime - time); |
| + |
| + double delta, match; |
| + if (time < startTime) { |
| + delta = startTime - time; |
| + match = startTime; |
| + } else { |
| + delta = time - endTime; |
| + match = endTime; |
| + } |
| + |
| + if (delta < bestDelta || (delta == bestDelta && std::abs(now - match) < std::abs(now - bestMatch))) { |
| + bestDelta = delta; |
| + bestMatch = match; |
| + } |
| } |
| - return closest; |
| + return bestMatch; |
| } |
| void TimeRanges::trace(Visitor* visitor) |