| /*========================================================================= |
| |
| Copyright (c) 2007, Los Alamos National Security, LLC |
| |
| All rights reserved. |
| |
| Copyright 2007. Los Alamos National Security, LLC. |
| This software was produced under U.S. Government contract DE-AC52-06NA25396 |
| for Los Alamos National Laboratory (LANL), which is operated by |
| Los Alamos National Security, LLC for the U.S. Department of Energy. |
| The U.S. Government has rights to use, reproduce, and distribute this software. |
| NEITHER THE GOVERNMENT NOR LOS ALAMOS NATIONAL SECURITY, LLC MAKES ANY WARRANTY, |
| EXPRESS OR IMPLIED, OR ASSUMES ANY LIABILITY FOR THE USE OF THIS SOFTWARE. |
| If software is modified to produce derivative works, such modified software |
| should be clearly marked, so as not to confuse it with the version available |
| from LANL. |
| |
| Additionally, redistribution and use in source and binary forms, with or |
| without modification, are permitted provided that the following conditions |
| are met: |
| - Redistributions of source code must retain the above copyright notice, |
| this list of conditions and the following disclaimer. |
| - Redistributions in binary form must reproduce the above copyright notice, |
| this list of conditions and the following disclaimer in the documentation |
| and/or other materials provided with the distribution. |
| - Neither the name of Los Alamos National Security, LLC, Los Alamos National |
| Laboratory, LANL, the U.S. Government, nor the names of its contributors |
| may be used to endorse or promote products derived from this software |
| without specific prior written permission. |
| |
| THIS SOFTWARE IS PROVIDED BY LOS ALAMOS NATIONAL SECURITY, LLC AND CONTRIBUTORS |
| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
| THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| ARE DISCLAIMED. IN NO EVENT SHALL LOS ALAMOS NATIONAL SECURITY, LLC OR |
| CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
| OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
| WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
| OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
| ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| |
| =========================================================================*/ |
| |
| // .NAME Timer - create timer for program execution |
| // |
| // .SECTION Description |
| // The Timer class allows for easy timing of the program. The timer |
| // tracks real (clock) time elapsed, user time, and system time. |
| |
| #ifndef TIMER_H |
| #define TIMER_H |
| |
| #ifdef __sgi |
| // make sure this is defined for BSD time routines |
| #define _BSD_TYPES |
| // fix a glitch in ANSI compatibility with SGI headers |
| #define _STAMP_T |
| #endif |
| |
| #include <unistd.h> |
| #include <sys/types.h> |
| #include <sys/times.h> |
| #include <sys/time.h> |
| |
| #ifdef __sgi |
| // fix a glitch in ANSI compatibility with SGI headers |
| #undef _STAMP_T |
| #endif |
| |
| |
| class Timer |
| { |
| public: |
| Timer(); // Constructor |
| ~Timer(); // Destructor |
| void clear(); // Set all accumulated times to 0 |
| void start(); // Start timer |
| void stop(); // Stop timer |
| |
| double clock_time(); // Report clock time accumulated in seconds |
| double user_time(); // Report user time accumlated in seconds |
| double system_time(); // Report system time accumulated in seconds |
| double cpu_time() |
| { |
| // Report total cpu_time which is just user_time + system_time |
| return ( user_time() + system_time() ); |
| } |
| |
| double calibration; // Calibration time: time it takes to |
| // get in and out of timer functions |
| private: |
| short timer_state; // State of timer, either on or off |
| long cpu_speed; // CPU speed for times() call |
| |
| unsigned long last_secs; // Clock seconds value when the |
| // timer was last started |
| long last_usecs; // Clock useconds value when the |
| // timer was last started |
| unsigned long last_user_time; // User time when timer was last started |
| unsigned long last_system_time; // System time when timer was last started |
| |
| long current_secs; // Current accumulated clock seconds |
| long current_usecs; // Current accumulated clock useconds |
| long current_user_time; // Current accumulated user time |
| long current_system_time; // Current accumulated system time |
| |
| struct tms tmsbuf; // Values from call to times |
| struct timeval tvbuf; // Values from call to gettimeofday |
| struct timezone tzbuf; // Timezone values from gettimeofday |
| // These values aren't used for anything |
| }; |
| |
| #endif |