Tor  0.4.7.0-alpha-dev
Data Structures | Macros | Functions
compat_time.h File Reference

Functions and types for monotonic times. More...

#include "orconfig.h"
#include "lib/cc/torint.h"
#include "lib/wallclock/tor_gettimeofday.h"

Go to the source code of this file.

Data Structures

struct  timeval
 
struct  monotime_t
 

Macros

#define MONOTIME_USING_GETTIMEOFDAY
 
#define monotime_coarse_t   monotime_t
 
#define monotime_coarse_get   monotime_get
 
#define monotime_coarse_absolute_nsec   monotime_absolute_nsec
 
#define monotime_coarse_absolute_usec   monotime_absolute_usec
 
#define monotime_coarse_absolute_msec   monotime_absolute_msec
 
#define monotime_coarse_diff_nsec   monotime_diff_nsec
 
#define monotime_coarse_diff_usec   monotime_diff_usec
 
#define monotime_coarse_diff_msec   monotime_diff_msec
 
#define monotime_coarse_zero   monotime_zero
 
#define monotime_coarse_is_zero   monotime_is_zero
 
#define monotime_coarse_add_msec   monotime_add_msec
 
#define USING_32BIT_MSEC_HACK
 

Functions

void monotime_init (void)
 
void monotime_get (monotime_t *out)
 
int64_t monotime_diff_nsec (const monotime_t *start, const monotime_t *end)
 
int64_t monotime_diff_usec (const monotime_t *start, const monotime_t *end)
 
int64_t monotime_diff_msec (const monotime_t *start, const monotime_t *end)
 
uint64_t monotime_absolute_nsec (void)
 
uint64_t monotime_absolute_usec (void)
 
uint64_t monotime_absolute_msec (void)
 
void monotime_zero (monotime_t *out)
 
int monotime_is_zero (const monotime_t *out)
 
void monotime_add_msec (monotime_t *out, const monotime_t *val, uint32_t msec)
 
uint32_t monotime_coarse_to_stamp (const monotime_coarse_t *t)
 
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)
 
int32_t monotime_coarse_diff_msec32_ (const monotime_coarse_t *start, const monotime_coarse_t *end)
 
static int32_t monotime_coarse_diff_msec32 (const monotime_coarse_t *start, const monotime_coarse_t *end)
 

Detailed Description

Functions and types for monotonic times.

monotime_* functions try to provide a high-resolution monotonic timer with something the best resolution the system provides. monotime_coarse_* functions run faster (if the operating system gives us a way to do that) but produce a less accurate timer: accuracy will probably be on the order of tens of milliseconds.

Definition in file compat_time.h.

Function Documentation

◆ monotime_absolute_msec()

uint64_t monotime_absolute_msec ( void  )

Return the number of milliseconds since the timer system was initialized. The returned value may be equal to zero. Fractional units are truncated, not rounded.

Definition at line 807 of file compat_time.c.

◆ monotime_absolute_nsec()

uint64_t monotime_absolute_nsec ( void  )

Return the number of nanoseconds since the timer system was initialized. The returned value may be equal to zero.

Definition at line 789 of file compat_time.c.

Referenced by monotime_absolute_msec(), and monotime_absolute_usec().

◆ monotime_absolute_usec()

uint64_t monotime_absolute_usec ( void  )

Return the number of microseconds since the timer system was initialized. The returned value may be equal to zero. Fractional units are truncated, not rounded.

Definition at line 801 of file compat_time.c.

Referenced by circpad_estimate_circ_rtt_on_send(), and circpad_machine_remove_token().

◆ monotime_add_msec()

void monotime_add_msec ( monotime_t out,
const monotime_t val,
uint32_t  msec 
)

Set out to N milliseconds after val.

◆ monotime_coarse_diff_msec32()

static int32_t monotime_coarse_diff_msec32 ( const monotime_coarse_t *  start,
const monotime_coarse_t *  end 
)
inlinestatic

As monotime_coarse_diff_msec, but avoid 64-bit division if it is expensive.

Requires that the difference fit into an int32_t; not for use with large time differences.

The returned value may be equal to zero. Fractional units are truncated, not rounded.

Definition at line 338 of file compat_time.h.

◆ monotime_coarse_diff_msec32_()

int32_t monotime_coarse_diff_msec32_ ( const monotime_coarse_t *  start,
const monotime_coarse_t *  end 
)

As monotime_coarse_diff_msec, but avoid 64-bit division.

Requires that the difference fit into an int32_t; not for use with large time differences.

The returned value may be equal to zero. Fractional units are truncated, not rounded.

◆ monotime_coarse_get_stamp()

uint32_t monotime_coarse_get_stamp ( void  )

Return the current time "stamp" as described by monotime_coarse_to_stamp.

Definition at line 844 of file compat_time.c.

Referenced by cell_queue_append_packed_copy(), connection_bucket_init(), connection_handle_read_impl(), and connection_or_update_token_buckets_helper().

◆ monotime_coarse_stamp_units_to_approx_msec()

uint64_t monotime_coarse_stamp_units_to_approx_msec ( uint64_t  units)

Convert a difference, expressed in the units of monotime_coarse_to_stamp, into an approximate number of milliseconds.

The returned value may be equal to zero. Fractional units are truncated, not rounded.

Definition at line 870 of file compat_time.c.

Referenced by rate_per_sec_to_rate_per_step().

◆ monotime_coarse_to_stamp()

uint32_t monotime_coarse_to_stamp ( const monotime_coarse_t *  t)

Return a "timestamp" approximation for a coarse monotonic timer. This timestamp is meant to be fast to calculate and easy to compare, and have a unit of something roughly around 1 msec.

It will wrap over from time to time.

It has no defined zero point.

◆ monotime_diff_msec()

int64_t monotime_diff_msec ( const monotime_t start,
const monotime_t end 
)

Return the number of milliseconds between start and end. The returned value may be equal to zero. Fractional units are truncated, not rounded.

Definition at line 781 of file compat_time.c.

◆ monotime_diff_nsec()

int64_t monotime_diff_nsec ( const monotime_t start,
const monotime_t end 
)

Return the number of nanoseconds between start and end. The returned value may be equal to zero.

Referenced by monotime_diff_msec(), and monotime_diff_usec().

◆ monotime_diff_usec()

int64_t monotime_diff_usec ( const monotime_t start,
const monotime_t end 
)

Return the number of microseconds between start and end. The returned value may be equal to zero. Fractional units are truncated, not rounded.

Definition at line 773 of file compat_time.c.

◆ monotime_get()

void monotime_get ( monotime_t out)

Set out to the current time.

Referenced by libevent_timer_reschedule(), monotime_init(), and timers_run_pending().

◆ monotime_init()

void monotime_init ( void  )

Initialize the timing subsystem. This function is idempotent.

Initialize the monotonic timer subsystem. Must be called before any monotonic timer functions. This function is idempotent.

Definition at line 747 of file compat_time.c.

◆ monotime_is_zero()

int monotime_is_zero ( const monotime_t out)

Return true iff out is zero

◆ monotime_zero()

void monotime_zero ( monotime_t out)

Set out to zero.

Definition at line 760 of file compat_time.c.