Roc Toolkit internal modules
Roc Toolkit: real-time audio streaming
Toggle main menu visibility
Loading...
Searching...
No Matches
memory_limiter.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2023 Roc Streaming authors
3
*
4
* This Source Code Form is subject to the terms of the Mozilla Public
5
* License, v. 2.0. If a copy of the MPL was not distributed with this
6
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
7
*/
8
9
//! @file roc_core/memory_limiter.h
10
//! @brief Memory limiter.
11
12
#ifndef ROC_CORE_MEMORY_LIMITER_H_
13
#define ROC_CORE_MEMORY_LIMITER_H_
14
15
#include "
roc_core/atomic.h
"
16
#include "
roc_core/attributes.h
"
17
#include "
roc_core/noncopyable.h
"
18
#include "
roc_core/stddefs.h
"
19
20
namespace
roc
{
21
namespace
core
{
22
23
//! Memory limiter.
24
//! This class can be used to keep track of memory being consumed. This is done through
25
//! the acquire and release methods. The class is used within classes such as LimitedPool,
26
//! LimitedArena.
27
class
MemoryLimiter
:
public
NonCopyable<> {
28
public
:
29
//! Initialize memory limiter.
30
//! @p max_bytes is the maximum total amount of memory that can be acquired. If 0,
31
//! then there is no limit, in which case, only tracking will be performed.
32
explicit
MemoryLimiter
(
const
char
* name,
size_t
max_bytes);
33
34
//! Destroy memory limiter.
35
//! This will panic if memory is still tracked as acquired.
36
~MemoryLimiter
();
37
38
//! Track acquired memory.
39
//! @returns
40
//! true if successful i.e. maximum limit not breached.
41
ROC_ATTR_NODISCARD
bool
acquire
(
size_t
num_bytes);
42
43
//! Track released memory.
44
//! This will panic if we are releasing more than what is currently acquired.
45
void
release
(
size_t
num_bytes);
46
47
//! Get number of bytes currently acquired.
48
size_t
num_acquired
();
49
50
private
:
51
const
char
* name_;
52
const
size_t
max_bytes_;
53
Atomic<size_t>
bytes_acquired_;
54
};
55
56
}
// namespace core
57
}
// namespace roc
58
59
#endif
// ROC_CORE_MEMORY_LIMITER_H_
atomic.h
Atomic.
attributes.h
Compiler attributes.
ROC_ATTR_NODISCARD
#define ROC_ATTR_NODISCARD
Emit warning if function result is not checked.
Definition
attributes.h:31
roc::core::Atomic
Atomic integer. Provides sequential consistency. For a fine-grained memory order control,...
Definition
atomic.h:26
roc::core::MemoryLimiter::num_acquired
size_t num_acquired()
Get number of bytes currently acquired.
roc::core::MemoryLimiter::acquire
ROC_ATTR_NODISCARD bool acquire(size_t num_bytes)
Track acquired memory.
roc::core::MemoryLimiter::MemoryLimiter
MemoryLimiter(const char *name, size_t max_bytes)
Initialize memory limiter. max_bytes is the maximum total amount of memory that can be acquired....
roc::core::MemoryLimiter::~MemoryLimiter
~MemoryLimiter()
Destroy memory limiter. This will panic if memory is still tracked as acquired.
roc::core::MemoryLimiter::release
void release(size_t num_bytes)
Track released memory. This will panic if we are releasing more than what is currently acquired.
roc::core
General-purpose building blocks and platform abstraction layer.
roc
Root namespace.
noncopyable.h
Non-copyable object.
stddefs.h
Commonly used types and functions.
roc_core
memory_limiter.h
Generated by
1.17.0