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@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