2 * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
4 * This file is part of libFirm.
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.
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.
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
22 * @brief platform neutral timing utilities
23 * @version $Id: tv.h 17143 2008-01-02 20:56:33Z beck $
32 typedef struct _ir_timer_t ir_timer_t;
35 * Switch to real-time scheduling.
36 * This shall make measurements more precise.
37 * @note Does not work for all operating systems.
38 * @note You could need special user privileges.
39 * @return 0 on success, else UNIX error code.
41 FIRM_API int ir_timer_enter_high_priority(void);
44 * Leave the high priority mode.
45 * @see ir_timer_enter_high_priority()
46 * @return 0 on success, else UNIX error code.
48 FIRM_API int ir_timer_leave_high_priority(void);
51 * Get the amount of bytes allocated on the heap.
52 * @return The number of bytes allocated on the heap.
54 FIRM_API size_t ir_get_heap_used_bytes(void);
60 FIRM_API ir_timer_t *ir_timer_new(void);
63 * free memory occupied by a timer
64 * @param timer The timer
66 FIRM_API void ir_timer_free(ir_timer_t *timer);
70 * @param timer The timer.
72 FIRM_API void ir_timer_start(ir_timer_t *timer);
75 * Reset a timer and start it.
76 * @param timer The timer.
78 FIRM_API void ir_timer_reset_and_start(ir_timer_t *timer);
82 * @param timer The timer.
84 FIRM_API void ir_timer_reset(ir_timer_t *timer);
88 * Stopping a stopped timer has no effect.
89 * @param timer The timer.
91 FIRM_API void ir_timer_stop(ir_timer_t *timer);
94 * Push a timer of the timer stack. This automatically
95 * stop the previous timer on tos and start the new one.
97 * @param timer The timer to push on stack.
98 * @return non-zero on succes, zero if the timer is already on the stack.
100 FIRM_API int ir_timer_push(ir_timer_t *timer);
103 * Pop the current timer. This automatically stops it and
104 * start the timer that is now on the stack.
105 * @return the popped timer
107 FIRM_API ir_timer_t *ir_timer_pop(void);
110 * Get the number of milliseconds, the timer has elapsed.
111 * @param timer The timer.
112 * @return The number of milliseconds the timer is (was) running.
114 FIRM_API unsigned long ir_timer_elapsed_msec(const ir_timer_t *timer);
117 * Get the number of microseconds, the timer has elapsed.
118 * @param timer The timer.
119 * @return The number of milliseconds the timer is (was) running.
121 FIRM_API unsigned long ir_timer_elapsed_usec(const ir_timer_t *timer);
124 * Get name of given timer.
125 * @param timer The timer.
126 * @return The name of the timer.
128 FIRM_API const char *ir_timer_get_name(const ir_timer_t *timer);
131 * Get description of given timer.
132 * @param timer The timer.
133 * @return The description of the timer.
135 FIRM_API const char *ir_timer_get_description(const ir_timer_t *timer);