Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(61)

Side by Side Diff: webrtc/base/timeutils.cc

Issue 1779773002: Make rtc::TimestampWrapAroundHandler handle backwards wrapping (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Added unit test for "no negative start" Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | webrtc/base/timeutils_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 if (later <= earlier) { 186 if (later <= earlier) {
187 return -static_cast<long>(earlier - later); 187 return -static_cast<long>(earlier - later);
188 } else { 188 } else {
189 return -static_cast<long>(earlier + (UINT32_MAX - later) + 1); 189 return -static_cast<long>(earlier + (UINT32_MAX - later) + 1);
190 } 190 }
191 } 191 }
192 #endif 192 #endif
193 } 193 }
194 194
195 TimestampWrapAroundHandler::TimestampWrapAroundHandler() 195 TimestampWrapAroundHandler::TimestampWrapAroundHandler()
196 : last_ts_(0), num_wrap_(0) {} 196 : last_ts_(0), num_wrap_(-1) {}
197 197
198 int64_t TimestampWrapAroundHandler::Unwrap(uint32_t ts) { 198 int64_t TimestampWrapAroundHandler::Unwrap(uint32_t ts) {
199 if (num_wrap_ == -1) {
200 last_ts_ = ts;
201 num_wrap_ = 0;
202 return ts;
203 }
204
199 if (ts < last_ts_) { 205 if (ts < last_ts_) {
200 if (last_ts_ > 0xf0000000 && ts < 0x0fffffff) { 206 if (last_ts_ >= 0xf0000000 && ts < 0x0fffffff)
201 ++num_wrap_; 207 ++num_wrap_;
202 } 208 } else if ((ts - last_ts_) > 0xf0000000) {
209 // Backwards wrap. Unwrap with last wrap count and don't update last_ts_.
210 return ts + ((num_wrap_ - 1) << 32);
203 } 211 }
212
204 last_ts_ = ts; 213 last_ts_ = ts;
205 int64_t unwrapped_ts = ts + (num_wrap_ << 32); 214 return ts + (num_wrap_ << 32);
206 return unwrapped_ts;
207 } 215 }
208 216
209 int64_t TmToSeconds(const std::tm& tm) { 217 int64_t TmToSeconds(const std::tm& tm) {
210 static short int mdays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 218 static short int mdays[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
211 static short int cumul_mdays[12] = {0, 31, 59, 90, 120, 151, 219 static short int cumul_mdays[12] = {0, 31, 59, 90, 120, 151,
212 181, 212, 243, 273, 304, 334}; 220 181, 212, 243, 273, 304, 334};
213 int year = tm.tm_year + 1900; 221 int year = tm.tm_year + 1900;
214 int month = tm.tm_mon; 222 int month = tm.tm_mon;
215 int day = tm.tm_mday - 1; // Make 0-based like the rest. 223 int day = tm.tm_mday - 1; // Make 0-based like the rest.
216 int hour = tm.tm_hour; 224 int hour = tm.tm_hour;
(...skipping 27 matching lines...) Expand all
244 if (expiry_in_leap_year && month <= 2 - 1) // |month| is zero based. 252 if (expiry_in_leap_year && month <= 2 - 1) // |month| is zero based.
245 day -= 1; 253 day -= 1;
246 254
247 // Combine all variables into seconds from 1970-01-01 00:00 (except |month| 255 // Combine all variables into seconds from 1970-01-01 00:00 (except |month|
248 // which was accumulated into |day| above). 256 // which was accumulated into |day| above).
249 return (((static_cast<int64_t> 257 return (((static_cast<int64_t>
250 (year - 1970) * 365 + day) * 24 + hour) * 60 + min) * 60 + sec; 258 (year - 1970) * 365 + day) * 24 + hour) * 60 + min) * 60 + sec;
251 } 259 }
252 260
253 } // namespace rtc 261 } // namespace rtc
OLDNEW
« no previous file with comments | « no previous file | webrtc/base/timeutils_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698