1 /* Copyright (c) 2008 MySQL AB, 2009 Sun Microsystems, Inc. 2 Use is subject to license terms. 3 4 This program is free software; you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation; version 2 of the License. 7 8 This program is distributed in the hope that it will be useful, 9 but WITHOUT ANY WARRANTY; without even the implied warranty of 10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 GNU General Public License for more details. 12 13 You should have received a copy of the GNU General Public License 14 along with this program; if not, write to the Free Software 15 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ 16 17 /* 18 rdtsc3 -- multi-platform timer code 19 pgulutzan@mysql.com, 2005-08-29 20 modified 2008-11-02 21 */ 22 23 #ifndef MY_RDTSC_H 24 #define MY_RDTSC_H 25 26 /** 27 Characteristics of a timer. 28 */ 29 struct my_timer_unit_info 30 { 31 /** Routine used for the timer. */ 32 ulonglong routine; 33 /** Overhead of the timer. */ 34 ulonglong overhead; 35 /** Frequency of the timer. */ 36 ulonglong frequency; 37 /** Resolution of the timer. */ 38 ulonglong resolution; 39 }; 40 41 /** 42 Characteristics of all the supported timers. 43 @sa my_timer_init(). 44 */ 45 struct my_timer_info 46 { 47 /** Characteristics of the cycle timer. */ 48 struct my_timer_unit_info cycles; 49 /** Characteristics of the nanosecond timer. */ 50 struct my_timer_unit_info nanoseconds; 51 /** Characteristics of the microsecond timer. */ 52 struct my_timer_unit_info microseconds; 53 /** Characteristics of the millisecond timer. */ 54 struct my_timer_unit_info milliseconds; 55 /** Characteristics of the tick timer. */ 56 struct my_timer_unit_info ticks; 57 }; 58 59 typedef struct my_timer_info MY_TIMER_INFO; 60 61 C_MODE_START 62 63 /** 64 A cycle timer. 65 @return the current timer value, in cycles. 66 */ 67 ulonglong my_timer_cycles(void); 68 69 /** 70 A namoseconds timer. 71 @return the current timer value, in nanoseconds. 72 */ 73 ulonglong my_timer_nanoseconds(void); 74 75 /** 76 A microseconds timer. 77 @return the current timer value, in microseconds. 78 */ 79 ulonglong my_timer_microseconds(void); 80 81 /** 82 A millisecond timer. 83 @return the current timer value, in milliseconds. 84 */ 85 ulonglong my_timer_milliseconds(void); 86 87 /** 88 A ticks timer. 89 @return the current timer value, in ticks. 90 */ 91 ulonglong my_timer_ticks(void); 92 93 /** 94 Timer initialization function. 95 @param [out] mti the timer characteristics. 96 */ 97 void my_timer_init(MY_TIMER_INFO *mti); 98 99 C_MODE_END 100 101 #define MY_TIMER_ROUTINE_ASM_X86 1 102 #define MY_TIMER_ROUTINE_ASM_X86_64 2 103 #define MY_TIMER_ROUTINE_RDTSCLL 3 104 #define MY_TIMER_ROUTINE_ASM_X86_WIN 4 105 #define MY_TIMER_ROUTINE_RDTSC 5 106 #define MY_TIMER_ROUTINE_ASM_IA64 6 107 #define MY_TIMER_ROUTINE_ASM_PPC 7 108 #define MY_TIMER_ROUTINE_SGI_CYCLE 8 109 #define MY_TIMER_ROUTINE_GETHRTIME 9 110 #define MY_TIMER_ROUTINE_READ_REAL_TIME 10 111 #define MY_TIMER_ROUTINE_CLOCK_GETTIME 11 112 #define MY_TIMER_ROUTINE_NXGETTIME 12 113 #define MY_TIMER_ROUTINE_GETTIMEOFDAY 13 114 #define MY_TIMER_ROUTINE_QUERYPERFORMANCECOUNTER 14 115 #define MY_TIMER_ROUTINE_GETTICKCOUNT 15 116 #define MY_TIMER_ROUTINE_TIME 16 117 #define MY_TIMER_ROUTINE_TIMES 17 118 #define MY_TIMER_ROUTINE_FTIME 18 119 #define MY_TIMER_ROUTINE_ASM_PPC64 19 120 #define MY_TIMER_ROUTINE_ASM_SUNPRO_SPARC64 20 121 #define MY_TIMER_ROUTINE_ASM_SUNPRO_SPARC32 21 122 #define MY_TIMER_ROUTINE_ASM_SUNPRO_I386 22 123 #define MY_TIMER_ROUTINE_ASM_GCC_SPARC64 23 124 #define MY_TIMER_ROUTINE_ASM_GCC_SPARC32 24 125 #define MY_TIMER_ROUTINE_MACH_ABSOLUTE_TIME 25 126 #define MY_TIMER_ROUTINE_GETSYSTEMTIMEASFILETIME 26 127 #define MY_TIMER_ROUTINE_ASM_SUNPRO_X86_64 27 128 129 #endif 130 131