documentation: Update information about ir_graph.
[libfirm] / include / libfirm / timing.h
1 /*
2  * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
3  *
4  * This file is part of libFirm.
5  *
6  * This file may be distributed and/or modified under the terms of the
7  * GNU General Public License version 2 as published by the Free Software
8  * Foundation and appearing in the file LICENSE.GPL included in the
9  * packaging of this file.
10  *
11  * Licensees holding valid libFirm Professional Edition licenses may use
12  * this file in accordance with the libFirm Commercial License.
13  * Agreement provided with the Software.
14  *
15  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE.
18  */
19
20 /**
21  * @file
22  * @brief    platform neutral timing utilities
23  */
24 #ifndef FIRM_TIMING_H
25 #define FIRM_TIMING_H
26
27 #include <stdlib.h>
28
29 #include "begin.h"
30
31 /**
32  * A timer
33  *
34  * A timer can be started/stopped multiple times and measures the (wallclock)
35  * time spent between start and stop calls.
36  */
37 typedef struct ir_timer_t ir_timer_t;
38
39 /**
40  * Switch to real-time scheduling.
41  * This shall make measurements more precise.
42  * @note Does not work for all operating systems.
43  * @note You could need special user privileges.
44  * @return 0 on success, else UNIX error code.
45  */
46 FIRM_API int ir_timer_enter_high_priority(void);
47
48 /**
49  * Leave the high priority mode.
50  * @see ir_timer_enter_high_priority()
51  * @return 0 on success, else UNIX error code.
52  */
53 FIRM_API int ir_timer_leave_high_priority(void);
54
55 /**
56  * Returns the amount of bytes allocated on the heap.
57  * @return The number of bytes allocated on the heap.
58  */
59 FIRM_API size_t ir_get_heap_used_bytes(void);
60
61 /**
62  * Create a new timer
63  * @return The timer.
64  * @see #ir_timer_t
65  */
66 FIRM_API ir_timer_t *ir_timer_new(void);
67
68 /**
69  * free memory occupied by a timer
70  * @param timer The timer
71  */
72 FIRM_API void ir_timer_free(ir_timer_t *timer);
73
74 /**
75  * Start a timer.
76  * @param timer The timer.
77  */
78 FIRM_API void ir_timer_start(ir_timer_t *timer);
79
80 /**
81  * Reset a timer and start it.
82  * @param timer The timer.
83  */
84 FIRM_API void ir_timer_reset_and_start(ir_timer_t *timer);
85
86 /**
87  * Reset a timer.
88  * @param timer The timer.
89  */
90 FIRM_API void ir_timer_reset(ir_timer_t *timer);
91
92 /**
93  * Stop a timer.
94  * Stopping a stopped timer has no effect.
95  * @param timer The timer.
96  */
97 FIRM_API void ir_timer_stop(ir_timer_t *timer);
98
99 /**
100  * Set currently running timer as parent to @p timer
101  */
102 FIRM_API void ir_timer_init_parent(ir_timer_t *timer);
103
104 /**
105  * Push a timer of the timer stack. This automatically
106  * stop the previous timer on tos and start the new one.
107  *
108  * @param timer   The timer to push on stack.
109  * @return non-zero on succes, zero if the timer is already on the stack.
110  */
111 FIRM_API void ir_timer_push(ir_timer_t *timer);
112
113 /**
114  * Pop the current timer. This automatically stops it and
115  * start the timer that is now on the stack.
116  * @return the popped timer
117  */
118 FIRM_API void ir_timer_pop(ir_timer_t *timer);
119
120 /**
121  * Returns the number of milliseconds, the timer has elapsed.
122  * @param timer The timer.
123  * @return The number of milliseconds the timer is (was) running.
124  */
125 FIRM_API unsigned long ir_timer_elapsed_msec(const ir_timer_t *timer);
126
127 /**
128  * Returns the number of microseconds, the timer has elapsed.
129  * @param timer The timer.
130  * @return The number of milliseconds the timer is (was) running.
131  */
132 FIRM_API unsigned long ir_timer_elapsed_usec(const ir_timer_t *timer);
133
134 /**
135  * Returns the number of seconds, the timer has elapsed.
136  */
137 FIRM_API double ir_timer_elapsed_sec(const ir_timer_t *timer);
138
139 #include "end.h"
140
141 #endif