LCOV - code coverage report
Current view: top level - util - CpuTimer.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 10 44 22.7 %
Date: 2020-06-30 00:58:45 Functions: 1 4 25.0 %
Branches: 0 2 0.0 %

           Branch data     Line data    Source code
       1                 :            : #include <cstdio>
       2                 :            : #include "CpuTimer.hpp"
       3                 :            : 
       4                 :            : #include "CubitMessage.hpp"
       5                 :            : 
       6                 :            : // Added by Cat for WIN32 port
       7                 :            : #ifndef _WIN32
       8                 :            :   #include <sys/param.h>
       9                 :            :   #include <sys/times.h>
      10                 :            : #endif
      11                 :            : 
      12                 :            : 
      13                 :            : #include <time.h>
      14                 :            : #ifdef SOLARIS
      15                 :            : #include <unistd.h>
      16                 :            : #endif
      17                 :            : 
      18                 :            : #ifndef _WIN32
      19                 :            : #ifndef HZ
      20                 :            : #ifdef CLK_TCK
      21                 :            : #define HZ CLK_TCK
      22                 :            : #else
      23                 :            : #define HZ 60
      24                 :            : #endif
      25                 :            : #endif
      26                 :            : #else
      27                 :            : #define HZ CLOCKS_PER_SEC
      28                 :            : #endif
      29                 :            : 
      30                 :            : 
      31                 :            : 
      32                 :            : // Added by Cat for WIN32 port
      33                 :            : #ifdef _WIN32
      34                 :            : struct tms {
      35                 :            :            clock_t tms_utime;           /* user time */
      36                 :            :            clock_t tms_stime;           /* system time */
      37                 :            :            clock_t tms_cutime;          /* user time, children */
      38                 :            :            clock_t tms_cstime;          /* system time, children */
      39                 :            :       };
      40                 :            : 
      41                 :            :   #include <windows.h>
      42                 :            : 
      43                 :            : #endif
      44                 :            : 
      45                 :            : 
      46                 :       5574 : CpuTimer::CpuTimer()
      47                 :            : {
      48                 :            :   tms current;
      49                 :            : 
      50                 :            :   // Added by Cat for WIN32 port
      51                 :            : #ifdef _WIN32
      52                 :            :   nt_times(&current);
      53                 :            :   wallTimeInitial = clock();
      54                 :            :   wallTime = wallTimeInitial;
      55                 :            : #else
      56                 :       5574 :   gettimeofday(&wallTimeInitial, NULL);
      57                 :       5574 :   wallTime = wallTimeInitial;
      58                 :       5574 :   times( &current );
      59                 :            : #endif
      60                 :            :   
      61                 :            :   // Store current value of cpu time
      62                 :       5574 :   cpu = current.tms_utime +
      63                 :       5574 :         current.tms_stime +
      64                 :       5574 :         current.tms_cutime +
      65                 :       5574 :         current.tms_cstime;
      66                 :       5574 :   cpuInitial = cpu;
      67                 :       5574 : }
      68                 :            : 
      69                 :            : // Return time values
      70                 :            : 
      71                 :            : double
      72                 :          0 : CpuTimer::cpu_secs()
      73                 :            : {
      74                 :            :   tms current;
      75                 :            : 
      76                 :            :   // Added by Cat for WIN32 port
      77                 :            : #ifdef _WIN32
      78                 :            :   nt_times(&current);    
      79                 :            : #else
      80                 :          0 :   times( &current );
      81                 :            : #endif
      82                 :            :   
      83                 :          0 :   time_t cpu_now = current.tms_utime +
      84                 :          0 :     current.tms_stime +
      85                 :          0 :     current.tms_cutime +
      86                 :          0 :     current.tms_cstime;
      87                 :          0 :   time_t delta = cpu_now - cpu;
      88                 :          0 :   cpu   = cpu_now;
      89                 :            : #ifdef _WIN32
      90                 :            :   if( delta == 0 )
      91                 :            :      delta = 1;
      92                 :            : #endif
      93                 :          0 :   return (double) delta / HZ;
      94                 :            : }
      95                 :            : 
      96                 :            : double
      97                 :          0 : CpuTimer::clock_secs()
      98                 :            : {
      99                 :            :   double elapsed_time;
     100                 :            : #ifdef _WIN32
     101                 :            :   clock_t current;
     102                 :            :   current = clock();
     103                 :            :   elapsed_time = double( current - wallTime );
     104                 :            :   elapsed_time = elapsed_time / HZ;
     105                 :            : 
     106                 :            :   wallTime = current;
     107                 :            : #else
     108                 :            :   timeval current;
     109                 :          0 :   gettimeofday( &current, NULL );
     110                 :          0 :   double prev_time = wallTime.tv_sec;
     111                 :          0 :   prev_time += double( wallTime.tv_usec ) / 1000000.0;
     112                 :            :   
     113                 :          0 :   elapsed_time = current.tv_sec;
     114                 :          0 :   elapsed_time += double( current.tv_usec ) / 1000000.0;
     115                 :          0 :   elapsed_time = elapsed_time - prev_time;
     116                 :            :   
     117                 :          0 :   wallTime = current;
     118                 :            : #endif
     119                 :            :   
     120                 :          0 :   return elapsed_time;
     121                 :            : }
     122                 :            : 
     123                 :            : double
     124                 :          0 : CpuTimer::elapsed(bool wall_time)
     125                 :            : {
     126         [ #  # ]:          0 :   if( wall_time )
     127                 :            :   {
     128                 :            :     double elapsed;
     129                 :            : #ifdef _WIN32
     130                 :            :     clock_t current;
     131                 :            :     current = clock();
     132                 :            :     elapsed = double( current - wallTimeInitial);
     133                 :            :     elapsed = elapsed / HZ;
     134                 :            : #else    
     135                 :            :     double current_time;
     136                 :            :     timeval current;
     137                 :          0 :     gettimeofday( &current, NULL );
     138                 :            :     double initial_time;
     139                 :          0 :     initial_time = wallTimeInitial.tv_sec;
     140                 :          0 :     initial_time += double(wallTimeInitial.tv_usec) / 1000000.0;
     141                 :          0 :     current_time = current.tv_sec;
     142                 :          0 :     current_time += double( current.tv_usec ) / 1000000.0;
     143                 :            :     
     144                 :          0 :     elapsed = current_time - initial_time;
     145                 :            : #endif
     146                 :          0 :     return elapsed;
     147                 :            :   }
     148                 :            :   else
     149                 :            :   {
     150                 :            :     tms current;
     151                 :            : 
     152                 :            : // Added by Cat for WIN32 port
     153                 :            : #ifdef _WIN32
     154                 :            :     nt_times(&current);    
     155                 :            : #else
     156                 :          0 :     times( &current );
     157                 :            : #endif
     158                 :            : // Store totals
     159                 :            :   
     160                 :          0 :     time_t cpu_now = current.tms_utime +
     161                 :          0 :         current.tms_stime +
     162                 :          0 :         current.tms_cutime +
     163                 :          0 :         current.tms_cstime;
     164                 :          0 :     time_t elapsed = cpu_now - cpuInitial;
     165                 :          0 :     return (double) elapsed / HZ;
     166                 :            :   }
     167                 :            : }
     168                 :            : 
     169                 :            : 
     170                 :            : // Added by Cat for WIN32 port
     171                 :            : #ifdef _WIN32
     172                 :            : 
     173                 :            : void CpuTimer::nt_times(tms *sys)
     174                 :            : {  
     175                 :            :   HANDLE current_process = GetCurrentProcess();
     176                 :            : 
     177                 :            :   FILETIME ftCreation, ftExit, ftKernel, ftUser;  
     178                 :            :   GetProcessTimes(current_process, &ftCreation, &ftExit, &ftKernel, &ftUser);  
     179                 :            : 
     180                 :            :   //kernel and user times are amounts of time rather than an actual time period. 
     181                 :            :   //The value in the FILETIME structure is expressed in 100-nanosecond units.
     182                 :            :   //Divide by 10 million to convert to seconds.
     183                 :            : 
     184                 :            :   __int64 i64 = *((__int64 *) &ftKernel);  
     185                 :            :   double dw_kernel = (i64 / 10000000.0);
     186                 :            : 
     187                 :            :   i64 = *((__int64 *) &ftUser);
     188                 :            :   double dw_user = (i64 / 10000000.0);
     189                 :            : 
     190                 :            :         sys->tms_utime = dw_user*HZ;
     191                 :            :         sys->tms_stime = dw_kernel*HZ;
     192                 :            :         sys->tms_cutime = 0;         
     193                 :            :         sys->tms_cstime = 0;
     194                 :            :         //PRINT_DEBUG( CUBIT_DEBUG_3,"clock returned %d\n", sys->tms_stime );  
     195                 :            : }
     196                 :            : #endif

Generated by: LCOV version 1.11