ATLAS Offline Software
Loading...
Searching...
No Matches
SegMemSvc Class Reference

Service to access an arena caching allocator. More...

#include <SegMemSvc.h>

Inheritance diagram for SegMemSvc:
Collaboration diagram for SegMemSvc:

Public Types

enum  LIFETIME { EVENT = 0 , JOB = 1 , INCIDENT = 2 }

Public Member Functions

virtual StatusCode initialize () override
virtual void handle (const Incident &) override

Client Interface: allocate and free memory

ServiceHandle< IIncidentSvc > p_incSvc
SG::ArenaHeader m_ahead_job
 three arenas for different lifetimes
SG::ArenaHeader m_ahead_evt
SG::ArenaHeader m_ahead_inc
SG::Arena m_arena_job
SG::Arena m_arena_evt
SG::Arena m_arena_inc
template<typename T>
T * allocate (SegMemSvc::LIFETIME, bool cache=true)
 Get pointer to an area in the arena, used for new with placement.
template<typename T>
bool del (T *)
 free memory managed by arena
 SegMemSvc (const std::string &name, ISvcLocator *svc)
virtual ~SegMemSvc ()
std::string cvt (SegMemSvc::LIFETIME life)
 helper to for printout

Detailed Description

Service to access an arena caching allocator.

Parameters
Nouser settable jobOptions
Author
Charles Leggett

Definition at line 28 of file SegMemSvc.h.

Member Enumeration Documentation

◆ LIFETIME

Enumerator
EVENT 
JOB 
INCIDENT 

Definition at line 33 of file SegMemSvc.h.

33 {
34 EVENT = 0,
35 JOB = 1,
36 INCIDENT = 2
37 };

Constructor & Destructor Documentation

◆ SegMemSvc()

SegMemSvc::SegMemSvc ( const std::string & name,
ISvcLocator * svc )

Definition at line 18 of file SegMemSvc.cxx.

19 : base_class( name, svc ), p_incSvc("IncidentSvc",name),
20 m_arena_job("sms_job",&m_ahead_job),
21 m_arena_evt("sms_evt",&m_ahead_evt),
22 m_arena_inc("sms_inc",&m_ahead_inc)
23{
24
25}
SG::ArenaHeader m_ahead_job
three arenas for different lifetimes
Definition SegMemSvc.h:81
SG::ArenaHeader m_ahead_evt
Definition SegMemSvc.h:81
SG::Arena m_arena_inc
Definition SegMemSvc.h:82
SG::Arena m_arena_job
Definition SegMemSvc.h:82
SG::Arena m_arena_evt
Definition SegMemSvc.h:82
ServiceHandle< IIncidentSvc > p_incSvc
Definition SegMemSvc.h:68
SG::ArenaHeader m_ahead_inc
Definition SegMemSvc.h:81

◆ ~SegMemSvc()

SegMemSvc::~SegMemSvc ( )
virtual

Definition at line 30 of file SegMemSvc.cxx.

30 {
31
32}

Member Function Documentation

◆ allocate()

template<typename T>
T * SegMemSvc::allocate ( SegMemSvc::LIFETIME ,
bool cache = true )

Get pointer to an area in the arena, used for new with placement.

Parameters
LIFETIMEobject lifetime in the arena: EVENT, JOB or INCIDENT
Returns
T* to be used with new with placement

◆ cvt()

std::string SegMemSvc::cvt ( SegMemSvc::LIFETIME life)
inlineprivate

helper to for printout

Definition at line 71 of file SegMemSvc.h.

71 {
72 switch (life) {
73 case SegMemSvc::EVENT : return "EVENT";
74 case SegMemSvc::JOB : return "JOB";
75 case SegMemSvc::INCIDENT: return "INCIDENT";
76 }
77 return "UNKNOWN";
78 }

◆ del()

template<typename T>
bool SegMemSvc::del ( T * )

free memory managed by arena

◆ handle()

void SegMemSvc::handle ( const Incident & inc)
overridevirtual

Definition at line 58 of file SegMemSvc.cxx.

58 {
59
60 if (inc.type() == "EndEvent") {
61 if (msgStream().level() <= MSG::DEBUG) {
62 std::ostringstream ost;
63 m_ahead_evt.report(ost);
64 debug() << "Running report for " << m_arena_evt.name()
65 << ost.str() << endmsg;
66 }
67
68 debug() << "freeing all memory allocated for Event" << endmsg;
69 m_arena_evt.reset();
70 m_ahead_evt.reset();
71
72 } else if ( inc.type() == "DefragMemory") {
73
74 if (msgStream().level() <= MSG::DEBUG) {
75 debug() << "defragmenting memory" << endmsg;
76 }
77 debug() << "freeing all memory allocated associated with "
78 << "DefragMemory incident" << endmsg;
79 m_arena_inc.reset();
80 m_ahead_inc.reset();
81 }
82
83}
#define endmsg
const bool debug

◆ initialize()

StatusCode SegMemSvc::initialize ( )
overridevirtual

Definition at line 39 of file SegMemSvc.cxx.

39 {
40
41 SG::Arena::Push push(m_arena_job);
42 SG::Arena::Push push2(m_arena_evt);
43 SG::Arena::Push push3(m_arena_inc);
44
45 // m_ahead.addArena(&m_arena);
46
47
48 p_incSvc->addListener( this, "EndEvent" );
49 p_incSvc->addListener( this, "DefragMemory" );
50
51 return StatusCode::SUCCESS;
52
53}

Member Data Documentation

◆ m_ahead_evt

SG::ArenaHeader SegMemSvc::m_ahead_evt
private

Definition at line 81 of file SegMemSvc.h.

◆ m_ahead_inc

SG::ArenaHeader SegMemSvc::m_ahead_inc
private

Definition at line 81 of file SegMemSvc.h.

◆ m_ahead_job

SG::ArenaHeader SegMemSvc::m_ahead_job
private

three arenas for different lifetimes

Definition at line 81 of file SegMemSvc.h.

◆ m_arena_evt

SG::Arena SegMemSvc::m_arena_evt
private

Definition at line 82 of file SegMemSvc.h.

◆ m_arena_inc

SG::Arena SegMemSvc::m_arena_inc
private

Definition at line 82 of file SegMemSvc.h.

◆ m_arena_job

SG::Arena SegMemSvc::m_arena_job
private

Definition at line 82 of file SegMemSvc.h.

◆ p_incSvc

ServiceHandle<IIncidentSvc> SegMemSvc::p_incSvc
private

Definition at line 68 of file SegMemSvc.h.


The documentation for this class was generated from the following files: