2017-01-11 10:06:31 +08:00
|
|
|
#ifndef JEMALLOC_INTERNAL_ARENA_INLINES_A_H
|
|
|
|
#define JEMALLOC_INTERNAL_ARENA_INLINES_A_H
|
|
|
|
|
|
|
|
#ifndef JEMALLOC_ENABLE_INLINE
|
|
|
|
unsigned arena_ind_get(const arena_t *arena);
|
|
|
|
void arena_internal_add(arena_t *arena, size_t size);
|
|
|
|
void arena_internal_sub(arena_t *arena, size_t size);
|
|
|
|
size_t arena_internal_get(arena_t *arena);
|
|
|
|
bool arena_prof_accum_impl(arena_t *arena, uint64_t accumbytes);
|
|
|
|
bool arena_prof_accum_locked(arena_t *arena, uint64_t accumbytes);
|
|
|
|
bool arena_prof_accum(tsdn_t *tsdn, arena_t *arena, uint64_t accumbytes);
|
|
|
|
#endif /* JEMALLOC_ENABLE_INLINE */
|
|
|
|
|
|
|
|
#if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_ARENA_C_))
|
|
|
|
|
|
|
|
JEMALLOC_INLINE unsigned
|
2017-01-16 08:56:30 +08:00
|
|
|
arena_ind_get(const arena_t *arena) {
|
2017-01-11 10:06:31 +08:00
|
|
|
return (base_ind_get(arena->base));
|
|
|
|
}
|
|
|
|
|
|
|
|
JEMALLOC_INLINE void
|
2017-01-16 08:56:30 +08:00
|
|
|
arena_internal_add(arena_t *arena, size_t size) {
|
2017-01-11 10:06:31 +08:00
|
|
|
atomic_add_zu(&arena->stats.internal, size);
|
|
|
|
}
|
|
|
|
|
|
|
|
JEMALLOC_INLINE void
|
2017-01-16 08:56:30 +08:00
|
|
|
arena_internal_sub(arena_t *arena, size_t size) {
|
2017-01-11 10:06:31 +08:00
|
|
|
atomic_sub_zu(&arena->stats.internal, size);
|
|
|
|
}
|
|
|
|
|
|
|
|
JEMALLOC_INLINE size_t
|
2017-01-16 08:56:30 +08:00
|
|
|
arena_internal_get(arena_t *arena) {
|
2017-01-11 10:06:31 +08:00
|
|
|
return (atomic_read_zu(&arena->stats.internal));
|
|
|
|
}
|
|
|
|
|
|
|
|
JEMALLOC_INLINE bool
|
2017-01-16 08:56:30 +08:00
|
|
|
arena_prof_accum_impl(arena_t *arena, uint64_t accumbytes) {
|
2017-01-11 10:06:31 +08:00
|
|
|
cassert(config_prof);
|
|
|
|
assert(prof_interval != 0);
|
|
|
|
|
|
|
|
arena->prof_accumbytes += accumbytes;
|
|
|
|
if (arena->prof_accumbytes >= prof_interval) {
|
|
|
|
arena->prof_accumbytes %= prof_interval;
|
|
|
|
return (true);
|
|
|
|
}
|
|
|
|
return (false);
|
|
|
|
}
|
|
|
|
|
|
|
|
JEMALLOC_INLINE bool
|
2017-01-16 08:56:30 +08:00
|
|
|
arena_prof_accum_locked(arena_t *arena, uint64_t accumbytes) {
|
2017-01-11 10:06:31 +08:00
|
|
|
cassert(config_prof);
|
|
|
|
|
2017-01-16 08:56:30 +08:00
|
|
|
if (likely(prof_interval == 0)) {
|
2017-01-11 10:06:31 +08:00
|
|
|
return (false);
|
2017-01-16 08:56:30 +08:00
|
|
|
}
|
2017-01-11 10:06:31 +08:00
|
|
|
return (arena_prof_accum_impl(arena, accumbytes));
|
|
|
|
}
|
|
|
|
|
|
|
|
JEMALLOC_INLINE bool
|
2017-01-16 08:56:30 +08:00
|
|
|
arena_prof_accum(tsdn_t *tsdn, arena_t *arena, uint64_t accumbytes) {
|
2017-01-11 10:06:31 +08:00
|
|
|
cassert(config_prof);
|
|
|
|
|
2017-01-16 08:56:30 +08:00
|
|
|
if (likely(prof_interval == 0)) {
|
2017-01-11 10:06:31 +08:00
|
|
|
return (false);
|
2017-01-16 08:56:30 +08:00
|
|
|
}
|
2017-01-11 10:06:31 +08:00
|
|
|
|
|
|
|
{
|
|
|
|
bool ret;
|
|
|
|
|
|
|
|
malloc_mutex_lock(tsdn, &arena->lock);
|
|
|
|
ret = arena_prof_accum_impl(arena, accumbytes);
|
|
|
|
malloc_mutex_unlock(tsdn, &arena->lock);
|
|
|
|
return (ret);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif /* (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_ARENA_C_)) */
|
|
|
|
|
|
|
|
#endif /* JEMALLOC_INTERNAL_ARENA_INLINES_A_H */
|