Arcane  v3.14.10.0
Documentation utilisateur
Chargement...
Recherche...
Aucune correspondance
IProfilingService.h
1// -*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-
2//-----------------------------------------------------------------------------
3// Copyright 2000-2023 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/* IProfilingService.h (C) 2000-2023 */
9/* */
10/* Interface d'un service de profiling. */
11/*---------------------------------------------------------------------------*/
12#ifndef ARCANE_UTILS_IPROFILINGSERVICE_H
13#define ARCANE_UTILS_IPROFILINGSERVICE_H
14/*---------------------------------------------------------------------------*/
15/*---------------------------------------------------------------------------*/
16
18
19/*---------------------------------------------------------------------------*/
20/*---------------------------------------------------------------------------*/
21
22namespace Arcane
23{
24
25/*---------------------------------------------------------------------------*/
26/*---------------------------------------------------------------------------*/
27
28class ITimerMng;
29
30/*---------------------------------------------------------------------------*/
31/*---------------------------------------------------------------------------*/
32/*!
33 * \internal
34 * \brief Interface d'un service de profiling.
35 *
36 * Il faut appeler initialize() avant d'utiliser l'instance. On peut
37 * ensuite appeler startProfiling()/stopProfiling() pour démarrer et
38 * arrêter le profiling.
39 *
40 * Lorsque le profiling est arrêté, on peut appeler printInfos() pour
41 * afficher les informations de profiling. La méthode reset() permet de
42 * remettre à zéro les informations de profiling.
43 */
44class ARCANE_UTILS_EXPORT IProfilingService
45{
46 public:
47
48 virtual ~IProfilingService() = default;
49
50 public:
51
52 /*!
53 * \brief Initialise le service de profiling.
54 *
55 * Cette méthode ne peut être appelée qu'une seule fois.
56 */
57 virtual void initialize() = 0;
58
59 //! Indique si initialize() a déjà été appelé
60 virtual bool isInitialized() const { return false; }
61
62 //! Démarre un profiling
63 virtual void startProfiling() = 0;
64
65 virtual void switchEvent() = 0;
66
67 //! Stoppe le profiling
68 virtual void stopProfiling() = 0;
69
70 /*!
71 * \brief Affiche les infos de profiling.
72 *
73 * Le profiling doit être arrêté.
74 * Si \a dump_file est vrai, des sorties fichiers contenant les infos
75 * sont générées ce qui peut prendre du temps.
76 */
77 virtual void printInfos(bool dump_file = false) = 0;
78
79 virtual void getInfos(Int64Array&) = 0;
80
81 //! Ecrit les infos de profiling dans l'écrivain \a writer.
82 virtual void dumpJSON(JSONWriter& writer) = 0;
83
84 /*!
85 * \brief Remet à zéro les compteurs.
86 *
87 * Le profiling doit être arrêté pour cela.
88 */
89 virtual void reset() = 0;
90
91 //! Timer utilisant les fonctionnalités de ce service si elles existent. Peut être nul.
92 virtual ITimerMng* timerMng() = 0;
93};
94
95/*---------------------------------------------------------------------------*/
96/*---------------------------------------------------------------------------*/
97/*!
98 * \brief Classe permettant de démarrer et arrêter automatiquement un service.
99 */
100class ARCANE_UTILS_EXPORT ProfilingSentry
101{
102 public:
103
105 : m_service(s)
106 {
107 if (m_service)
108 m_service->startProfiling();
109 }
111 {
112 if (m_service)
113 m_service->stopProfiling();
114 }
115
116 public:
117
118 IProfilingService* service() { return m_service; }
119
120 private:
121
122 IProfilingService* m_service;
123};
124
125/*---------------------------------------------------------------------------*/
126/*---------------------------------------------------------------------------*/
127/*!
128 * \brief Classe permettant de démarrer et arrêter automatiquement un service.
129 *
130 * Le service est initialisé si nécessaire.
131 */
132class ARCANE_UTILS_EXPORT ProfilingSentryWithInitialize
133{
134 public:
135
136 /*!
137 * \brief Construit une instance associée au service \a s.
138 *
139 * Si \a s est \a null, alors l'instance ne fait rien.
140 */
142 : m_service(s)
143 {
144 if (m_service) {
145 if (!m_service->isInitialized())
146 m_service->initialize();
147 m_service->startProfiling();
148 }
149 }
150
152 {
153 if (m_service) {
154 m_service->stopProfiling();
155 if (m_print_at_end)
156 m_service->printInfos(false);
157 }
158 }
159
160 public:
161
162 IProfilingService* service() { return m_service; }
163 //! Indique si on imprime les résultats à la fin du profiling
164 void setPrintAtEnd(bool v) { m_print_at_end = v; }
165
166 private:
167
168 IProfilingService* m_service = nullptr;
169 bool m_print_at_end = false;
170};
171
172/*---------------------------------------------------------------------------*/
173/*---------------------------------------------------------------------------*/
174
175} // End namespace Arcane
176
177/*---------------------------------------------------------------------------*/
178/*---------------------------------------------------------------------------*/
179
180#endif
Déclarations des types utilisés dans Arcane.
virtual bool isInitialized() const
Indique si initialize() a déjà été appelé
virtual ITimerMng * timerMng()=0
Timer utilisant les fonctionnalités de ce service si elles existent. Peut être nul.
virtual void stopProfiling()=0
Stoppe le profiling.
virtual void startProfiling()=0
Démarre un profiling.
virtual void initialize()=0
Initialise le service de profiling.
virtual void dumpJSON(JSONWriter &writer)=0
Ecrit les infos de profiling dans l'écrivain writer.
virtual void reset()=0
Remet à zéro les compteurs.
virtual void printInfos(bool dump_file=false)=0
Affiche les infos de profiling.
Interface d'un gestionnaire de timer.
Definition ITimerMng.h:53
Ecrivain au format JSON.
Definition JSONWriter.h:33
Classe permettant de démarrer et arrêter automatiquement un service.
void setPrintAtEnd(bool v)
Indique si on imprime les résultats à la fin du profiling.
ProfilingSentryWithInitialize(IProfilingService *s)
Construit une instance associée au service s.
Classe permettant de démarrer et arrêter automatiquement un service.
Classe de base des vecteurs 1D de données.
-*- tab-width: 2; indent-tabs-mode: nil; coding: utf-8-with-signature -*-