1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2/* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6/*
7** File: prinrval.h
8** Description: API to interval timing functions of NSPR.
9**
10**
11** NSPR provides interval times that are independent of network time
12** of day values. Interval times are (in theory) accurate regardless
13** of host processing requirements and also very cheap to acquire. It
14** is expected that getting an interval time while in a synchronized
15** function (holding one's lock).
16**/
17
18#if !defined(prinrval_h)
19#define prinrval_h
20
21#include "prtypes.h"
22
23PR_BEGIN_EXTERN_C
24
25/**********************************************************************/
26/************************* TYPES AND CONSTANTS ************************/
27/**********************************************************************/
28
29typedef PRUint32 PRIntervalTime;
30
31/***********************************************************************
32** DEFINES: PR_INTERVAL_MIN
33** PR_INTERVAL_MAX
34** DESCRIPTION:
35** These two constants define the range (in ticks / second) of the
36** platform dependent type, PRIntervalTime. These constants bound both
37** the period and the resolution of a PRIntervalTime.
38***********************************************************************/
39#define PR_INTERVAL_MIN 1000UL
40#define PR_INTERVAL_MAX 100000UL
41
42/***********************************************************************
43** DEFINES: PR_INTERVAL_NO_WAIT
44** PR_INTERVAL_NO_TIMEOUT
45** DESCRIPTION:
46** Two reserved constants are defined in the PRIntervalTime namespace.
47** They are used to indicate that the process should wait no time (return
48** immediately) or wait forever (never time out), respectively.
49** Note: PR_INTERVAL_NO_TIMEOUT passed as input to PR_Connect is
50** interpreted as use the OS's connect timeout.
51**
52***********************************************************************/
53#define PR_INTERVAL_NO_WAIT 0UL
54#define PR_INTERVAL_NO_TIMEOUT 0xffffffffUL
55
56/**********************************************************************/
57/****************************** FUNCTIONS *****************************/
58/**********************************************************************/
59
60/***********************************************************************
61** FUNCTION: PR_IntervalNow
62** DESCRIPTION:
63** Return the value of NSPR's free running interval timer. That timer
64** can be used to establish epochs and determine intervals (be computing
65** the difference between two times).
66** INPUTS: void
67** OUTPUTS: void
68** RETURN: PRIntervalTime
69**
70** SIDE EFFECTS:
71** None
72** RESTRICTIONS:
73** The units of PRIntervalTime are platform dependent. They are chosen
74** such that they are appropriate for the host OS, yet provide sufficient
75** resolution and period to be useful to clients.
76** MEMORY: N/A
77** ALGORITHM: Platform dependent
78***********************************************************************/
79NSPR_API(PRIntervalTime) PR_IntervalNow(void);
80
81/***********************************************************************
82** FUNCTION: PR_TicksPerSecond
83** DESCRIPTION:
84** Return the number of ticks per second for PR_IntervalNow's clock.
85** The value will be in the range [PR_INTERVAL_MIN..PR_INTERVAL_MAX].
86** INPUTS: void
87** OUTPUTS: void
88** RETURN: PRUint32
89**
90** SIDE EFFECTS:
91** None
92** RESTRICTIONS:
93** None
94** MEMORY: N/A
95** ALGORITHM: N/A
96***********************************************************************/
97NSPR_API(PRUint32) PR_TicksPerSecond(void);
98
99/***********************************************************************
100** FUNCTION: PR_SecondsToInterval
101** PR_MillisecondsToInterval
102** PR_MicrosecondsToInterval
103** DESCRIPTION:
104** Convert standard clock units to platform dependent intervals.
105** INPUTS: PRUint32
106** OUTPUTS: void
107** RETURN: PRIntervalTime
108**
109** SIDE EFFECTS:
110** None
111** RESTRICTIONS:
112** Conversion may cause overflow, which is not reported.
113** MEMORY: N/A
114** ALGORITHM: N/A
115***********************************************************************/
116NSPR_API(PRIntervalTime) PR_SecondsToInterval(PRUint32 seconds);
117NSPR_API(PRIntervalTime) PR_MillisecondsToInterval(PRUint32 milli);
118NSPR_API(PRIntervalTime) PR_MicrosecondsToInterval(PRUint32 micro);
119
120/***********************************************************************
121** FUNCTION: PR_IntervalToSeconds
122** PR_IntervalToMilliseconds
123** PR_IntervalToMicroseconds
124** DESCRIPTION:
125** Convert platform dependent intervals to standard clock units.
126** INPUTS: PRIntervalTime
127** OUTPUTS: void
128** RETURN: PRUint32
129**
130** SIDE EFFECTS:
131** None
132** RESTRICTIONS:
133** Conversion may cause overflow, which is not reported.
134** MEMORY: N/A
135** ALGORITHM: N/A
136***********************************************************************/
137NSPR_API(PRUint32) PR_IntervalToSeconds(PRIntervalTime ticks);
138NSPR_API(PRUint32) PR_IntervalToMilliseconds(PRIntervalTime ticks);
139NSPR_API(PRUint32) PR_IntervalToMicroseconds(PRIntervalTime ticks);
140
141PR_END_EXTERN_C
142
143
144#endif /* !defined(prinrval_h) */
145
146/* prinrval.h */
147

source code of include/nspr/prinrval.h