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