1  /* Copyright (C) 2021-2023 Free Software Foundation, Inc.
       2     Contributed by Oracle.
       3  
       4     This file is part of GNU Binutils.
       5  
       6     This program is free software; you can redistribute it and/or modify
       7     it under the terms of the GNU General Public License as published by
       8     the Free Software Foundation; either version 3, or (at your option)
       9     any later version.
      10  
      11     This program is distributed in the hope that it will be useful,
      12     but WITHOUT ANY WARRANTY; without even the implied warranty of
      13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14     GNU General Public License for more details.
      15  
      16     You should have received a copy of the GNU General Public License
      17     along with this program; if not, write to the Free Software
      18     Foundation, 51 Franklin Street - Fifth Floor, Boston,
      19     MA 02110-1301, USA.  */
      20  
      21  #ifndef _STOPWATCH_
      22  #define _STOPWATCH_
      23  
      24  #include <time.h>
      25  #include <sys/time.h>
      26  
      27  typedef int processorid_t;
      28  typedef long long hrtime_t;
      29  typedef struct timespec timespec_t;
      30  extern hrtime_t gethrtime ();
      31  extern hrtime_t gethrvtime ();
      32  
      33  extern double testtime;
      34  char *prtime (time_t *t);
      35  char *prdelta (struct timeval t);
      36  int wlog (char *, char *);
      37  int whrlog (hrtime_t delta, char *, char *);
      38  int whrvlog (hrtime_t delta, hrtime_t vdelta, char *, char *);
      39  
      40  typedef struct stopwatch
      41  {
      42    double sum;       /* in nanoseconds */
      43    double sumsq;     /* in (nanoseconds ** 2) */
      44    double last;      /* in nanoseconds */
      45    hrtime_t begin;
      46    hrtime_t start;
      47    hrtime_t tempus;
      48    hrtime_t delta;
      49    hrtime_t min;
      50    hrtime_t max;
      51    int count;
      52    char *name;
      53  } stopwatch_t;
      54  
      55  stopwatch_t *stpwtch_alloc (char *, int);
      56  void stpwtch_calibrate ();
      57  void stpwtch_start (stopwatch_t *);
      58  void stpwtch_stop (stopwatch_t *);
      59  void stpwtch_print (stopwatch_t *);
      60  
      61  #endif