Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /* Return time used so far, in microseconds.
  2.    Copyright (C) 1994, 1999, 2002 Free Software Foundation, Inc.
  3.  
  4. This file is part of the libiberty library.
  5. Libiberty is free software; you can redistribute it and/or
  6. modify it under the terms of the GNU Library General Public
  7. License as published by the Free Software Foundation; either
  8. version 2 of the License, or (at your option) any later version.
  9.  
  10. Libiberty is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13. Library General Public License for more details.
  14.  
  15. You should have received a copy of the GNU Library General Public
  16. License along with libiberty; see the file COPYING.LIB.  If
  17. not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
  18. Boston, MA 02110-1301, USA.  */
  19.  
  20. #include "config.h"
  21.  
  22. #include "ansidecl.h"
  23. #include "libiberty.h"
  24.  
  25. /* On some systems (such as WindISS), you must include <sys/types.h>
  26.    to get the definition of "time_t" before you include <time.h>.  */
  27. #include <sys/types.h>
  28.  
  29. /* There are several ways to get elapsed execution time; unfortunately no
  30.    single way is available for all host systems, nor are there reliable
  31.    ways to find out which way is correct for a given host. */
  32.  
  33. #ifdef TIME_WITH_SYS_TIME
  34. # include <sys/time.h>
  35. # include <time.h>
  36. #else
  37. # if HAVE_SYS_TIME_H
  38. #  include <sys/time.h>
  39. # else
  40. #  ifdef HAVE_TIME_H
  41. #   include <time.h>
  42. #  endif
  43. # endif
  44. #endif
  45.  
  46. #if defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H)
  47. #include <sys/resource.h>
  48. #endif
  49.  
  50. #ifdef HAVE_TIMES
  51. #ifdef HAVE_SYS_PARAM_H
  52. #include <sys/param.h>
  53. #endif
  54. #include <sys/times.h>
  55. #endif
  56.  
  57. #ifdef HAVE_UNISTD_H
  58. #include <unistd.h>
  59. #endif
  60.  
  61. /* This is a fallback; if wrong, it will likely make obviously wrong
  62.    results. */
  63.  
  64. #ifndef CLOCKS_PER_SEC
  65. #define CLOCKS_PER_SEC 1
  66. #endif
  67.  
  68. #ifdef _SC_CLK_TCK
  69. #define GNU_HZ  sysconf(_SC_CLK_TCK)
  70. #else
  71. #ifdef HZ
  72. #define GNU_HZ  HZ
  73. #else
  74. #ifdef CLOCKS_PER_SEC
  75. #define GNU_HZ  CLOCKS_PER_SEC
  76. #endif
  77. #endif
  78. #endif
  79.  
  80. /*
  81.  
  82. @deftypefn Replacement long get_run_time (void)
  83.  
  84. Returns the time used so far, in microseconds.  If possible, this is
  85. the time used by this process, else it is the elapsed time since the
  86. process started.
  87.  
  88. @end deftypefn
  89.  
  90. */
  91.  
  92. long
  93. get_run_time (void)
  94. {
  95. #if defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H)
  96.   struct rusage rusage;
  97.  
  98.   getrusage (0, &rusage);
  99.   return (rusage.ru_utime.tv_sec * 1000000 + rusage.ru_utime.tv_usec
  100.           + rusage.ru_stime.tv_sec * 1000000 + rusage.ru_stime.tv_usec);
  101. #else /* ! HAVE_GETRUSAGE */
  102. #ifdef HAVE_TIMES
  103.   struct tms tms;
  104.  
  105.   times (&tms);
  106.   return (tms.tms_utime + tms.tms_stime) * (1000000 / GNU_HZ);
  107. #else /* ! HAVE_TIMES */
  108.   /* Fall back on clock and hope it's correctly implemented. */
  109.   const long clocks_per_sec = CLOCKS_PER_SEC;
  110.   if (clocks_per_sec <= 1000000)
  111.     return clock () * (1000000 / clocks_per_sec);
  112.   else
  113.     return clock () / clocks_per_sec;
  114. #endif  /* HAVE_TIMES */
  115. #endif  /* HAVE_GETRUSAGE */
  116. }
  117.