1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Timing variables for measuring compiler performance. 205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 305436638acc7c010349a69c3395f1a57c642dc62Ying Wang Copyright (C) 2000, 2002, 2004, 2009-2012 Free Software Foundation, 405436638acc7c010349a69c3395f1a57c642dc62Ying Wang Inc. 505436638acc7c010349a69c3395f1a57c642dc62Ying Wang 6cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Contributed by Alex Samuel <samuel@codesourcery.com> 7cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 805436638acc7c010349a69c3395f1a57c642dc62Ying Wang This program is free software: you can redistribute it and/or modify 9cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project it under the terms of the GNU General Public License as published by 1005436638acc7c010349a69c3395f1a57c642dc62Ying Wang the Free Software Foundation, either version 3 of the License, or 11cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project (at your option) any later version. 12cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 13cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project This program is distributed in the hope that it will be useful, 14cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project but WITHOUT ANY WARRANTY; without even the implied warranty of 15cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project GNU General Public License for more details. 17cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 18cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project You should have received a copy of the GNU General Public License 1905436638acc7c010349a69c3395f1a57c642dc62Ying Wang along with this program. If not, see <http://www.gnu.org/licenses/>. */ 20cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 21cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#ifndef GCC_TIMEVAR_H 22cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define GCC_TIMEVAR_H 23cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 24cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Timing variables are used to measure elapsed time in various 25cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project portions of the compiler. Each measures elapsed user, system, and 26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project wall-clock time, as appropriate to and supported by the host 27cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project system. 28cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 29cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Timing variables are defined using the DEFTIMEVAR macro in 30cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project timevar.def. Each has an enumeral identifier, used when referring 31cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project to the timing variable in code, and a character string name. 32cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 33cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Timing variables can be used in two ways: 34cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project - On the timing stack, using timevar_push and timevar_pop. 36cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Timing variables may be pushed onto the stack; elapsed time is 37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project attributed to the topmost timing variable on the stack. When 38cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project another variable is pushed on, the previous topmost variable is 39cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project `paused' until the pushed variable is popped back off. 40cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 41cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project - As a standalone timer, using timevar_start and timevar_stop. 42cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project All time elapsed between the two calls is attributed to the 43cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project variable. 44cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project*/ 45cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 46cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* This structure stores the various varieties of time that can be 47cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project measured. Times are stored in seconds. The time may be an 48cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project absolute time or a time difference; in the former case, the time 49cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project base is undefined, except that the difference between two times 50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project produces a valid time difference. */ 51cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 52cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstruct timevar_time_def 53cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* User time in this process. */ 55cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project float user; 56cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 57cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* System time (if applicable for this host platform) in this 58cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project process. */ 59cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project float sys; 60cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 61cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Wall clock time. */ 62cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project float wall; 63cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}; 64cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 65cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* An enumeration of timing variable identifiers. Constructed from 66cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project the contents of timevar.def. */ 67cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 68cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define DEFTIMEVAR(identifier__, name__) \ 69cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project identifier__, 70cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttypedef enum 71cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 72cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "timevar.def" 73cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project TIMEVAR_LAST 74cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 75cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projecttimevar_id_t; 76cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#undef DEFTIMEVAR 77cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 78cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern void init_timevar (void); 79cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern void timevar_push (timevar_id_t); 80cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern void timevar_pop (timevar_id_t); 81cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern void timevar_start (timevar_id_t); 82cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern void timevar_stop (timevar_id_t); 83cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern void timevar_get (timevar_id_t, struct timevar_time_def *); 84cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern void timevar_print (FILE *); 85cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 86cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Provided for backward compatibility. */ 87cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern long get_run_time (void); 88cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern void print_time (const char *, long); 89cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 90cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern int timevar_report; 91cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 92cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#endif /* ! GCC_TIMEVAR_H */ 93