Arcane
v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
Timer.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
/* Timer.h (C) 2000-2022 */
9
/* */
10
/* Gestion d'un timer. */
11
/*---------------------------------------------------------------------------*/
12
#ifndef ARCANE_TIMER_H
13
#define ARCANE_TIMER_H
14
/*---------------------------------------------------------------------------*/
15
/*---------------------------------------------------------------------------*/
16
17
#include "arcane/utils/String.h"
18
19
#include "arcane/ArcaneTypes.h"
20
21
/*---------------------------------------------------------------------------*/
22
/*---------------------------------------------------------------------------*/
23
24
namespace
Arcane
25
{
26
27
/*---------------------------------------------------------------------------*/
28
/*---------------------------------------------------------------------------*/
29
30
class
ITimerMng;
31
class
ITimeStats;
32
33
/*---------------------------------------------------------------------------*/
34
/*---------------------------------------------------------------------------*/
35
/*!
36
* \brief Gestion d'un timer.
37
38
* Une instance de cette classe permet de mesurer le temps passé entre son
39
* activation par la méthode start() et son arrêt par la méthode stop().
40
41
* Le timer peut être utilisé plusieurs fois et il est possible de
42
* connaître à la fois le nombre d'activation (nbActivated()) et le temps
43
* total passé dans ses activations successives (totalTime()).
44
45
* Il existe deux modes de fonctionnement:
46
* <ul>
47
* <li>#TimerVirtual: le timer utilise le temps CPU du processus. Ce temps
48
* est constant quelle que soit la charge de la machine;</li>
49
* <li>#TimerReal: le timer utilise le temps réel. La résolution de ce timer est
50
* en général meilleure qu'avec le type précédent mais elle n'est significative
51
* que lorsque la machine est dédiée au processus.</li>
52
* </ul>
53
*
54
* \note Depuis la version 3.6 de %Arcane, le #TimerVirtual est obsolète et
55
* la valeur retournée sera équivalent à #TimerReal.
56
*
57
* La résolution du timer dépend de la machine. Elle est de l'ordre de la
58
* milliseconde pour les timers utilisant le temps CPU et de l'ordre de
59
* la microseconde pour les timers utilisant le temps réel.
60
*/
61
class
ARCANE_CORE_EXPORT
Timer
62
{
63
public
:
64
65
//! Type du timer
66
enum
eTimerType
67
{
68
/*!
69
* \brief Timer utilisant le temps CPU (obsolète).
70
*
71
* \deprecated Ce timer n'est plus utilisé et se comporte comme
72
* le temps horloge (TimerReal).
73
*/
74
TimerVirtual
,
75
//! Timer utilisant le temps réel
76
TimerReal
77
};
78
79
public
:
80
81
/*!
82
* \brief Sentinelle pour le timer.
83
* La sentinelle associée à un timer permet de déclancher celui-ci
84
* au moment de sa construction et de l'arrêter au moment de sa
85
* destruction. Cela assure que le timer sera bien arrêté en cas
86
* d'exception par exemple.
87
*/
88
class
ARCANE_CORE_EXPORT
Sentry
89
{
90
public
:
91
//! Associe le timer \a t et le démarre
92
Sentry
(
Timer
* t) : m_timer(t)
93
{ m_timer->start(); }
94
//! Stoppe le timer associé
95
~Sentry
()
96
{ m_timer->stop(); }
97
private
:
98
Timer
* m_timer;
//!< Timer associé
99
};
100
101
/*!
102
* \brief Postionne le nom de l'action en cours d'exécution.
103
*
104
* Le nom d'une action peut-être n'importe quoi. Il est
105
* juste utilisé pour différencier les différentes partie d'une
106
* exécution et connaître le temps de chacune d'elle.
107
* Les actions doivent s'imbriquent les unes dans les autres
108
*/
109
class
ARCANE_CORE_EXPORT
Action
110
{
111
public
:
112
Action
(
ISubDomain
* sub_domain,
const
String
& action_name,
bool
print_time=
false
);
113
Action
(
ITimeStats
* stats,
const
String
& action_name,
bool
print_time=
false
);
114
~Action
();
115
public
:
116
private
:
117
ITimeStats
* m_stats;
118
String
m_action_name;
119
bool
m_print_time;
120
private
:
121
void
_init();
122
};
123
124
/*!
125
* \brief Positionne la phase de l'action en cours d'exécution.
126
*/
127
class
ARCANE_CORE_EXPORT
Phase
128
{
129
public
:
130
public
:
131
Phase
(
ISubDomain
* sub_domain,
eTimePhase
pt);
132
Phase
(
ITimeStats
* stats,
eTimePhase
pt);
133
~Phase
();
134
public
:
135
private
:
136
ITimeStats
* m_stats;
//!< Gestionnaire de sous-domaine
137
eTimePhase
m_phase_type;
138
private
:
139
void
_init();
140
};
141
142
/*!
143
* \brief Affiche le temps passé entre l'appel au constructeur et le destructeur.
144
*
145
* Cette classe permet de simplement afficher au moment du destructeur,
146
* le temps réel écoulé depuis l'appel au constructeur. L'affichage se fait
147
* via la méthode info() du ITraceMng.
148
* \code
149
* {
150
* Timer::SimplePrinter sp(traceMng(),"myFunction");
151
* myFunction();
152
* }
153
* \endcode
154
*/
155
class
ARCANE_CORE_EXPORT
SimplePrinter
156
{
157
public
:
158
SimplePrinter
(
ITraceMng
* tm,
const
String
& msg);
159
SimplePrinter
(
ITraceMng
* tm,
const
String
& msg,
bool
is_active);
160
~SimplePrinter
();
161
private
:
162
ITraceMng
* m_trace_mng;
163
Real m_begin_time;
164
bool
m_is_active;
165
String
m_message;
166
private
:
167
void
_init();
168
};
169
170
public
:
171
172
/*!
173
* \brief Construit un timer.
174
*
175
* Construit un timer lié au sous-domaine \a sd, de nom \a name et de
176
* type \a type.
177
*/
178
Timer
(
ISubDomain
* sd,
const
String
& name,
eTimerType
type);
179
180
/*!
181
* \brief Construit un timer.
182
*
183
* Construit un timer lié au gestionnaire \a tm, de nom \a name et de
184
* type \a type.
185
*/
186
Timer
(
ITimerMng
* tm,
const
String
& name,
eTimerType
type);
187
188
~Timer
();
//!< Libère les ressources
189
190
public
:
191
192
/*!
193
* \brief Active le timer.
194
*
195
* Si le timer est déjà actif, cette méthode ne fait rien.
196
*/
197
void
start();
198
199
/*!
200
* \brief Désactive le timer.
201
*
202
* Si le timer n'est pas actif au moment de l'appel, cette méthode ne
203
* fait rien.
204
*
205
* \return le temps écoulé (en secondes) depuis la dernière activation.
206
*/
207
Real stop();
208
209
//! Retourne l'état d'activation du timer
210
bool
isActivated
()
const
{
return
m_is_activated; }
211
212
//! Retourne le nom du timer
213
const
String
&
name
()
const
{
return
m_name; }
214
215
//! Retourne le temps total (en secondes) passé dans le timer
216
Real
totalTime
()
const
{
return
m_total_time; }
217
218
//! Retourne le temps (en secondes) passé lors de la dernière activation du timer
219
Real
lastActivationTime
()
const
{
return
m_activation_time; }
220
221
//! Retourne le nombre de fois que le timer a été activé
222
Integer
nbActivated
()
const
{
return
m_nb_activated; }
223
224
//! Retourne le type du temps utilisé
225
eTimerType
type
()
const
{
return
m_type; }
226
227
//! Remet à zéro les compteurs de temps
228
void
reset();
229
230
//! Gestionnaire associé à ce timer.
231
ITimerMng
*
timerMng
()
const
{
return
m_timer_mng; }
232
public
:
233
static
TimeMetricAction
phaseAction(
ITimeStats
* s,
eTimePhase
phase);
234
public
:
235
//! \internal
236
void
_setStartTime(Real t) { m_start_time = t; }
237
//! \internal
238
Real _startTime()
const
{
return
m_start_time; }
239
private
:
240
241
ITimerMng* m_timer_mng;
//!< Gestionnaire de timer
242
eTimerType m_type;
//!< Type du timer
243
Integer
m_nb_activated;
//!< Nombre de fois que le timer a été activé
244
bool
m_is_activated;
//!< \a true si le timer est actif
245
Real
m_activation_time;
//!< Temps passé lors de la dernière activation
246
Real
m_total_time;
//!< Temps total passé dans le timer
247
String m_name;
//!< Nom du timer
248
Real
m_start_time;
//!< Temps du début de la dernière activation
249
};
250
251
/*---------------------------------------------------------------------------*/
252
/*---------------------------------------------------------------------------*/
253
254
}
// End namespace Arcane
255
256
/*---------------------------------------------------------------------------*/
257
/*---------------------------------------------------------------------------*/
258
259
#endif
260
Arcane::ISubDomain
Interface du gestionnaire d'un sous-domaine.
Definition
ISubDomain.h:74
Arcane::ITimeStats
Definition
ITimeStats.h:48
Arcane::ITimerMng
Interface d'un gestionnaire de timer.
Definition
ITimerMng.h:53
Arcane::Timer::Action
Postionne le nom de l'action en cours d'exécution.
Definition
Timer.h:110
Arcane::Timer::Phase
Positionne la phase de l'action en cours d'exécution.
Definition
Timer.h:128
Arcane::Timer::Sentry
Sentinelle pour le timer. La sentinelle associée à un timer permet de déclancher celui-ci au moment d...
Definition
Timer.h:89
Arcane::Timer::Sentry::Sentry
Sentry(Timer *t)
Associe le timer t et le démarre.
Definition
Timer.h:92
Arcane::Timer::Sentry::~Sentry
~Sentry()
Stoppe le timer associé
Definition
Timer.h:95
Arcane::Timer::SimplePrinter
Affiche le temps passé entre l'appel au constructeur et le destructeur.
Definition
Timer.h:156
Arcane::Timer
Gestion d'un timer.
Definition
Timer.h:62
Arcane::Timer::name
const String & name() const
Retourne le nom du timer.
Definition
Timer.h:213
Arcane::Timer::nbActivated
Integer nbActivated() const
Retourne le nombre de fois que le timer a été activé
Definition
Timer.h:222
Arcane::Timer::timerMng
ITimerMng * timerMng() const
Gestionnaire associé à ce timer.
Definition
Timer.h:231
Arcane::Timer::eTimerType
eTimerType
Type du timer.
Definition
Timer.h:67
Arcane::Timer::TimerVirtual
@ TimerVirtual
Timer utilisant le temps CPU (obsolète).
Definition
Timer.h:74
Arcane::Timer::type
eTimerType type() const
Retourne le type du temps utilisé
Definition
Timer.h:225
Arcane::Timer::totalTime
Real totalTime() const
Retourne le temps total (en secondes) passé dans le timer.
Definition
Timer.h:216
Arcane::Timer::isActivated
bool isActivated() const
Retourne l'état d'activation du timer.
Definition
Timer.h:210
Arcane::Timer::lastActivationTime
Real lastActivationTime() const
Retourne le temps (en secondes) passé lors de la dernière activation du timer.
Definition
Timer.h:219
Arccore::ITraceMng
Interface du gestionnaire de traces.
Definition
arccore/src/trace/arccore/trace/ITraceMng.h:156
Arccore::String
Chaîne de caractères unicode.
Definition
arccore/src/base/arccore/base/String.h:70
Arccore::TimeMetricAction
Definition
TimeMetric.h:63
Arcane
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
Definition
AbstractCaseDocumentVisitor.cc:20
Arcane::eTimePhase
eTimePhase
Phase d'une action temporelle.
Definition
ArcaneTypes.h:290
Arccore::Real
double Real
Type représentant un réel.
Definition
ArccoreGlobal.h:223
Arccore::Integer
Int32 Integer
Type représentant un entier.
Definition
ArccoreGlobal.h:240
arcane
core
Timer.h
Généré le Lundi 18 Novembre 2024 02:56:50 pour Arcane par
1.9.8