]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Expose a function that computes stamp units from msec.
authorNick Mathewson <nickm@torproject.org>
Tue, 10 Apr 2018 14:47:11 +0000 (10:47 -0400)
committerNick Mathewson <nickm@torproject.org>
Fri, 13 Apr 2018 14:41:08 +0000 (10:41 -0400)
(It turns out we can't just expose STAMP_TICKS_PER_SECOND, since
Apple doesn't have that.)

src/common/compat_time.c
src/common/compat_time.h
src/test/test_util.c

index 183a60a4800d3d98e1155221f102760e943f1f01..b940447b67b5655250c9f020c709ab6c77529a59 100644 (file)
@@ -830,11 +830,24 @@ monotime_coarse_stamp_units_to_approx_msec(uint64_t units)
   return (abstime_diff * mach_time_info.numer) /
     (mach_time_info.denom * ONE_MILLION);
 }
+uint64_t
+monotime_msec_to_approx_coarse_stamp_units(uint64_t msec)
+{
+  uint64_t abstime_val =
+    (((uint64_t)msec) * ONE_MILLION * mach_time_info.denom) /
+    mach_time_info.numer;
+  return abstime_val >> monotime_shift;
+}
 #else
 uint64_t
 monotime_coarse_stamp_units_to_approx_msec(uint64_t units)
 {
   return (units * 1000) / STAMP_TICKS_PER_SECOND;
 }
+uint64_t
+monotime_msec_to_approx_coarse_stamp_units(uint64_t msec)
+{
+  return (msec * STAMP_TICKS_PER_SECOND) / 1000;
+}
 #endif
 
index 6ddd11883dd69f7e32192af66ef24a0fe184bc5c..75b57f6f24ab24cf2cf916e7b006b8664880b7c2 100644 (file)
@@ -150,6 +150,7 @@ uint32_t monotime_coarse_to_stamp(const monotime_coarse_t *t);
  * into an approximate number of milliseconds.
  */
 uint64_t monotime_coarse_stamp_units_to_approx_msec(uint64_t units);
+uint64_t monotime_msec_to_approx_coarse_stamp_units(uint64_t msec);
 uint32_t monotime_coarse_get_stamp(void);
 
 #if defined(MONOTIME_COARSE_TYPE_IS_DIFFERENT)
index ce8567d9af4a95df9524b398865bf339f34786d3..3dd2b51a3acdddc8b8b47049194c99d66cd059cb 100644 (file)
@@ -5907,6 +5907,13 @@ test_util_monotonic_time(void *arg)
   tt_u64_op(coarse_stamp_diff, OP_GE, 120);
   tt_u64_op(coarse_stamp_diff, OP_LE, 1200);
 
+  {
+    uint64_t units = monotime_msec_to_approx_coarse_stamp_units(5000);
+    uint64_t ms = monotime_coarse_stamp_units_to_approx_msec(units);
+    tt_int_op(ms, OP_GE, 4950);
+    tt_int_op(ms, OP_LT, 5050);
+  }
+
  done:
   ;
 }