summaryrefslogtreecommitdiff
path: root/deps/jemalloc/include/jemalloc/internal/ticker.h
blob: 4696e56d25735bac60f50c8cb63bc5bfdfb4d0d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/******************************************************************************/
#ifdef JEMALLOC_H_TYPES

typedef struct ticker_s ticker_t;

#endif /* JEMALLOC_H_TYPES */
/******************************************************************************/
#ifdef JEMALLOC_H_STRUCTS

struct ticker_s {
	int32_t	tick;
	int32_t	nticks;
};

#endif /* JEMALLOC_H_STRUCTS */
/******************************************************************************/
#ifdef JEMALLOC_H_EXTERNS

#endif /* JEMALLOC_H_EXTERNS */
/******************************************************************************/
#ifdef JEMALLOC_H_INLINES

#ifndef JEMALLOC_ENABLE_INLINE
void	ticker_init(ticker_t *ticker, int32_t nticks);
void	ticker_copy(ticker_t *ticker, const ticker_t *other);
int32_t	ticker_read(const ticker_t *ticker);
bool	ticker_ticks(ticker_t *ticker, int32_t nticks);
bool	ticker_tick(ticker_t *ticker);
#endif

#if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_TICKER_C_))
JEMALLOC_INLINE void
ticker_init(ticker_t *ticker, int32_t nticks)
{

	ticker->tick = nticks;
	ticker->nticks = nticks;
}

JEMALLOC_INLINE void
ticker_copy(ticker_t *ticker, const ticker_t *other)
{

	*ticker = *other;
}

JEMALLOC_INLINE int32_t
ticker_read(const ticker_t *ticker)
{

	return (ticker->tick);
}

JEMALLOC_INLINE bool
ticker_ticks(ticker_t *ticker, int32_t nticks)
{

	if (unlikely(ticker->tick < nticks)) {
		ticker->tick = ticker->nticks;
		return (true);
	}
	ticker->tick -= nticks;
	return(false);
}

JEMALLOC_INLINE bool
ticker_tick(ticker_t *ticker)
{

	return (ticker_ticks(ticker, 1));
}
#endif

#endif /* JEMALLOC_H_INLINES */
/******************************************************************************/