40 unsigned long GetHighResolutionTime(
void);
48 #define SILK_TIC_TOC 0
53 #if (defined(_WIN32) || defined(_WINCE))
74 void silk_TimerSave(
char *file_name);
77 #define silk_NUM_TIMERS_MAX 50
79 #define silk_NUM_TIMERS_MAX_TAG_LEN 30
81 extern int silk_Timer_nTimers;
82 extern int silk_Timer_depth_ctr;
83 extern char silk_Timer_tags[silk_NUM_TIMERS_MAX][silk_NUM_TIMERS_MAX_TAG_LEN];
85 extern LARGE_INTEGER silk_Timer_start[silk_NUM_TIMERS_MAX];
87 extern unsigned long silk_Timer_start[silk_NUM_TIMERS_MAX];
89 extern unsigned int silk_Timer_cnt[silk_NUM_TIMERS_MAX];
90 extern opus_int64 silk_Timer_sum[silk_NUM_TIMERS_MAX];
91 extern opus_int64 silk_Timer_max[silk_NUM_TIMERS_MAX];
92 extern opus_int64 silk_Timer_min[silk_NUM_TIMERS_MAX];
93 extern opus_int64 silk_Timer_depth[silk_NUM_TIMERS_MAX];
97 #define TIC(TAG_NAME) { \
98 static int init = 0; \
104 for( k = 0; k < silk_Timer_nTimers; k++ ) { \
105 if( strcmp(silk_Timer_tags[k], #TAG_NAME) == 0 ) { \
111 ID = silk_Timer_nTimers; \
112 silk_Timer_nTimers++; \
113 silk_Timer_depth[ID] = silk_Timer_depth_ctr; \
114 strcpy(silk_Timer_tags[ID], #TAG_NAME); \
115 silk_Timer_cnt[ID] = 0; \
116 silk_Timer_sum[ID] = 0; \
117 silk_Timer_min[ID] = 0xFFFFFFFF; \
118 silk_Timer_max[ID] = 0; \
121 silk_Timer_depth_ctr++; \
122 QueryPerformanceCounter(&silk_Timer_start[ID]); \
125 #define TIC(TAG_NAME) { \
126 static int init = 0; \
127 static int ID = -1; \
132 for( k = 0; k < silk_Timer_nTimers; k++ ) { \
133 if( strcmp(silk_Timer_tags[k], #TAG_NAME) == 0 ) { \
139 ID = silk_Timer_nTimers; \
140 silk_Timer_nTimers++; \
141 silk_Timer_depth[ID] = silk_Timer_depth_ctr; \
142 strcpy(silk_Timer_tags[ID], #TAG_NAME); \
143 silk_Timer_cnt[ID] = 0; \
144 silk_Timer_sum[ID] = 0; \
145 silk_Timer_min[ID] = 0xFFFFFFFF; \
146 silk_Timer_max[ID] = 0; \
149 silk_Timer_depth_ctr++; \
150 silk_Timer_start[ID] = GetHighResolutionTime(); \
155 #define TOC(TAG_NAME) { \
156 LARGE_INTEGER lpPerformanceCount; \
157 static int init = 0; \
163 for( k = 0; k < silk_Timer_nTimers; k++ ) { \
164 if( strcmp(silk_Timer_tags[k], #TAG_NAME) == 0 ) { \
170 QueryPerformanceCounter(&lpPerformanceCount); \
171 lpPerformanceCount.QuadPart -= silk_Timer_start[ID].QuadPart; \
172 if((lpPerformanceCount.QuadPart < 100000000) && \
173 (lpPerformanceCount.QuadPart >= 0)) { \
174 silk_Timer_cnt[ID]++; \
175 silk_Timer_sum[ID] += lpPerformanceCount.QuadPart; \
176 if( lpPerformanceCount.QuadPart > silk_Timer_max[ID] ) \
177 silk_Timer_max[ID] = lpPerformanceCount.QuadPart; \
178 if( lpPerformanceCount.QuadPart < silk_Timer_min[ID] ) \
179 silk_Timer_min[ID] = lpPerformanceCount.QuadPart; \
181 silk_Timer_depth_ctr--; \
184 #define TOC(TAG_NAME) { \
185 unsigned long endTime; \
186 static int init = 0; \
192 for( k = 0; k < silk_Timer_nTimers; k++ ) { \
193 if( strcmp(silk_Timer_tags[k], #TAG_NAME) == 0 ) { \
199 endTime = GetHighResolutionTime(); \
200 endTime -= silk_Timer_start[ID]; \
201 if((endTime < 100000000) && \
203 silk_Timer_cnt[ID]++; \
204 silk_Timer_sum[ID] += endTime; \
205 if( endTime > silk_Timer_max[ID] ) \
206 silk_Timer_max[ID] = endTime; \
207 if( endTime < silk_Timer_min[ID] ) \
208 silk_Timer_min[ID] = endTime; \
210 silk_Timer_depth_ctr--; \
217 #define TIC(TAG_NAME)
218 #define TOC(TAG_NAME)
219 #define silk_TimerSave(FILE_NAME)
230 #define silk_NUM_STORES_MAX 100
231 extern FILE *silk_debug_store_fp[ silk_NUM_STORES_MAX ];
232 extern int silk_debug_store_count;
235 #define DEBUG_STORE_DATA( FILE_NAME, DATA_PTR, N_BYTES ) { \
236 static opus_int init = 0, cnt = 0; \
240 cnt = silk_debug_store_count++; \
241 silk_debug_store_fp[ cnt ] = fopen(#FILE_NAME, "wb"); \
243 fwrite((DATA_PTR), (N_BYTES), 1, silk_debug_store_fp[ cnt ]); \
247 #define SILK_DEBUG_STORE_CLOSE_FILES { \
249 for( i = 0; i < silk_debug_store_count; i++ ) { \
250 fclose( silk_debug_store_fp[ i ] ); \
257 #define DEBUG_STORE_DATA(FILE_NAME, DATA_PTR, N_BYTES)
258 #define SILK_DEBUG_STORE_CLOSE_FILES