Home | History | Annotate | Download | only in util
      1 /**************************************************************************
      2  *
      3  * Copyright 2008 VMware, Inc.
      4  * All Rights Reserved.
      5  *
      6  * Permission is hereby granted, free of charge, to any person obtaining a
      7  * copy of this software and associated documentation files (the
      8  * "Software"), to deal in the Software without restriction, including
      9  * without limitation the rights to use, copy, modify, merge, publish,
     10  * distribute, sub license, and/or sell copies of the Software, and to
     11  * permit persons to whom the Software is furnished to do so, subject to
     12  * the following conditions:
     13  *
     14  * The above copyright notice and this permission notice (including the
     15  * next paragraph) shall be included in all copies or substantial portions
     16  * of the Software.
     17  *
     18  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     19  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     20  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
     21  * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
     22  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
     23  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     24  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     25  *
     26  **************************************************************************/
     27 
     28 /**
     29  * @file
     30  * OS independent time-manipulation functions.
     31  *
     32  * @author Jose Fonseca <jfonseca (at) vmware.com>
     33  */
     34 
     35 #ifndef U_TIME_H_
     36 #define U_TIME_H_
     37 
     38 
     39 #include "pipe/p_config.h"
     40 
     41 #include "os/os_time.h"
     42 
     43 #include "pipe/p_compiler.h"
     44 
     45 
     46 #ifdef	__cplusplus
     47 extern "C" {
     48 #endif
     49 
     50 
     51 /**
     52  * Time abstraction.
     53  *
     54  * Do not access this structure directly. Use the provided function instead.
     55  */
     56 struct util_time
     57 {
     58    int64_t counter;
     59 };
     60 
     61 
     62 PIPE_DEPRECATED
     63 static inline void
     64 util_time_get(struct util_time *t)
     65 {
     66    t->counter = os_time_get();
     67 }
     68 
     69 
     70 /**
     71  * Return t2 = t1 + usecs
     72  */
     73 PIPE_DEPRECATED
     74 static inline void
     75 util_time_add(const struct util_time *t1,
     76               int64_t usecs,
     77               struct util_time *t2)
     78 {
     79    t2->counter = t1->counter + usecs;
     80 }
     81 
     82 
     83 /**
     84  * Return difference between times, in microseconds
     85  */
     86 PIPE_DEPRECATED
     87 static inline int64_t
     88 util_time_diff(const struct util_time *t1,
     89                const struct util_time *t2)
     90 {
     91    return t2->counter - t1->counter;
     92 }
     93 
     94 
     95 /**
     96  * Compare two time values.
     97  *
     98  * Not publicly available because it does not take in account wrap-arounds.
     99  * Use util_time_timeout instead.
    100  */
    101 static inline int
    102 _util_time_compare(const struct util_time *t1,
    103                    const struct util_time *t2)
    104 {
    105    if (t1->counter < t2->counter)
    106       return -1;
    107    else if(t1->counter > t2->counter)
    108       return 1;
    109    else
    110       return 0;
    111 }
    112 
    113 
    114 /**
    115  * Returns non-zero when the timeout expires.
    116  */
    117 PIPE_DEPRECATED
    118 static inline boolean
    119 util_time_timeout(const struct util_time *start,
    120                   const struct util_time *end,
    121                   const struct util_time *curr)
    122 {
    123    return os_time_timeout(start->counter, end->counter, curr->counter);
    124 }
    125 
    126 
    127 /**
    128  * Return current time in microseconds
    129  */
    130 PIPE_DEPRECATED
    131 static inline int64_t
    132 util_time_micros(void)
    133 {
    134    return os_time_get();
    135 }
    136 
    137 
    138 PIPE_DEPRECATED
    139 static inline void
    140 util_time_sleep(int64_t usecs)
    141 {
    142    os_time_sleep(usecs);
    143 }
    144 
    145 
    146 #ifdef	__cplusplus
    147 }
    148 #endif
    149 
    150 #endif /* U_TIME_H_ */
    151