Skip to content

Commit

Permalink
refactor: Store time in Mono_Time in milliseconds.
Browse files Browse the repository at this point in the history
Conversion to seconds happens in `mono_time_get`, and a new function
`mono_time_get_ms` allows code to retrieve monotonic time in
milliseconds.
  • Loading branch information
iphydf committed Apr 7, 2022
1 parent cb34fe1 commit 7ae51ec
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 20 deletions.
2 changes: 1 addition & 1 deletion other/bootstrap_daemon/docker/tox-bootstrapd.sha256
Original file line number Diff line number Diff line change
@@ -1 +1 @@
7c43e683316530c0e9c46df4e670465b887f2a0c0774ee1dc67e4b0e1ca20a35 /usr/local/bin/tox-bootstrapd
d225df25926c10a1f27a58db147316cd45fc577d20d6e5a4da4274f3f716512b /usr/local/bin/tox-bootstrapd
29 changes: 15 additions & 14 deletions toxcore/mono_time.c
Original file line number Diff line number Diff line change
Expand Up @@ -165,7 +165,7 @@ Mono_Time *mono_time_new(mono_time_current_time_cb *current_time_callback, void
// Maximum reproducibility. Never return time = 0.
mono_time->base_time = 1;
#else
mono_time->base_time = (uint64_t)time(nullptr) - (current_time_monotonic(mono_time) / 1000ULL);
mono_time->base_time = (uint64_t)time(nullptr) * 1000ULL - current_time_monotonic(mono_time);
#endif

mono_time_update(mono_time);
Expand All @@ -190,14 +190,13 @@ void mono_time_free(Mono_Time *mono_time)

void mono_time_update(Mono_Time *mono_time)
{
uint64_t cur_time = 0;
#ifdef OS_WIN32
/* we actually want to update the overflow state of mono_time here */
pthread_mutex_lock(&mono_time->last_clock_lock);
mono_time->last_clock_update = true;
#endif
cur_time = mono_time->current_time_callback(mono_time->user_data) / 1000ULL;
cur_time += mono_time->base_time;
const uint64_t cur_time =
mono_time->base_time + mono_time->current_time_callback(mono_time->user_data);
#ifdef OS_WIN32
pthread_mutex_unlock(&mono_time->last_clock_lock);
#endif
Expand All @@ -211,21 +210,22 @@ void mono_time_update(Mono_Time *mono_time)
#endif
}

uint64_t mono_time_get(const Mono_Time *mono_time)
uint64_t mono_time_get_ms(const Mono_Time *mono_time)
{
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
#if !defined(ESP_PLATFORM) && !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
// Fuzzing is only single thread for now, no locking needed */
return mono_time->cur_time;
#else
#ifndef ESP_PLATFORM
pthread_rwlock_rdlock(mono_time->time_update_lock);
#endif
const uint64_t cur_time = mono_time->cur_time;
#ifndef ESP_PLATFORM
#if !defined(ESP_PLATFORM) && !defined(FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION)
pthread_rwlock_unlock(mono_time->time_update_lock);
#endif
return cur_time;
#endif
}

uint64_t mono_time_get(const Mono_Time *mono_time)
{
return mono_time_get_ms(mono_time) / 1000ULL;
}

bool mono_time_is_timeout(const Mono_Time *mono_time, uint64_t timestamp, uint64_t timeout)
Expand All @@ -245,9 +245,10 @@ void mono_time_set_current_time_callback(Mono_Time *mono_time,
}
}

/**
* Return current monotonic time in milliseconds (ms). The starting point is
* unspecified.
/** @brief Return current monotonic time in milliseconds (ms).
*
* The starting point is unspecified and in particular is likely not comparable
* to the return value of `mono_time_get_ms()`.
*/
uint64_t current_time_monotonic(Mono_Time *mono_time)
{
Expand Down
19 changes: 14 additions & 5 deletions toxcore/mono_time.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,16 @@ void mono_time_free(Mono_Time *mono_time);
non_null()
void mono_time_update(Mono_Time *mono_time);

/**
* Return unix time since epoch in seconds.
/** @brief Return current monotonic time in milliseconds (ms).
*
* The starting point is UNIX epoch as measured by `time()` in `mono_time_new()`.
*/
non_null()
uint64_t mono_time_get_ms(const Mono_Time *mono_time);

/** @brief Return a monotonically increasing time in seconds.
*
* The starting point is UNIX epoch as measured by `time()` in `mono_time_new()`.
*/
non_null()
uint64_t mono_time_get(const Mono_Time *mono_time);
Expand All @@ -72,9 +80,10 @@ uint64_t mono_time_get(const Mono_Time *mono_time);
non_null()
bool mono_time_is_timeout(const Mono_Time *mono_time, uint64_t timestamp, uint64_t timeout);

/**
* Return current monotonic time in milliseconds (ms). The starting point is
* unspecified.
/** @brief Return current monotonic time in milliseconds (ms).
*
* The starting point is unspecified and in particular is likely not comparable
* to the return value of `mono_time_get_ms()`.
*/
non_null()
uint64_t current_time_monotonic(Mono_Time *mono_time);
Expand Down

0 comments on commit 7ae51ec

Please sign in to comment.