Home | History | Annotate | Download | only in gold
      1 // timer.h -- helper class for time accounting   -*- C++ -*-
      2 
      3 // Copyright (C) 2009-2016 Free Software Foundation, Inc.
      4 // Written by Rafael Avila de Espindola <espindola (at) google.com>.
      5 
      6 // This file is part of gold.
      7 
      8 // This program is free software; you can redistribute it and/or modify
      9 // it under the terms of the GNU General Public License as published by
     10 // the Free Software Foundation; either version 3 of the License, or
     11 // (at your option) any later version.
     12 
     13 // This program is distributed in the hope that it will be useful,
     14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
     15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     16 // GNU General Public License for more details.
     17 
     18 // You should have received a copy of the GNU General Public License
     19 // along with this program; if not, write to the Free Software
     20 // Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
     21 // MA 02110-1301, USA.
     22 
     23 #ifndef GOLD_TIMER_H
     24 #define GOLD_TIMER_H
     25 
     26 namespace gold
     27 {
     28 
     29 class Timer
     30 {
     31  public:
     32   // Used to report time statistics. All fields are in milliseconds.
     33   struct TimeStats
     34   {
     35     /* User time in this process.  */
     36     long user;
     37 
     38     /* System time in this process.  */
     39     long sys;
     40 
     41     /* Wall clock time.  */
     42     long wall;
     43   };
     44 
     45   Timer();
     46 
     47   // Return the stats since start was called.
     48   TimeStats
     49   get_elapsed_time();
     50 
     51   // Return the stats for pass N (0 <= N <= 2).
     52   TimeStats
     53   get_pass_time(int n);
     54 
     55   // Start counting the time.
     56   void
     57   start();
     58 
     59   // Record the time used by pass N (0 <= N <= 2).
     60   void
     61   stamp(int n);
     62 
     63  private:
     64   // This class cannot be copied.
     65   Timer(const Timer&);
     66   Timer& operator=(const Timer&);
     67 
     68   // Write the current time information.
     69   static void
     70   get_time(TimeStats* now);
     71 
     72   // The time of the last call to start.
     73   TimeStats start_time_;
     74 
     75   // Times for each pass.
     76   TimeStats pass_times_[3];
     77 };
     78 
     79 }
     80 #endif
     81