1cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca/************************************************************************** 2cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * 3877128505431adaf817dc8069172ebe4a1cdf5d8José Fonseca * Copyright 2008 VMware, Inc. 4cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * All Rights Reserved. 5cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * 6cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 7cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * copy of this software and associated documentation files (the 8cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * "Software"), to deal in the Software without restriction, including 9cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * without limitation the rights to use, copy, modify, merge, publish, 10cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * distribute, sub license, and/or sell copies of the Software, and to 11cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * permit persons to whom the Software is furnished to do so, subject to 12cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * the following conditions: 13cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * 14cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * The above copyright notice and this permission notice (including the 15cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * next paragraph) shall be included in all copies or substantial portions 16cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * of the Software. 17cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * 18cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21877128505431adaf817dc8069172ebe4a1cdf5d8José Fonseca * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * 26cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca **************************************************************************/ 27cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca 28cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca/** 29cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * @file 30cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * OS independent time-manipulation functions. 31cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * 32877128505431adaf817dc8069172ebe4a1cdf5d8José Fonseca * @author Jose Fonseca <jfonseca@vmware.com> 33cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca */ 34cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca 35cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca#ifndef U_TIME_H_ 36cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca#define U_TIME_H_ 37cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca 38cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca 39b06cd4debfc4fb4162b4b45e61ea91948de0a279José Fonseca#include "pipe/p_config.h" 40b06cd4debfc4fb4162b4b45e61ea91948de0a279José Fonseca 415ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca#include "os/os_time.h" 42c6c44bf48124dd5b4661014a8d58482c5a54557faljen 43cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca#include "pipe/p_compiler.h" 44cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca 45cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca 46cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca#ifdef __cplusplus 47cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonsecaextern "C" { 48cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca#endif 49cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca 50cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca 51cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca/** 52cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * Time abstraction. 53cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * 54cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca * Do not access this structure directly. Use the provided function instead. 55cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca */ 56cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonsecastruct util_time 57cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca{ 5855d29a8d48663982a1aeea414f69a5896b97d1eaJosé Fonseca int64_t counter; 59cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca}; 60cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca 61cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca 625ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José FonsecaPIPE_DEPRECATED 63a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void 645ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonsecautil_time_get(struct util_time *t) 655ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca{ 665ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca t->counter = os_time_get(); 675ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca} 685ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca 69cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca 705460da543608805a3debbb401ccc19442e1cb476Brian Paul/** 715460da543608805a3debbb401ccc19442e1cb476Brian Paul * Return t2 = t1 + usecs 725460da543608805a3debbb401ccc19442e1cb476Brian Paul */ 735ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José FonsecaPIPE_DEPRECATED 74a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void 75cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonsecautil_time_add(const struct util_time *t1, 76cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca int64_t usecs, 775ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca struct util_time *t2) 785ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca{ 795ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca t2->counter = t1->counter + usecs; 805ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca} 81cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca 82c118c654fa238f983f1550149466727fa81e51abKeith Whitwell 835460da543608805a3debbb401ccc19442e1cb476Brian Paul/** 845460da543608805a3debbb401ccc19442e1cb476Brian Paul * Return difference between times, in microseconds 855460da543608805a3debbb401ccc19442e1cb476Brian Paul */ 865ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José FonsecaPIPE_DEPRECATED 87a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline int64_t 88cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonsecautil_time_diff(const struct util_time *t1, 895ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca const struct util_time *t2) 905ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca{ 915ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca return t2->counter - t1->counter; 925ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca} 935ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca 94cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca 95cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca/** 965ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca * Compare two time values. 975ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca * 985ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca * Not publicly available because it does not take in account wrap-arounds. 995ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca * Use util_time_timeout instead. 100cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca */ 101a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline int 1025ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca_util_time_compare(const struct util_time *t1, 1035ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca const struct util_time *t2) 1045ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca{ 1055ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca if (t1->counter < t2->counter) 1065ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca return -1; 1075ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca else if(t1->counter > t2->counter) 1085ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca return 1; 1095ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca else 1105ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca return 0; 1115ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca} 1125ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca 1135ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca 114cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca/** 115d005befcb9e191ae90619fbdd3c37e262ae3b03eJosé Fonseca * Returns non-zero when the timeout expires. 116cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca */ 1175ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José FonsecaPIPE_DEPRECATED 118a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline boolean 119cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonsecautil_time_timeout(const struct util_time *start, 120cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca const struct util_time *end, 1215ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca const struct util_time *curr) 1225ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca{ 1235ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca return os_time_timeout(start->counter, end->counter, curr->counter); 1245ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca} 125cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca 1265ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca 127a1af8eec66c5f7ec421e8011b41c1a7c36319f9fJosé Fonseca/** 128a1af8eec66c5f7ec421e8011b41c1a7c36319f9fJosé Fonseca * Return current time in microseconds 129a1af8eec66c5f7ec421e8011b41c1a7c36319f9fJosé Fonseca */ 1305ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José FonsecaPIPE_DEPRECATED 131a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline int64_t 1325ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonsecautil_time_micros(void) 1335ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca{ 1345ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca return os_time_get(); 1355ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca} 1365ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca 1375ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca 1385ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José FonsecaPIPE_DEPRECATED 139a2a1a5805fd617e7f3cc8be44dd79b50da07ebb9Ilia Mirkinstatic inline void 1405ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonsecautil_time_sleep(int64_t usecs) 1415ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca{ 1425ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca os_time_sleep(usecs); 1435ee324ad3cfe62de661a1a6a7a60b2eec5738ef1José Fonseca} 144cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca 145cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca 146cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca#ifdef __cplusplus 147cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca} 148cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca#endif 149cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca 150cd5931240688cb8bd12834e3ba23f858f26dbf8cJosé Fonseca#endif /* U_TIME_H_ */ 151