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 8.0.p1)


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