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 9.0.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 //
                                                   >>  27 // $Id: G4Timer.hh,v 1.14 2006/06/29 19:03:15 gunter Exp $
                                                   >>  28 // GEANT4 tag $Name: geant4-08-03-patch-01 $
                                                   >>  29 //
                                                   >>  30 // 
                                                   >>  31 // ----------------------------------------------------------------------
                                                   >>  32 // Class G4Timer
 27 //                                                 33 //
 28 // Class description:                              34 // Class description:
 29 //                                                 35 //
 30 // Class for timer objects, able to measure el     36 // Class for timer objects, able to measure elasped user/system process time.
 31 //                                                 37 //
 32 // Note: Uses <sys/times.h> & <unistd.h> - POS     38 // Note: Uses <sys/times.h> & <unistd.h> - POSIX.1 defined
 33 //       If used, this header must be included     39 //       If used, this header must be included in the source (.cc) file and it
 34 //       must be the first header file to be i     40 //       must be the first header file to be included!
 35 //                                                 41 //
 36 // Member functions:                               42 // Member functions:
 37 //                                                 43 //
 38 // G4Timer()                                       44 // G4Timer()
 39 //   Construct a timer object                      45 //   Construct a timer object
 40 // Start()                                         46 // Start()
 41 //   Start timing                                  47 //   Start timing
 42 // Stop()                                          48 // Stop()
 43 //   Stop timing                                   49 //   Stop timing
 44 // G4bool IsValid()                                50 // G4bool IsValid()
 45 //   Return true if have a valid time (ie star     51 //   Return true if have a valid time (ie start() and stop() called)
 46 // G4double GetRealElapsed()                       52 // G4double GetRealElapsed()
 47 //   Return the elapsed real time between last     53 //   Return the elapsed real time between last calling start() and stop()
 48 // G4double GetSystemElapsed()                     54 // G4double GetSystemElapsed()
 49 //   Return the elapsed system time between la     55 //   Return the elapsed system time between last calling start() and stop()
 50 // G4double GetUserElapsed()                       56 // G4double GetUserElapsed()
 51 //   Return the elapsed user time between last     57 //   Return the elapsed user time between last calling start() and stop()
 52 //                                                 58 //
 53 // Operators:                                      59 // Operators:
 54 //                                                 60 //
 55 // std::ostream& operator << (std::ostream& os     61 // std::ostream& operator << (std::ostream& os, const G4Timer& t);
 56 //   Print the elapsed real,system and usertim     62 //   Print the elapsed real,system and usertimes on os. Prints **s for times
 57 //   if !IsValid                                   63 //   if !IsValid
 58 //                                                 64 //
 59 // Member data:                                    65 // Member data:
 60 //                                                 66 //
 61 // G4bool fValidTimes                              67 // G4bool fValidTimes
 62 //   True after start and stop have both been      68 //   True after start and stop have both been called more than once and
 63 //   an equal number of times                      69 //   an equal number of times
 64 // clock_t fStartRealTime,fEndRealTime             70 // clock_t fStartRealTime,fEndRealTime
 65 //   Real times (arbitrary time 0)                 71 //   Real times (arbitrary time 0)
 66 // tms fStartTimes,fEndTimes                       72 // tms fStartTimes,fEndTimes
 67 //   Timing structures (see times(2)) for star     73 //   Timing structures (see times(2)) for start and end times
 68                                                    74 
 69 // Author: P.Kent, 21.08.95 - First implementa <<  75 // History:
 70 // Revision: G.Cosmo, 29.04.97 - Added timings <<  76 // 23.08.96 P.Kent Updated to also computed real elapsed time
 71 // ------------------------------------------- <<  77 // 21.08.95 P.Kent
                                                   >>  78 // 29.04.97 G.Cosmo Added timings for Windows/NT
                                                   >>  79 
 72 #ifndef G4TIMER_HH                                 80 #ifndef G4TIMER_HH
 73 #define G4TIMER_HH 1                           <<  81 #define G4TIMER_HH
 74                                                    82 
 75 #if !(defined(WIN32) || defined(__MINGW32__))  <<  83 #ifndef WIN32
 76 #  include <sys/times.h>                       << 
 77 #  include <unistd.h>                              84 #  include <unistd.h>
                                                   >>  85 #  include <sys/times.h>
 78 #else                                              86 #else
 79 #  include <time.h>                                87 #  include <time.h>
 80 #  define _SC_CLK_TCK 1                        <<  88 #  define _SC_CLK_TCK    1
 81                                                << 
 82 extern "C"                                     << 
 83 {                                              << 
 84   int sysconf(int);                            << 
 85 };                                             << 
 86                                                << 
 87 // Structure returned by times()               << 
 88                                                    89 
 89 struct tms                                     <<  90    extern "C" {
 90 {                                              <<  91           int sysconf(int);
 91   clock_t tms_utime;  /* user time */          <<  92    };
 92   clock_t tms_stime;  /* system time */        <<  93 
 93   clock_t tms_cutime; /* user time, children * <<  94    // Structure returned by times()
 94   clock_t tms_cstime; /* system time, children <<  95   
 95 };                                             <<  96    struct tms {
 96                                                <<  97       clock_t tms_utime;           /* user time */
 97 extern "C"                                     <<  98       clock_t tms_stime;           /* system time */
 98 {                                              <<  99       clock_t tms_cutime;          /* user time, children */
 99   extern clock_t times(struct tms*);           << 100       clock_t tms_cstime;          /* system time, children */
100 };                                             << 101    };
101 #endif /* WIN32 */                             << 102 
                                                   >> 103    extern "C" {
                                                   >> 104       extern clock_t times(struct tms *);
                                                   >> 105    };
                                                   >> 106 #endif  /* WIN32 */
102                                                   107 
103 #include "G4Types.hh"                             108 #include "G4Types.hh"
104 #include "G4ios.hh"                               109 #include "G4ios.hh"
105                                                   110 
106 #include <chrono>                              << 
107                                                << 
108 class G4Timer                                     111 class G4Timer
109 {                                                 112 {
110  public:                                       << 113   public:
111   inline void Start();                         << 114 
112   inline void Stop();                          << 115     G4Timer();
113   inline G4bool IsValid() const;               << 116 
114   inline const char* GetClockTime() const;     << 117     inline void Start();
115   G4double GetRealElapsed() const;             << 118     inline void Stop();
116   G4double GetSystemElapsed() const;           << 119     inline G4bool IsValid() const;
117   G4double GetUserElapsed() const;             << 120     G4double GetRealElapsed() const;
118                                                << 121     G4double GetSystemElapsed() const;
119  private:                                      << 122     G4double GetUserElapsed() const;
120   G4bool fValidTimes{false};                   << 123 
121   using clock_type = std::chrono::high_resolut << 124   private:
122   std::chrono::time_point<clock_type> fStartRe << 125 
123   tms fStartTimes, fEndTimes;                  << 126     G4bool fValidTimes;
                                                   >> 127     clock_t fStartRealTime,fEndRealTime;
                                                   >> 128     tms fStartTimes,fEndTimes;
124 };                                                129 };
125                                                   130 
126 std::ostream& operator<<(std::ostream& os, con << 131 std::ostream& operator << (std::ostream& os, const G4Timer& t);
127                                                   132 
128 #include "G4Timer.icc"                            133 #include "G4Timer.icc"
                                                   >> 134 
                                                   >> 135 #define times ostimes
129                                                   136 
130 #endif                                            137 #endif
131                                                   138