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

Unified Diff: content/common/inter_process_time_ticks_converter.cc

Issue 7602023: Use a monotonic clock (TimeTicks) to report network times to WebCore. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync & Merge Created 9 years 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 side-by-side diff with in-line comments
Download patch
Index: content/common/inter_process_time_ticks_converter.cc
diff --git a/content/common/inter_process_time_ticks_converter.cc b/content/common/inter_process_time_ticks_converter.cc
new file mode 100644
index 0000000000000000000000000000000000000000..09c14f0ec62585df5631076dfed515745bfefe92
--- /dev/null
+++ b/content/common/inter_process_time_ticks_converter.cc
@@ -0,0 +1,58 @@
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/common/inter_process_time_ticks_converter.h"
+
+#include "base/logging.h"
+
+namespace content {
+
+InterProcessTimeTicksConverter::InterProcessTimeTicksConverter(
+ const LocalTimeTicks& local_lower_bound,
+ const LocalTimeTicks& local_upper_bound,
+ const RemoteTimeTicks& remote_lower_bound,
+ const RemoteTimeTicks& remote_upper_bound)
+ : remote_lower_bound_(remote_lower_bound.value_),
+ remote_upper_bound_(remote_upper_bound.value_) {
+ int64 target_range = local_upper_bound.value_ - local_lower_bound.value_;
+ int64 source_range = remote_upper_bound.value_ - remote_lower_bound.value_;
+ if (source_range <= target_range) {
+ // We fit! Just shift the midpoints to match.
+ numerator_ = 1;
+ denominator_ = 1;
+ offset_ = ((local_upper_bound.value_ + local_lower_bound.value_) -
+ (remote_upper_bound.value_ + remote_lower_bound.value_)) / 2;
+ return;
+ }
+ // Set up scaling factors, and then deduce shift.
+ numerator_ = target_range;
+ denominator_ = source_range;
+ // Find out what we need to shift by to make this really work.
+ offset_ = local_lower_bound.value_ - Convert(remote_lower_bound.value_);
+ DCHECK_GE(local_upper_bound.value_, Convert(remote_upper_bound.value_));
+}
+
+LocalTimeTicks InterProcessTimeTicksConverter::ToLocalTimeTicks(
+ const RemoteTimeTicks& remote_ms) {
+ DCHECK_LE(remote_lower_bound_, remote_ms.value_);
+ DCHECK_GE(remote_upper_bound_, remote_ms.value_);
+ RemoteTimeDelta remote_delta = remote_ms - remote_lower_bound_;
+ return LocalTimeTicks(remote_lower_bound_ + offset_ +
+ ToLocalTimeDelta(remote_delta).value_);
+}
+
+LocalTimeDelta InterProcessTimeTicksConverter::ToLocalTimeDelta(
+ const RemoteTimeDelta& remote_delta) {
+ DCHECK_GE(remote_upper_bound_, remote_lower_bound_ + remote_delta.value_);
+ return LocalTimeDelta(Convert(remote_delta.value_));
+}
+
+int64 InterProcessTimeTicksConverter::Convert(int64 value) {
+ if (value <= 0) {
+ return value;
+ }
+ return numerator_ * value / denominator_;
+}
+
+} // namespace content
« no previous file with comments | « content/common/inter_process_time_ticks_converter.h ('k') | content/common/inter_process_time_ticks_converter_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698