| 1 | /* |
| 2 | * Copyright (c) Meta Platforms, Inc. and affiliates. |
| 3 | * All rights reserved. |
| 4 | * |
| 5 | * This source code is licensed under both the BSD-style license (found in the |
| 6 | * LICENSE file in the root directory of this source tree) and the GPLv2 (found |
| 7 | * in the COPYING file in the root directory of this source tree). |
| 8 | * You may select, at your option, one of the above-listed licenses. |
| 9 | */ |
| 10 | |
| 11 | #ifndef TIME_FN_H_MODULE_287987 |
| 12 | #define TIME_FN_H_MODULE_287987 |
| 13 | |
| 14 | #if defined (__cplusplus) |
| 15 | extern "C" { |
| 16 | #endif |
| 17 | |
| 18 | |
| 19 | |
| 20 | /*-**************************************** |
| 21 | * Types |
| 22 | ******************************************/ |
| 23 | |
| 24 | #if !defined (__VMS) && (defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) ) |
| 25 | # if defined(_AIX) |
| 26 | # include <inttypes.h> |
| 27 | # else |
| 28 | # include <stdint.h> /* uint64_t */ |
| 29 | # endif |
| 30 | typedef uint64_t PTime; /* Precise Time */ |
| 31 | #else |
| 32 | typedef unsigned long long PTime; /* does not support compilers without long long support */ |
| 33 | #endif |
| 34 | |
| 35 | /* UTIL_time_t contains a nanosecond time counter. |
| 36 | * The absolute value is not meaningful. |
| 37 | * It's only valid to compute the difference between 2 measurements. */ |
| 38 | typedef struct { PTime t; } UTIL_time_t; |
| 39 | #define UTIL_TIME_INITIALIZER { 0 } |
| 40 | |
| 41 | |
| 42 | /*-**************************************** |
| 43 | * Time functions |
| 44 | ******************************************/ |
| 45 | |
| 46 | UTIL_time_t UTIL_getTime(void); |
| 47 | |
| 48 | /* Timer resolution can be low on some platforms. |
| 49 | * To improve accuracy, it's recommended to wait for a new tick |
| 50 | * before starting benchmark measurements */ |
| 51 | void UTIL_waitForNextTick(void); |
| 52 | /* tells if timefn will return correct time measurements |
| 53 | * in presence of multi-threaded workload. |
| 54 | * note : this is not the case if only C90 clock_t measurements are available */ |
| 55 | int UTIL_support_MT_measurements(void); |
| 56 | |
| 57 | PTime UTIL_getSpanTimeNano(UTIL_time_t clockStart, UTIL_time_t clockEnd); |
| 58 | PTime UTIL_clockSpanNano(UTIL_time_t clockStart); |
| 59 | |
| 60 | PTime UTIL_getSpanTimeMicro(UTIL_time_t clockStart, UTIL_time_t clockEnd); |
| 61 | PTime UTIL_clockSpanMicro(UTIL_time_t clockStart); |
| 62 | |
| 63 | #define SEC_TO_MICRO ((PTime)1000000) /* nb of microseconds in a second */ |
| 64 | |
| 65 | |
| 66 | #if defined (__cplusplus) |
| 67 | } |
| 68 | #endif |
| 69 | |
| 70 | #endif /* TIME_FN_H_MODULE_287987 */ |