]>
Commit | Line | Data |
---|---|---|
064af421 | 1 | /* |
e0edde6f | 2 | * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira, Inc. |
064af421 | 3 | * |
a14bc59f BP |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. | |
6 | * You may obtain a copy of the License at: | |
064af421 | 7 | * |
a14bc59f BP |
8 | * http://www.apache.org/licenses/LICENSE-2.0 |
9 | * | |
10 | * Unless required by applicable law or agreed to in writing, software | |
11 | * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | * See the License for the specific language governing permissions and | |
14 | * limitations under the License. | |
064af421 BP |
15 | */ |
16 | ||
17 | #ifndef TIMEVAL_H | |
18 | #define TIMEVAL_H 1 | |
19 | ||
20 | #include <time.h> | |
21 | #include "type-props.h" | |
22 | #include "util.h" | |
23 | ||
fbfffdbb BP |
24 | #ifdef __cplusplus |
25 | extern "C" { | |
26 | #endif | |
27 | ||
f43e80e0 | 28 | struct ds; |
064af421 | 29 | struct pollfd; |
c73814a3 | 30 | struct timespec; |
064af421 BP |
31 | struct timeval; |
32 | ||
33 | /* POSIX allows floating-point time_t, but we don't support it. */ | |
34 | BUILD_ASSERT_DECL(TYPE_IS_INTEGER(time_t)); | |
35 | ||
36 | /* We do try to cater to unsigned time_t, but I want to know about it if we | |
37 | * ever encounter such a platform. */ | |
38 | BUILD_ASSERT_DECL(TYPE_IS_SIGNED(time_t)); | |
39 | ||
40 | #define TIME_MAX TYPE_MAXIMUM(time_t) | |
41 | #define TIME_MIN TYPE_MINIMUM(time_t) | |
42 | ||
c73814a3 JG |
43 | /* Interval between updates to the reported time, in ms. This should not be |
44 | * adjusted much below 10 ms or so with the current implementation, or too | |
45 | * much time will be wasted in signal handlers and calls to clock_gettime(). */ | |
064af421 BP |
46 | #define TIME_UPDATE_INTERVAL 100 |
47 | ||
361906b1 EJ |
48 | /* True on systems (particularly x86-64 Linux) where clock_gettime() is |
49 | * inexpensive. On these systems, we don't bother caching the current time. | |
50 | * Instead, we consult clock_gettime() directly when needed. | |
51 | * | |
52 | * False on systems where clock_gettime() is relatively expensive. On these | |
53 | * systems, we cache the current time and set up a periodic SIGALRM to remind | |
54 | * us to update it. | |
55 | * | |
56 | * Also false on systems (e.g. ESX) that don't support setting up timers based | |
57 | * on a monotonically increasing clock. */ | |
3d7cab5f | 58 | #ifndef CACHE_TIME |
361906b1 EJ |
59 | #if defined ESX || (defined __x86_64__ && defined LINUX_DATAPATH) |
60 | #define CACHE_TIME 0 | |
61 | #else | |
62 | #define CACHE_TIME 1 | |
63 | #endif | |
3d7cab5f | 64 | #endif /* ifndef CACHE_TIME */ |
361906b1 | 65 | |
dc81071d BP |
66 | void time_disable_restart(void); |
67 | void time_enable_restart(void); | |
03fbffbd | 68 | void time_postfork(void); |
064af421 BP |
69 | void time_refresh(void); |
70 | time_t time_now(void); | |
c73814a3 | 71 | time_t time_wall(void); |
064af421 | 72 | long long int time_msec(void); |
c73814a3 JG |
73 | long long int time_wall_msec(void); |
74 | void time_timespec(struct timespec *); | |
75 | void time_wall_timespec(struct timespec *); | |
064af421 | 76 | void time_alarm(unsigned int secs); |
cee03df4 BP |
77 | int time_poll(struct pollfd *, int n_pollfds, long long int timeout_when, |
78 | int *elapsed); | |
a4575748 | 79 | bool time_cached(void); |
064af421 | 80 | |
c73814a3 | 81 | long long int timespec_to_msec(const struct timespec *); |
e7cfedd6 BP |
82 | long long int timeval_to_msec(const struct timeval *); |
83 | ||
279c9e03 BP |
84 | void xgettimeofday(struct timeval *); |
85 | ||
959ec62e | 86 | int get_cpu_usage(void); |
f43e80e0 | 87 | void format_backtraces(struct ds *, size_t min_count); |
959ec62e | 88 | |
4ae90ff9 BP |
89 | long long int time_boot_msec(void); |
90 | ||
fbfffdbb BP |
91 | #ifdef __cplusplus |
92 | } | |
93 | #endif | |
94 | ||
064af421 | 95 | #endif /* timeval.h */ |