annotate src/opus-1.3/silk/debug.c @ 69:7aeed7906520

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