Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/global/management/include/G4Timer.hh

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /global/management/include/G4Timer.hh (Version 11.3.0) and /global/management/include/G4Timer.hh (Version 10.7.p2)


  1 //                                                  1 //
  2 // *******************************************      2 // ********************************************************************
  3 // * License and Disclaimer                         3 // * License and Disclaimer                                           *
  4 // *                                                4 // *                                                                  *
  5 // * The  Geant4 software  is  copyright of th      5 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
  6 // * the Geant4 Collaboration.  It is provided      6 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
  7 // * conditions of the Geant4 Software License      7 // * conditions of the Geant4 Software License,  included in the file *
  8 // * LICENSE and available at  http://cern.ch/      8 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
  9 // * include a list of copyright holders.           9 // * include a list of copyright holders.                             *
 10 // *                                               10 // *                                                                  *
 11 // * Neither the authors of this software syst     11 // * Neither the authors of this software system, nor their employing *
 12 // * institutes,nor the agencies providing fin     12 // * institutes,nor the agencies providing financial support for this *
 13 // * work  make  any representation or  warran     13 // * work  make  any representation or  warranty, express or implied, *
 14 // * regarding  this  software system or assum     14 // * regarding  this  software system or assume any liability for its *
 15 // * use.  Please see the license in the file      15 // * use.  Please see the license in the file  LICENSE  and URL above *
 16 // * for the full disclaimer and the limitatio     16 // * for the full disclaimer and the limitation of liability.         *
 17 // *                                               17 // *                                                                  *
 18 // * This  code  implementation is the result      18 // * This  code  implementation is the result of  the  scientific and *
 19 // * technical work of the GEANT4 collaboratio     19 // * technical work of the GEANT4 collaboration.                      *
 20 // * By using,  copying,  modifying or  distri     20 // * By using,  copying,  modifying or  distributing the software (or *
 21 // * any work based  on the software)  you  ag     21 // * any work based  on the software)  you  agree  to acknowledge its *
 22 // * use  in  resulting  scientific  publicati     22 // * use  in  resulting  scientific  publications,  and indicate your *
 23 // * acceptance of all terms of the Geant4 Sof     23 // * acceptance of all terms of the Geant4 Software license.          *
 24 // *******************************************     24 // ********************************************************************
 25 //                                                 25 //
 26 // G4Timer                                         26 // G4Timer
 27 //                                                 27 //
 28 // Class description:                              28 // Class description:
 29 //                                                 29 //
 30 // Class for timer objects, able to measure el     30 // Class for timer objects, able to measure elasped user/system process time.
 31 //                                                 31 //
 32 // Note: Uses <sys/times.h> & <unistd.h> - POS     32 // Note: Uses <sys/times.h> & <unistd.h> - POSIX.1 defined
 33 //       If used, this header must be included     33 //       If used, this header must be included in the source (.cc) file and it
 34 //       must be the first header file to be i     34 //       must be the first header file to be included!
 35 //                                                 35 //
 36 // Member functions:                               36 // Member functions:
 37 //                                                 37 //
 38 // G4Timer()                                       38 // G4Timer()
 39 //   Construct a timer object                      39 //   Construct a timer object
 40 // Start()                                         40 // Start()
 41 //   Start timing                                  41 //   Start timing
 42 // Stop()                                          42 // Stop()
 43 //   Stop timing                                   43 //   Stop timing
 44 // G4bool IsValid()                                44 // G4bool IsValid()
 45 //   Return true if have a valid time (ie star     45 //   Return true if have a valid time (ie start() and stop() called)
 46 // G4double GetRealElapsed()                       46 // G4double GetRealElapsed()
 47 //   Return the elapsed real time between last     47 //   Return the elapsed real time between last calling start() and stop()
 48 // G4double GetSystemElapsed()                     48 // G4double GetSystemElapsed()
 49 //   Return the elapsed system time between la     49 //   Return the elapsed system time between last calling start() and stop()
 50 // G4double GetUserElapsed()                       50 // G4double GetUserElapsed()
 51 //   Return the elapsed user time between last     51 //   Return the elapsed user time between last calling start() and stop()
 52 //                                                 52 //
 53 // Operators:                                      53 // Operators:
 54 //                                                 54 //
 55 // std::ostream& operator << (std::ostream& os     55 // std::ostream& operator << (std::ostream& os, const G4Timer& t);
 56 //   Print the elapsed real,system and usertim     56 //   Print the elapsed real,system and usertimes on os. Prints **s for times
 57 //   if !IsValid                                   57 //   if !IsValid
 58 //                                                 58 //
 59 // Member data:                                    59 // Member data:
 60 //                                                 60 //
 61 // G4bool fValidTimes                              61 // G4bool fValidTimes
 62 //   True after start and stop have both been      62 //   True after start and stop have both been called more than once and
 63 //   an equal number of times                      63 //   an equal number of times
 64 // clock_t fStartRealTime,fEndRealTime             64 // clock_t fStartRealTime,fEndRealTime
 65 //   Real times (arbitrary time 0)                 65 //   Real times (arbitrary time 0)
 66 // tms fStartTimes,fEndTimes                       66 // tms fStartTimes,fEndTimes
 67 //   Timing structures (see times(2)) for star     67 //   Timing structures (see times(2)) for start and end times
 68                                                    68 
 69 // Author: P.Kent, 21.08.95 - First implementa     69 // Author: P.Kent, 21.08.95 - First implementation
 70 // Revision: G.Cosmo, 29.04.97 - Added timings     70 // Revision: G.Cosmo, 29.04.97 - Added timings for Windows
 71 // -------------------------------------------     71 // --------------------------------------------------------------------
 72 #ifndef G4TIMER_HH                                 72 #ifndef G4TIMER_HH
 73 #define G4TIMER_HH 1                               73 #define G4TIMER_HH 1
 74                                                    74 
 75 #if !(defined(WIN32) || defined(__MINGW32__))  <<  75 #ifndef WIN32
 76 #  include <sys/times.h>                           76 #  include <sys/times.h>
 77 #  include <unistd.h>                              77 #  include <unistd.h>
 78 #else                                              78 #else
 79 #  include <time.h>                                79 #  include <time.h>
 80 #  define _SC_CLK_TCK 1                            80 #  define _SC_CLK_TCK 1
 81                                                    81 
 82 extern "C"                                         82 extern "C"
 83 {                                                  83 {
 84   int sysconf(int);                                84   int sysconf(int);
 85 };                                                 85 };
 86                                                    86 
 87 // Structure returned by times()                   87 // Structure returned by times()
 88                                                    88 
 89 struct tms                                         89 struct tms
 90 {                                                  90 {
 91   clock_t tms_utime;  /* user time */              91   clock_t tms_utime;  /* user time */
 92   clock_t tms_stime;  /* system time */            92   clock_t tms_stime;  /* system time */
 93   clock_t tms_cutime; /* user time, children *     93   clock_t tms_cutime; /* user time, children */
 94   clock_t tms_cstime; /* system time, children     94   clock_t tms_cstime; /* system time, children */
 95 };                                                 95 };
 96                                                    96 
 97 extern "C"                                         97 extern "C"
 98 {                                                  98 {
 99   extern clock_t times(struct tms*);               99   extern clock_t times(struct tms*);
100 };                                                100 };
101 #endif /* WIN32 */                                101 #endif /* WIN32 */
102                                                   102 
103 #include "G4Types.hh"                             103 #include "G4Types.hh"
104 #include "G4ios.hh"                               104 #include "G4ios.hh"
105                                                   105 
106 #include <chrono>                                 106 #include <chrono>
107                                                   107 
108 class G4Timer                                     108 class G4Timer
109 {                                                 109 {
                                                   >> 110   using clock_type = std::chrono::high_resolution_clock;
                                                   >> 111 
110  public:                                          112  public:
                                                   >> 113   G4Timer();
                                                   >> 114 
111   inline void Start();                            115   inline void Start();
112   inline void Stop();                             116   inline void Stop();
113   inline G4bool IsValid() const;                  117   inline G4bool IsValid() const;
114   inline const char* GetClockTime() const;        118   inline const char* GetClockTime() const;
115   G4double GetRealElapsed() const;                119   G4double GetRealElapsed() const;
116   G4double GetSystemElapsed() const;              120   G4double GetSystemElapsed() const;
117   G4double GetUserElapsed() const;                121   G4double GetUserElapsed() const;
118                                                   122 
119  private:                                         123  private:
120   G4bool fValidTimes{false};                   << 124   G4bool fValidTimes;
121   using clock_type = std::chrono::high_resolut << 
122   std::chrono::time_point<clock_type> fStartRe    125   std::chrono::time_point<clock_type> fStartRealTime, fEndRealTime;
123   tms fStartTimes, fEndTimes;                     126   tms fStartTimes, fEndTimes;
124 };                                                127 };
125                                                   128 
126 std::ostream& operator<<(std::ostream& os, con    129 std::ostream& operator<<(std::ostream& os, const G4Timer& t);
127                                                   130 
128 #include "G4Timer.icc"                            131 #include "G4Timer.icc"
129                                                   132 
130 #endif                                            133 #endif
131                                                   134