Timer.cpp

Go to the documentation of this file.
00001 /* ****************************************************************** **
00002 **    OpenSees - Open System for Earthquake Engineering Simulation    **
00003 **          Pacific Earthquake Engineering Research Center            **
00004 **                                                                    **
00005 **                                                                    **
00006 ** (C) Copyright 1999, The Regents of the University of California    **
00007 ** All Rights Reserved.                                               **
00008 **                                                                    **
00009 ** Commercial use of this program without express permission of the   **
00010 ** University of California, Berkeley, is strictly prohibited.  See   **
00011 ** file 'COPYRIGHT'  in main directory for information on usage and   **
00012 ** redistribution,  and for a DISCLAIMER OF ALL WARRANTIES.           **
00013 **                                                                    **
00014 ** Developed by:                                                      **
00015 **   Frank McKenna (fmckenna@ce.berkeley.edu)                         **
00016 **   Gregory L. Fenves (fenves@ce.berkeley.edu)                       **
00017 **   Filip C. Filippou (filippou@ce.berkeley.edu)                     **
00018 **                                                                    **
00019 ** ****************************************************************** */
00020                                                                         
00021 // $Revision: 1.2 $
00022 // $Date: 2003/02/14 23:02:12 $
00023 // $Source: /usr/local/cvs/OpenSees/SRC/utility/Timer.cpp,v $
00024                                                                         
00025                                                                         
00026 // File: ~/utility/Timer.C
00027 //
00028 // Written: fmk 
00029 // Created: Mar 1997
00030 // Revision: A
00031 //
00032 // Description: This file contains the class definition for Timer.
00033 // Timer is a stopwatch.
00034 //
00035 // What: "@(#) Timer.h, revA"
00036 
00037 #include<Timer.h>
00038 #include <bool.h>
00039 
00040 #ifdef NOW
00041 extern "C" int getrusage(int who, struct rusage *rusage);
00042 #endif
00043 
00044 #ifndef CLK_TCK
00045 #define CLK_TCK sysconf(_SC_CLK_TCK)
00046 #endif
00047 
00048 Timer::Timer() 
00049 {
00050 #ifdef _WIN32
00051     // fill in later
00052 #else    
00053     r1us = &r1usage;
00054     r2us = &r2usage;
00055 #endif
00056 }
00057 
00058 Timer::~Timer()
00059 { 
00060 
00061 }
00062 
00063 void 
00064 Timer::start(void)
00065 {
00066 #ifdef _WIN32
00067     // fill in later
00068 #else        
00069     t1 = times(&tmsstart);
00070     getrusage(0,r1us);
00071 #endif
00072 }
00073 
00074 void 
00075 Timer::pause(void)
00076 {
00077 #ifdef _WIN32
00078     // fill in later
00079 #else        
00080     t2 = times(&tmsend);
00081     getrusage(0,r2us);    
00082 #endif
00083 } 
00084 
00085 
00086 double
00087 Timer::getReal(void) const
00088 {
00089 #ifdef _WIN32
00090     // fill in later
00091     return 0.0;
00092 #else        
00093     long clktck = CLK_TCK;    
00094     double Real = (t2-t1)/(double) clktck;
00095     return Real;
00096 #endif
00097 }    
00098 
00099 double
00100 Timer::getCPU(void) const
00101 {
00102 #ifdef _WIN32
00103     // fill in later
00104     return 0.0;
00105 #else        
00106     long clktck = CLK_TCK;
00107     double CPU  = (tmsend.tms_utime - tmsstart.tms_utime)/(double) clktck;    
00108     return CPU;
00109 #endif    
00110 }    
00111 
00112 int
00113 Timer::getNumPageFaults(void) const
00114 {
00115 #ifdef _WIN32
00116     // fill in later
00117     return 0;
00118 #else        
00119     int r2yes = r2us->ru_majflt;
00120     int r1yes = r1us->ru_majflt;
00121     return r2yes-r1yes;
00122 #endif
00123 }    
00124 
00125 
00126 
00127 void 
00128 Timer::Print(OPS_Stream &s) const
00129 {
00130 #ifdef _WIN32
00131     // fill in later
00132 #else        
00133     long clktck = CLK_TCK;
00134     double Real = (t2-t1)/(double) clktck;
00135     double CPU  = (tmsend.tms_utime - tmsstart.tms_utime)/(double) clktck;
00136     double System  = (tmsend.tms_stime - tmsstart.tms_stime)/(double) clktck;
00137     s << endln;
00138     s << "TIME(sec) Real: " << Real << "  CPU: " << CPU;
00139     s << "   System: " << System << endln;
00140 
00141     int r2no = r2us->ru_minflt;
00142     int r2yes = r2us->ru_majflt;
00143     int r1no = r1us->ru_minflt;
00144     int r1yes = r1us->ru_majflt;
00145     int r1page = r1no + r1yes;
00146     int r2page = r2no + r2yes;
00147     
00148     s << "PAGE FAULTS: " << r2page-r1page << " (NO i/o: ";
00149     s << r2no-r1no << " YES i/o " << r2yes-r1yes << ") ";
00150 
00151     r2no = r2us->ru_nivcsw;
00152     r2yes = r2us->ru_nvcsw;
00153     r1no = r1us->ru_nivcsw;
00154     r1yes = r1us->ru_nvcsw;
00155     r1page = r1no + r1yes;
00156     r2page = r2no + r2yes;
00157 
00158     s << "CONTEXT SWITCHES " << r2page-r1page << " (Invol: ";
00159     s << r2no-r1no << " Voluntary " << r2yes-r1yes << ") ";
00160 
00161     r2no = r2us->ru_nswap;
00162     r1no = r1us->ru_nswap;
00163     r2yes = r2us->ru_maxrss;
00164     
00165     s << "Swapped: " << r2no-r1no << " Max Res Set Size: " << r2yes << endln;
00166     s << endln;
00167 #endif    
00168 }    
00169 
00170 OPS_Stream &operator<<(OPS_Stream &s, const Timer &E)
00171 {
00172     E.Print(s);
00173     return s;
00174 }
00175 
00176 

Generated on Mon Oct 23 15:05:31 2006 for OpenSees by doxygen 1.5.0