ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Control
AthAllocators
src
ArenaBase.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
13
14
#include "
AthAllocators/ArenaBase.h
"
15
#include "
AthAllocators/ArenaAllocatorBase.h
"
16
#include "
AthAllocators/ArenaAllocatorRegistry.h
"
17
#include <ostream>
18
#include <print>
19
20
21
namespace
SG
{
22
23
28
ArenaBase::ArenaBase
(
const
std::string&
name
/*= ""*/
)
29
:
m_name
(
name
)
30
{
31
}
32
33
37
ArenaBase::~ArenaBase
()
38
{
39
}
40
41
45
void
ArenaBase::reset
()
46
{
47
lock_t
l (
m_mutex
);
48
for
(
AllocEntry
& alloc :
m_allocs
) {
49
if
(alloc.m_alloc) {
50
lock_t
alloc_lock (*alloc.m_mutex);
51
alloc.m_alloc->reset();
52
}
53
}
54
}
55
56
61
void
ArenaBase::erase
()
62
{
63
lock_t
l (
m_mutex
);
64
for
(
AllocEntry
& alloc :
m_allocs
) {
65
if
(alloc.m_alloc) {
66
lock_t
alloc_lock (*alloc.m_mutex);
67
alloc.m_alloc->erase();
68
}
69
}
70
}
71
72
77
void
ArenaBase::report
(std::ostream& os)
const
78
{
79
lock_t
l (
m_mutex
);
80
bool
first =
true
;
81
for
(
const
AllocEntry
& alloc :
m_allocs
) {
82
if
(alloc.m_alloc) {
83
if
(first) {
84
ArenaAllocatorBase::Stats::header
(os);
85
std::println (os);
86
first =
false
;
87
}
88
lock_t
alloc_lock (*alloc.m_mutex);
89
alloc.m_alloc->report (os);
90
}
91
}
92
}
93
94
98
ArenaAllocatorBase::Stats
ArenaBase::stats
()
const
99
{
100
ArenaAllocatorBase::Stats
stats
;
101
lock_t
l (
m_mutex
);
102
for
(
const
AllocEntry
& alloc :
m_allocs
) {
103
if
(alloc.m_alloc) {
104
lock_t
alloc_lock (*alloc.m_mutex);
105
stats
+= alloc.m_alloc->stats();
106
}
107
}
108
return
stats
;
109
}
110
111
115
const
std::string&
ArenaBase::name
()
const
116
{
117
return
m_name
;
118
}
119
120
131
ArenaAllocatorBase
*
ArenaBase::makeAllocator
(
size_t
i)
132
{
133
// We have to create a new Allocator.
134
// Make sure there's room in the vector.
135
if
(
m_allocs
.size() <= i) {
136
m_allocs
.resize (i+1);
137
}
138
139
// Create the Allocator, using the Registry.
140
std::unique_ptr<ArenaAllocatorBase> alloc =
141
ArenaAllocatorRegistry::instance
()->
create
(i);
142
143
// Install it in the vector.
144
m_allocs
[i].m_alloc = std::move (alloc);
145
m_allocs
[i].m_mutex = std::make_unique<std::mutex>();
146
147
return
m_allocs
[i].m_alloc.get();
148
}
149
150
151
}
// namespace SG
ArenaAllocatorBase.h
Common base class for arena allocator classes. See Arena.h for an overview of the arena-based memory ...
ArenaAllocatorRegistry.h
Registry of allocator factories. See Arena.h for an overview of the arena-based memory allocators.
ArenaBase.h
Part of Arena dealing with the list of allocators. Broken out from Arena to avoid a dependency loop w...
SG::ArenaAllocatorBase
Common base class for arena allocator classes.
Definition
ArenaAllocatorBase.h:135
SG::ArenaAllocatorRegistry::create
std::unique_ptr< ArenaAllocatorBase > create(size_t i)
Create a new instance of an allocator.
Definition
ArenaAllocatorRegistry.cxx:195
SG::ArenaAllocatorRegistry::instance
static ArenaAllocatorRegistry * instance()
Return a pointer to the global ArenaAllocatorRegistry instance.
Definition
ArenaAllocatorRegistry.cxx:204
SG::ArenaBase::reset
void reset()
Reset all contained allocators.
Definition
ArenaBase.cxx:45
SG::ArenaBase::report
void report(std::ostream &os) const
Generate a report of the memory in use by this Arena.
Definition
ArenaBase.cxx:77
SG::ArenaBase::stats
ArenaAllocatorBase::Stats stats() const
Return statistics summed over all allocators in this Arena.
Definition
ArenaBase.cxx:98
SG::ArenaBase::ArenaBase
ArenaBase(const std::string &name="")
Constructor.
Definition
ArenaBase.cxx:28
SG::ArenaBase::~ArenaBase
virtual ~ArenaBase()
Destructor.
Definition
ArenaBase.cxx:37
SG::ArenaBase::lock_t
std::lock_guard< std::mutex > lock_t
Definition
ArenaBase.h:102
SG::ArenaBase::name
const std::string & name() const
Return this Arena's name.
Definition
ArenaBase.cxx:115
SG::ArenaBase::erase
void erase()
Erase all contained allocators.
Definition
ArenaBase.cxx:61
SG::ArenaBase::m_mutex
std::mutex m_mutex
To guard access to m_allocs.
Definition
ArenaBase.h:130
SG::ArenaBase::m_name
std::string m_name
Our name.
Definition
ArenaBase.h:127
SG::ArenaBase::makeAllocator
ArenaAllocatorBase * makeAllocator(size_t i)
Make a new Allocator for index i.
Definition
ArenaBase.cxx:131
SG::ArenaBase::m_allocs
std::vector< AllocEntry > m_allocs
Definition
ArenaBase.h:124
SG
Forward declaration.
Definition
CaloCellPacker_400_500.h:32
SG::ArenaAllocatorBase::Stats
Statistics for an allocator.
Definition
ArenaAllocatorBase.h:189
SG::ArenaAllocatorBase::Stats::header
static void header(std::ostream &os)
Print report header.
Definition
ArenaAllocatorBase.cxx:112
SG::ArenaBase::AllocEntry
Our allocator vector.
Definition
ArenaBase.h:120
Generated on
for ATLAS Offline Software by
1.17.0