1 | /* |
2 | * |
3 | * Copyright 2015 gRPC authors. |
4 | * |
5 | * Licensed under the Apache License, Version 2.0 (the "License"); |
6 | * you may not use this file except in compliance with the License. |
7 | * You may obtain a copy of the License at |
8 | * |
9 | * http://www.apache.org/licenses/LICENSE-2.0 |
10 | * |
11 | * Unless required by applicable law or agreed to in writing, software |
12 | * distributed under the License is distributed on an "AS IS" BASIS, |
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
14 | * See the License for the specific language governing permissions and |
15 | * limitations under the License. |
16 | * |
17 | */ |
18 | |
19 | #ifndef GRPC_SUPPORT_TIME_H |
20 | #define GRPC_SUPPORT_TIME_H |
21 | |
22 | #include <grpc/support/port_platform.h> |
23 | |
24 | #include <grpc/impl/codegen/gpr_types.h> |
25 | |
26 | #include <stddef.h> |
27 | #include <time.h> |
28 | |
29 | #ifdef __cplusplus |
30 | extern "C" { |
31 | #endif |
32 | |
33 | /** Time constants. */ |
34 | GPRAPI gpr_timespec |
35 | gpr_time_0(gpr_clock_type type); /** The zero time interval. */ |
36 | GPRAPI gpr_timespec gpr_inf_future(gpr_clock_type type); /** The far future */ |
37 | GPRAPI gpr_timespec gpr_inf_past(gpr_clock_type type); /** The far past. */ |
38 | |
39 | #define GPR_MS_PER_SEC 1000 |
40 | #define GPR_US_PER_SEC 1000000 |
41 | #define GPR_NS_PER_SEC 1000000000 |
42 | #define GPR_NS_PER_MS 1000000 |
43 | #define GPR_NS_PER_US 1000 |
44 | #define GPR_US_PER_MS 1000 |
45 | |
46 | /** initialize time subsystem */ |
47 | GPRAPI void gpr_time_init(void); |
48 | |
49 | /** Return the current time measured from the given clocks epoch. */ |
50 | GPRAPI gpr_timespec gpr_now(gpr_clock_type clock); |
51 | |
52 | /** Convert a timespec from one clock to another */ |
53 | GPRAPI gpr_timespec gpr_convert_clock_type(gpr_timespec t, |
54 | gpr_clock_type target_clock); |
55 | |
56 | /** Return -ve, 0, or +ve according to whether a < b, a == b, or a > b |
57 | respectively. */ |
58 | GPRAPI int gpr_time_cmp(gpr_timespec a, gpr_timespec b); |
59 | |
60 | GPRAPI gpr_timespec gpr_time_max(gpr_timespec a, gpr_timespec b); |
61 | GPRAPI gpr_timespec gpr_time_min(gpr_timespec a, gpr_timespec b); |
62 | |
63 | /** Add and subtract times. Calculations saturate at infinities. */ |
64 | GPRAPI gpr_timespec gpr_time_add(gpr_timespec a, gpr_timespec b); |
65 | GPRAPI gpr_timespec gpr_time_sub(gpr_timespec a, gpr_timespec b); |
66 | |
67 | /** Return a timespec representing a given number of time units. INT64_MIN is |
68 | interpreted as gpr_inf_past, and INT64_MAX as gpr_inf_future. */ |
69 | GPRAPI gpr_timespec gpr_time_from_micros(int64_t x, gpr_clock_type clock_type); |
70 | GPRAPI gpr_timespec gpr_time_from_nanos(int64_t x, gpr_clock_type clock_type); |
71 | GPRAPI gpr_timespec gpr_time_from_millis(int64_t x, gpr_clock_type clock_type); |
72 | GPRAPI gpr_timespec gpr_time_from_seconds(int64_t x, gpr_clock_type clock_type); |
73 | GPRAPI gpr_timespec gpr_time_from_minutes(int64_t x, gpr_clock_type clock_type); |
74 | GPRAPI gpr_timespec gpr_time_from_hours(int64_t x, gpr_clock_type clock_type); |
75 | |
76 | GPRAPI int32_t gpr_time_to_millis(gpr_timespec timespec); |
77 | |
78 | /** Return 1 if two times are equal or within threshold of each other, |
79 | 0 otherwise */ |
80 | GPRAPI int gpr_time_similar(gpr_timespec a, gpr_timespec b, |
81 | gpr_timespec threshold); |
82 | |
83 | /** Sleep until at least 'until' - an absolute timeout */ |
84 | GPRAPI void gpr_sleep_until(gpr_timespec until); |
85 | |
86 | GPRAPI double gpr_timespec_to_micros(gpr_timespec t); |
87 | |
88 | #ifdef __cplusplus |
89 | } |
90 | #endif |
91 | |
92 | #endif /* GRPC_SUPPORT_TIME_H */ |
93 | |