Mercurial > hg > sv-dependency-builds
comparison src/opus-1.3/silk/debug.c @ 154:4664ac0c1032
Add Opus sources and macOS builds
author | Chris Cannam <cannam@all-day-breakfast.com> |
---|---|
date | Wed, 23 Jan 2019 13:48:08 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
153:84bc3a5ec321 | 154:4664ac0c1032 |
---|---|
1 /*********************************************************************** | |
2 Copyright (c) 2006-2011, Skype Limited. All rights reserved. | |
3 Redistribution and use in source and binary forms, with or without | |
4 modification, are permitted provided that the following conditions | |
5 are met: | |
6 - Redistributions of source code must retain the above copyright notice, | |
7 this list of conditions and the following disclaimer. | |
8 - Redistributions in binary form must reproduce the above copyright | |
9 notice, this list of conditions and the following disclaimer in the | |
10 documentation and/or other materials provided with the distribution. | |
11 - Neither the name of Internet Society, IETF or IETF Trust, nor the | |
12 names of specific contributors, may be used to endorse or promote | |
13 products derived from this software without specific prior written | |
14 permission. | |
15 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | |
16 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
17 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
18 ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | |
19 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
20 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
21 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
22 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
23 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
24 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
25 POSSIBILITY OF SUCH DAMAGE. | |
26 ***********************************************************************/ | |
27 | |
28 #ifdef HAVE_CONFIG_H | |
29 #include "config.h" | |
30 #endif | |
31 | |
32 #include "debug.h" | |
33 #include "SigProc_FIX.h" | |
34 | |
35 #if SILK_TIC_TOC | |
36 | |
37 #ifdef _WIN32 | |
38 | |
39 #if (defined(_WIN32) || defined(_WINCE)) | |
40 #include <windows.h> /* timer */ | |
41 #else /* Linux or Mac*/ | |
42 #include <sys/time.h> | |
43 #endif | |
44 | |
45 unsigned long silk_GetHighResolutionTime(void) /* O time in usec*/ | |
46 { | |
47 /* Returns a time counter in microsec */ | |
48 /* the resolution is platform dependent */ | |
49 /* but is typically 1.62 us resolution */ | |
50 LARGE_INTEGER lpPerformanceCount; | |
51 LARGE_INTEGER lpFrequency; | |
52 QueryPerformanceCounter(&lpPerformanceCount); | |
53 QueryPerformanceFrequency(&lpFrequency); | |
54 return (unsigned long)((1000000*(lpPerformanceCount.QuadPart)) / lpFrequency.QuadPart); | |
55 } | |
56 #else /* Linux or Mac*/ | |
57 unsigned long GetHighResolutionTime(void) /* O time in usec*/ | |
58 { | |
59 struct timeval tv; | |
60 gettimeofday(&tv, 0); | |
61 return((tv.tv_sec*1000000)+(tv.tv_usec)); | |
62 } | |
63 #endif | |
64 | |
65 int silk_Timer_nTimers = 0; | |
66 int silk_Timer_depth_ctr = 0; | |
67 char silk_Timer_tags[silk_NUM_TIMERS_MAX][silk_NUM_TIMERS_MAX_TAG_LEN]; | |
68 #ifdef WIN32 | |
69 LARGE_INTEGER silk_Timer_start[silk_NUM_TIMERS_MAX]; | |
70 #else | |
71 unsigned long silk_Timer_start[silk_NUM_TIMERS_MAX]; | |
72 #endif | |
73 unsigned int silk_Timer_cnt[silk_NUM_TIMERS_MAX]; | |
74 opus_int64 silk_Timer_min[silk_NUM_TIMERS_MAX]; | |
75 opus_int64 silk_Timer_sum[silk_NUM_TIMERS_MAX]; | |
76 opus_int64 silk_Timer_max[silk_NUM_TIMERS_MAX]; | |
77 opus_int64 silk_Timer_depth[silk_NUM_TIMERS_MAX]; | |
78 | |
79 #ifdef WIN32 | |
80 void silk_TimerSave(char *file_name) | |
81 { | |
82 if( silk_Timer_nTimers > 0 ) | |
83 { | |
84 int k; | |
85 FILE *fp; | |
86 LARGE_INTEGER lpFrequency; | |
87 LARGE_INTEGER lpPerformanceCount1, lpPerformanceCount2; | |
88 int del = 0x7FFFFFFF; | |
89 double avg, sum_avg; | |
90 /* estimate overhead of calling performance counters */ | |
91 for( k = 0; k < 1000; k++ ) { | |
92 QueryPerformanceCounter(&lpPerformanceCount1); | |
93 QueryPerformanceCounter(&lpPerformanceCount2); | |
94 lpPerformanceCount2.QuadPart -= lpPerformanceCount1.QuadPart; | |
95 if( (int)lpPerformanceCount2.LowPart < del ) | |
96 del = lpPerformanceCount2.LowPart; | |
97 } | |
98 QueryPerformanceFrequency(&lpFrequency); | |
99 /* print results to file */ | |
100 sum_avg = 0.0f; | |
101 for( k = 0; k < silk_Timer_nTimers; k++ ) { | |
102 if (silk_Timer_depth[k] == 0) { | |
103 sum_avg += (1e6 * silk_Timer_sum[k] / silk_Timer_cnt[k] - del) / lpFrequency.QuadPart * silk_Timer_cnt[k]; | |
104 } | |
105 } | |
106 fp = fopen(file_name, "w"); | |
107 fprintf(fp, " min avg %% max count\n"); | |
108 for( k = 0; k < silk_Timer_nTimers; k++ ) { | |
109 if (silk_Timer_depth[k] == 0) { | |
110 fprintf(fp, "%-28s", silk_Timer_tags[k]); | |
111 } else if (silk_Timer_depth[k] == 1) { | |
112 fprintf(fp, " %-27s", silk_Timer_tags[k]); | |
113 } else if (silk_Timer_depth[k] == 2) { | |
114 fprintf(fp, " %-26s", silk_Timer_tags[k]); | |
115 } else if (silk_Timer_depth[k] == 3) { | |
116 fprintf(fp, " %-25s", silk_Timer_tags[k]); | |
117 } else { | |
118 fprintf(fp, " %-24s", silk_Timer_tags[k]); | |
119 } | |
120 avg = (1e6 * silk_Timer_sum[k] / silk_Timer_cnt[k] - del) / lpFrequency.QuadPart; | |
121 fprintf(fp, "%8.2f", (1e6 * (silk_max_64(silk_Timer_min[k] - del, 0))) / lpFrequency.QuadPart); | |
122 fprintf(fp, "%12.2f %6.2f", avg, 100.0 * avg / sum_avg * silk_Timer_cnt[k]); | |
123 fprintf(fp, "%12.2f", (1e6 * (silk_max_64(silk_Timer_max[k] - del, 0))) / lpFrequency.QuadPart); | |
124 fprintf(fp, "%10d\n", silk_Timer_cnt[k]); | |
125 } | |
126 fprintf(fp, " microseconds\n"); | |
127 fclose(fp); | |
128 } | |
129 } | |
130 #else | |
131 void silk_TimerSave(char *file_name) | |
132 { | |
133 if( silk_Timer_nTimers > 0 ) | |
134 { | |
135 int k; | |
136 FILE *fp; | |
137 /* print results to file */ | |
138 fp = fopen(file_name, "w"); | |
139 fprintf(fp, " min avg max count\n"); | |
140 for( k = 0; k < silk_Timer_nTimers; k++ ) | |
141 { | |
142 if (silk_Timer_depth[k] == 0) { | |
143 fprintf(fp, "%-28s", silk_Timer_tags[k]); | |
144 } else if (silk_Timer_depth[k] == 1) { | |
145 fprintf(fp, " %-27s", silk_Timer_tags[k]); | |
146 } else if (silk_Timer_depth[k] == 2) { | |
147 fprintf(fp, " %-26s", silk_Timer_tags[k]); | |
148 } else if (silk_Timer_depth[k] == 3) { | |
149 fprintf(fp, " %-25s", silk_Timer_tags[k]); | |
150 } else { | |
151 fprintf(fp, " %-24s", silk_Timer_tags[k]); | |
152 } | |
153 fprintf(fp, "%d ", silk_Timer_min[k]); | |
154 fprintf(fp, "%f ", (double)silk_Timer_sum[k] / (double)silk_Timer_cnt[k]); | |
155 fprintf(fp, "%d ", silk_Timer_max[k]); | |
156 fprintf(fp, "%10d\n", silk_Timer_cnt[k]); | |
157 } | |
158 fprintf(fp, " microseconds\n"); | |
159 fclose(fp); | |
160 } | |
161 } | |
162 #endif | |
163 | |
164 #endif /* SILK_TIC_TOC */ | |
165 | |
166 #if SILK_DEBUG | |
167 FILE *silk_debug_store_fp[ silk_NUM_STORES_MAX ]; | |
168 int silk_debug_store_count = 0; | |
169 #endif /* SILK_DEBUG */ | |
170 |