Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IMemoryInfo.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2022 CEA (www.cea.fr) IFPEN (www.ifpenergiesnouvelles.com)
4// See the top-level COPYRIGHT file for details.
5// SPDX-License-Identifier: Apache-2.0
6//-----------------------------------------------------------------------------
7/*---------------------------------------------------------------------------*/
8/* IMemoryInfo.h (C) 2000-2018 */
9/* */
10/* Interface d'un collecteur d'informations sur l'usage mémoire. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_IMEMORYINFO_H
13#define ARCANE_UTILS_IMEMORYINFO_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
17#include "arcane/utils/String.h"
18#include "arcane/utils/IFunctorWithArgument.h"
19
20/*---------------------------------------------------------------------------*/
21/*---------------------------------------------------------------------------*/
22
23ARCANE_BEGIN_NAMESPACE
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27/*!
28 * \brief Informations sur un bloc alloué.
29 */
31{
32 public:
33 MemoryInfoChunk() : m_owner(0), m_size(0), m_alloc_id(0), m_iteration(0) {}
34 MemoryInfoChunk(const void* aowner,Int64 asize,Int64 alloc_id,Integer aiteration)
35 : m_owner(aowner), m_size(asize), m_alloc_id(alloc_id), m_iteration(aiteration) {}
36 public:
37 const void* owner() const { return m_owner; }
38 Int64 size() const { return m_size; }
39 Int64 allocId() const { return m_alloc_id; }
40 Integer iteration() const { return m_iteration; }
41 const String& stackTrace() const { return m_stack_trace; }
42 public:
43 void setOwner(const void* o) { m_owner = o; }
44 void setStackTrace(const String& st) { m_stack_trace = st; }
45 private:
46 const void* m_owner;
47 Int64 m_size;
48 Int64 m_alloc_id;
49 Integer m_iteration;
50 String m_stack_trace;
51};
52
53/*---------------------------------------------------------------------------*/
54/*---------------------------------------------------------------------------*/
55/*!
56 * \internal
57 * \brief Interface d'un collecteur d'informations sur l'usage mémoire.
58 */
60{
61 protected:
62
63 IMemoryInfo() {}
64
65 public:
66
67 //! Libère les ressources
68 virtual ~IMemoryInfo(){}
69
70 public:
71
72 //! Crée une référence sur \a owner avec les infos de trace \a trace_info
73 virtual void createOwner(const void* owner,const TraceInfo& trace_info) =0;
74
75 //! Modifie les infos de la référence \a owner
76 virtual void setOwner(const void* owner,const TraceInfo& new_info) =0;
77
78 //! Supprime la référence sur \a owner
79 virtual void removeOwner(const void* owner) =0;
80
81 public:
82
83 virtual void addInfo(const void* owner,const void* ptr,Int64 size) =0;
84
85 virtual void addInfo(const void* owner,const void* ptr,Int64 size,const void* old_ptr) =0;
86
87 virtual void changeOwner(const void* new_owner,const void* ptr) =0;
88
89 virtual void removeInfo(const void* owner,const void* ptr,bool can_fail=false) =0;
90
91 virtual void printInfos(std::ostream& ostr) =0;
92
93 public:
94
95 virtual void beginCollect() =0;
96 virtual void endCollect() =0;
97 virtual bool isCollecting() const =0;
98
99 public:
100
101 //! Positionne le numéro de l'itération courante.
102 virtual void setIteration(Integer iteration) =0;
103
104 virtual void printAllocatedMemory(std::ostream& ostr,Integer iteration) =0;
105
106 //! Positionne le ITraceMng pour les messages.
107 virtual void setTraceMng(ITraceMng* msg) =0;
108
109 /*!
110 * \brief Indique si on active la sauvegarde de la pile d'appel.
111 *
112 * Si \a is_active est vrai, active la trace la pile d'appel des allocations.
113 * Le tracage est conditionné à la valeur de stackTraceMinAllocSize().
114 */
115 virtual void setKeepStackTrace(bool is_active) =0;
116
117 //! Indique si la sauvegarde de la pile d'appel est activée.
118 virtual bool keepStackTrace() const =0;
119
120 /*!
121 * \brief Positionne la taille minimale des allocations dont on trace la pile d'appel.
122 *
123 * Pour toutes les allocations au dessus de \a alloc_size,
124 * la pile d'appel est conservée afin de pouvoir identifier les
125 * fuites mémoires. Le cout mémoire et CPU de la conservation
126 * d'une pile d'appel est important et il est donc déconseillé
127 * de mettre une valeur trop faible (en dessous de 1000) à \a alloc_size.
128 * La conservation de la pile d'appel est désactivée si \a keepStackTrace()
129 * vaut \a false.
130 */
131 virtual void setStackTraceMinAllocSize(Int64 alloc_size) =0;
132
133 //! Taille minimale des allocations dont on trace la pile d'appel.
134 virtual Int64 stackTraceMinAllocSize() const =0;
135
136 //! Visiteur sur l'ensemble des blocs alloués
138
139 virtual Int64 nbAllocation() const =0;
140};
141
142/*---------------------------------------------------------------------------*/
143/*---------------------------------------------------------------------------*/
144
145extern "C++" ARCANE_UTILS_EXPORT IMemoryInfo*
146arcaneGlobalMemoryInfo();
147
148/*---------------------------------------------------------------------------*/
149/*---------------------------------------------------------------------------*/
150
151ARCANE_END_NAMESPACE
152
153/*---------------------------------------------------------------------------*/
154/*---------------------------------------------------------------------------*/
155
156#endif
157
virtual void setIteration(Integer iteration)=0
Positionne le numéro de l'itération courante.
virtual void setStackTraceMinAllocSize(Int64 alloc_size)=0
Positionne la taille minimale des allocations dont on trace la pile d'appel.
virtual void removeOwner(const void *owner)=0
Supprime la référence sur owner.
virtual void createOwner(const void *owner, const TraceInfo &trace_info)=0
Crée une référence sur owner avec les infos de trace trace_info.
virtual void setTraceMng(ITraceMng *msg)=0
Positionne le ITraceMng pour les messages.
virtual void visitAllocatedBlocks(IFunctorWithArgumentT< const MemoryInfoChunk & > *functor) const =0
Visiteur sur l'ensemble des blocs alloués.
virtual void setOwner(const void *owner, const TraceInfo &new_info)=0
Modifie les infos de la référence owner.
virtual ~IMemoryInfo()
Libère les ressources.
Definition IMemoryInfo.h:68
virtual Int64 stackTraceMinAllocSize() const =0
Taille minimale des allocations dont on trace la pile d'appel.
virtual void setKeepStackTrace(bool is_active)=0
Indique si on active la sauvegarde de la pile d'appel.
virtual bool keepStackTrace() const =0
Indique si la sauvegarde de la pile d'appel est activée.
Informations sur un bloc alloué.
Definition IMemoryInfo.h:31
Interface d'un fonctor avec argument mais sans valeur de retour.
Interface du gestionnaire de traces.
Chaîne de caractères unicode.