70e609c9c0bc7c1f0bd829db2e0371fd760caa38
[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  * @version  $Id: tv.h 17143 2008-01-02 20:56:33Z beck $
24  */
25 #ifndef FIRM_TIMING_H
26 #define FIRM_TIMING_H
27
28 #include <stdlib.h>
29
30 typedef struct _ir_timer_t ir_timer_t;
31
32 /**
33  * Switch to real-time scheduling.
34  * This shall make measurements more precise.
35  * @note Does not work for all operating systems.
36  * @note You could need special user privileges.
37  * @return 0 on success, else UNIX error code.
38  */
39 int ir_timer_enter_high_priority(void);
40
41 /**
42  * Leave the high priority mode.
43  * @see ir_timer_enter_high_priority()
44  * @return 0 on success, else UNIX error code.
45  */
46 int ir_timer_leave_high_priority(void);
47
48 /**
49  * Get the amount of bytes allocated on the heap.
50  * @return The number of bytes allocated on the heap.
51  */
52 size_t ir_get_heap_used_bytes(void);
53
54 /**
55  * Create a new timer
56  * @return The timer.
57  */
58 ir_timer_t *ir_timer_new(void);
59
60 /**
61  * free memory occupied by a timer
62  * @param timer The timer
63  */
64 void ir_timer_free(ir_timer_t *timer);
65
66 /**
67  * Start a timer.
68  * @param timer The timer.
69  */
70 void ir_timer_start(ir_timer_t *timer);
71
72 /**
73  * Reset a timer and start it.
74  * @param timer The timer.
75  */
76 void ir_timer_reset_and_start(ir_timer_t *timer);
77
78 /**
79  * Reset a timer.
80  * @param timer The timer.
81  */
82 void ir_timer_reset(ir_timer_t *timer);
83
84 /**
85  * Stop a timer.
86  * Stopping a stopped timer has no effect.
87  * @param timer The timer.
88  */
89 void ir_timer_stop(ir_timer_t *timer);
90
91 /**
92  * Push a timer of the timer stack. This automatically
93  * stop the previous timer on tos and start the new one.
94  *
95  * @param timer   The timer to push on stack.
96  * @return non-zero on succes, zero if the timer is already on the stack.
97  */
98 int ir_timer_push(ir_timer_t *timer);
99
100 /**
101  * Pop the current timer. This automatically stops it and
102  * start the timer that is now on the stack.
103  * @return the popped timer
104  */
105 ir_timer_t *ir_timer_pop(void);
106
107 /**
108  * Get the number of milliseconds, the timer has elapsed.
109  * @param timer The timer.
110  * @return The number of milliseconds the timer is (was) running.
111  */
112 unsigned long ir_timer_elapsed_msec(const ir_timer_t *timer);
113
114 /**
115  * Get the number of microseconds, the timer has elapsed.
116  * @param timer The timer.
117  * @return The number of milliseconds the timer is (was) running.
118  */
119 unsigned long ir_timer_elapsed_usec(const ir_timer_t *timer);
120
121 /**
122  * Get name of given timer.
123  * @param timer The timer.
124  * @return The name of the timer.
125  */
126 const char *ir_timer_get_name(const ir_timer_t *timer);
127
128 /**
129  * Get description of given timer.
130  * @param timer The timer.
131  * @return The description of the timer.
132  */
133 const char *ir_timer_get_description(const ir_timer_t *timer);
134
135 #endif