13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/************************************************************************** 23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. 43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * All Rights Reserved. 53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a 73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * copy of this software and associated documentation files (the 83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * "Software"), to deal in the Software without restriction, including 93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * without limitation the rights to use, copy, modify, merge, publish, 103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * distribute, sub license, and/or sell copies of the Software, and to 113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * permit persons to whom the Software is furnished to do so, subject to 123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * the following conditions: 133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * The above copyright notice and this permission notice (including the 153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * next paragraph) shall be included in all copies or substantial portions 163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * of the Software. 173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org **************************************************************************/ 273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * @file 303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * OS independent time-manipulation functions. 313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * @author Jose Fonseca <jrfonseca@tungstengraphics.com> 333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#ifndef U_TIME_H_ 363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define U_TIME_H_ 373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "pipe/p_config.h" 403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 41760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org#include "os/os_time.h" 423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "pipe/p_compiler.h" 443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#ifdef __cplusplus 473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgextern "C" { 483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif 493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Time abstraction. 533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * 543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Do not access this structure directly. Use the provided function instead. 553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgstruct util_time 573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{ 583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int64_t counter; 593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}; 603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 62760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgPIPE_DEPRECATED 63760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic INLINE void 64760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgutil_time_get(struct util_time *t) 65760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 66760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org t->counter = os_time_get(); 67760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 68760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 70760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org/** 71760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * Return t2 = t1 + usecs 72760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org */ 73760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgPIPE_DEPRECATED 74760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic INLINE void 753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgutil_time_add(const struct util_time *t1, 763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org int64_t usecs, 77760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org struct util_time *t2) 78760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 79760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org t2->counter = t1->counter + usecs; 80760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 83760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org/** 84760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * Return difference between times, in microseconds 85760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org */ 86760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgPIPE_DEPRECATED 87760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic INLINE int64_t 883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgutil_time_diff(const struct util_time *t1, 89760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org const struct util_time *t2) 90760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 91760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org return t2->counter - t1->counter; 92760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 93760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 94760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 95760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org/** 96760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * Compare two time values. 97760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * 98760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * Not publicly available because it does not take in account wrap-arounds. 99760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * Use util_time_timeout instead. 100760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org */ 101760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic INLINE int 102760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org_util_time_compare(const struct util_time *t1, 103760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org const struct util_time *t2) 104760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 105760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org if (t1->counter < t2->counter) 106760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org return -1; 107760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org else if(t1->counter > t2->counter) 108760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org return 1; 109760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org else 110760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org return 0; 111760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 112760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 1133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/** 1153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Returns non-zero when the timeout expires. 1163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */ 117760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgPIPE_DEPRECATED 118760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic INLINE boolean 1193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgutil_time_timeout(const struct util_time *start, 1203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org const struct util_time *end, 121760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org const struct util_time *curr) 122760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 123760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org return os_time_timeout(start->counter, end->counter, curr->counter); 124760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 1253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 126760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 127760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org/** 128760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org * Return current time in microseconds 129760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org */ 130760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgPIPE_DEPRECATED 131760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic INLINE int64_t 132760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgutil_time_micros(void) 133760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 134760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org return os_time_get(); 135760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 136760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 137760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org 138760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgPIPE_DEPRECATED 139760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgstatic INLINE void 140760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.orgutil_time_sleep(int64_t usecs) 141760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org{ 142760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org os_time_sleep(usecs); 143760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org} 1443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#ifdef __cplusplus 1473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org} 1483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif 1493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org 1503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#endif /* U_TIME_H_ */ 151