media/libopus/silk/debug.h

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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 ***********************************************************************/
    28 #ifndef SILK_DEBUG_H
    29 #define SILK_DEBUG_H
    31 #include "typedef.h"
    32 #include <stdio.h>      /* file writing */
    33 #include <string.h>     /* strcpy, strcmp */
    35 #ifdef  __cplusplus
    36 extern "C"
    37 {
    38 #endif
    40 unsigned long GetHighResolutionTime(void); /* O  time in usec*/
    42 /* make SILK_DEBUG dependent on compiler's _DEBUG */
    43 #if defined _WIN32
    44     #ifdef _DEBUG
    45         #define SILK_DEBUG  1
    46     #else
    47         #define SILK_DEBUG  0
    48     #endif
    50     /* overrule the above */
    51     #if 0
    52     /*  #define NO_ASSERTS*/
    53     #undef  SILK_DEBUG
    54     #define SILK_DEBUG  1
    55     #endif
    56 #else
    57     #define SILK_DEBUG  0
    58 #endif
    60 /* Flag for using timers */
    61 #define SILK_TIC_TOC    0
    64 #if SILK_TIC_TOC
    66 #if (defined(_WIN32) || defined(_WINCE))
    67 #include <windows.h>    /* timer */
    68 #else   /* Linux or Mac*/
    69 #include <sys/time.h>
    70 #endif
    72 /*********************************/
    73 /* timer functions for profiling */
    74 /*********************************/
    75 /* example:                                                         */
    76 /*                                                                  */
    77 /* TIC(LPC)                                                         */
    78 /* do_LPC(in_vec, order, acoef);    // do LPC analysis              */
    79 /* TOC(LPC)                                                         */
    80 /*                                                                  */
    81 /* and call the following just before exiting (from main)           */
    82 /*                                                                  */
    83 /* silk_TimerSave("silk_TimingData.txt");                           */
    84 /*                                                                  */
    85 /* results are now in silk_TimingData.txt                           */
    87 void silk_TimerSave(char *file_name);
    89 /* max number of timers (in different locations) */
    90 #define silk_NUM_TIMERS_MAX                  50
    91 /* max length of name tags in TIC(..), TOC(..) */
    92 #define silk_NUM_TIMERS_MAX_TAG_LEN          30
    94 extern int           silk_Timer_nTimers;
    95 extern int           silk_Timer_depth_ctr;
    96 extern char          silk_Timer_tags[silk_NUM_TIMERS_MAX][silk_NUM_TIMERS_MAX_TAG_LEN];
    97 #ifdef _WIN32
    98 extern LARGE_INTEGER silk_Timer_start[silk_NUM_TIMERS_MAX];
    99 #else
   100 extern unsigned long silk_Timer_start[silk_NUM_TIMERS_MAX];
   101 #endif
   102 extern unsigned int  silk_Timer_cnt[silk_NUM_TIMERS_MAX];
   103 extern opus_int64    silk_Timer_sum[silk_NUM_TIMERS_MAX];
   104 extern opus_int64    silk_Timer_max[silk_NUM_TIMERS_MAX];
   105 extern opus_int64    silk_Timer_min[silk_NUM_TIMERS_MAX];
   106 extern opus_int64    silk_Timer_depth[silk_NUM_TIMERS_MAX];
   108 /* WARNING: TIC()/TOC can measure only up to 0.1 seconds at a time */
   109 #ifdef _WIN32
   110 #define TIC(TAG_NAME) {                                     \
   111     static int init = 0;                                    \
   112     static int ID = -1;                                     \
   113     if( init == 0 )                                         \
   114     {                                                       \
   115         int k;                                              \
   116         init = 1;                                           \
   117         for( k = 0; k < silk_Timer_nTimers; k++ ) {         \
   118             if( strcmp(silk_Timer_tags[k], #TAG_NAME) == 0 ) { \
   119                 ID = k;                                     \
   120                 break;                                      \
   121             }                                               \
   122         }                                                   \
   123         if (ID == -1) {                                     \
   124             ID = silk_Timer_nTimers;                        \
   125             silk_Timer_nTimers++;                           \
   126             silk_Timer_depth[ID] = silk_Timer_depth_ctr;    \
   127             strcpy(silk_Timer_tags[ID], #TAG_NAME);         \
   128             silk_Timer_cnt[ID] = 0;                         \
   129             silk_Timer_sum[ID] = 0;                         \
   130             silk_Timer_min[ID] = 0xFFFFFFFF;                \
   131             silk_Timer_max[ID] = 0;                         \
   132         }                                                   \
   133     }                                                       \
   134     silk_Timer_depth_ctr++;                                 \
   135     QueryPerformanceCounter(&silk_Timer_start[ID]);         \
   136 }
   137 #else
   138 #define TIC(TAG_NAME) {                                     \
   139     static int init = 0;                                    \
   140     static int ID = -1;                                     \
   141     if( init == 0 )                                         \
   142     {                                                       \
   143         int k;                                              \
   144         init = 1;                                           \
   145         for( k = 0; k < silk_Timer_nTimers; k++ ) {         \
   146         if( strcmp(silk_Timer_tags[k], #TAG_NAME) == 0 ) {  \
   147                 ID = k;                                     \
   148                 break;                                      \
   149             }                                               \
   150         }                                                   \
   151         if (ID == -1) {                                     \
   152             ID = silk_Timer_nTimers;                        \
   153             silk_Timer_nTimers++;                           \
   154             silk_Timer_depth[ID] = silk_Timer_depth_ctr;    \
   155             strcpy(silk_Timer_tags[ID], #TAG_NAME);         \
   156             silk_Timer_cnt[ID] = 0;                         \
   157             silk_Timer_sum[ID] = 0;                         \
   158             silk_Timer_min[ID] = 0xFFFFFFFF;                \
   159             silk_Timer_max[ID] = 0;                         \
   160         }                                                   \
   161     }                                                       \
   162     silk_Timer_depth_ctr++;                                 \
   163     silk_Timer_start[ID] = GetHighResolutionTime();         \
   164 }
   165 #endif
   167 #ifdef _WIN32
   168 #define TOC(TAG_NAME) {                                             \
   169     LARGE_INTEGER lpPerformanceCount;                               \
   170     static int init = 0;                                            \
   171     static int ID = 0;                                              \
   172     if( init == 0 )                                                 \
   173     {                                                               \
   174         int k;                                                      \
   175         init = 1;                                                   \
   176         for( k = 0; k < silk_Timer_nTimers; k++ ) {                 \
   177             if( strcmp(silk_Timer_tags[k], #TAG_NAME) == 0 ) {      \
   178                 ID = k;                                             \
   179                 break;                                              \
   180             }                                                       \
   181         }                                                           \
   182     }                                                               \
   183     QueryPerformanceCounter(&lpPerformanceCount);                   \
   184     lpPerformanceCount.QuadPart -= silk_Timer_start[ID].QuadPart;   \
   185     if((lpPerformanceCount.QuadPart < 100000000) &&                 \
   186         (lpPerformanceCount.QuadPart >= 0)) {                       \
   187         silk_Timer_cnt[ID]++;                                       \
   188         silk_Timer_sum[ID] += lpPerformanceCount.QuadPart;          \
   189         if( lpPerformanceCount.QuadPart > silk_Timer_max[ID] )      \
   190             silk_Timer_max[ID] = lpPerformanceCount.QuadPart;       \
   191         if( lpPerformanceCount.QuadPart < silk_Timer_min[ID] )      \
   192             silk_Timer_min[ID] = lpPerformanceCount.QuadPart;       \
   193     }                                                               \
   194     silk_Timer_depth_ctr--;                                         \
   195 }
   196 #else
   197 #define TOC(TAG_NAME) {                                             \
   198     unsigned long endTime;                                          \
   199     static int init = 0;                                            \
   200     static int ID = 0;                                              \
   201     if( init == 0 )                                                 \
   202     {                                                               \
   203         int k;                                                      \
   204         init = 1;                                                   \
   205         for( k = 0; k < silk_Timer_nTimers; k++ ) {                 \
   206             if( strcmp(silk_Timer_tags[k], #TAG_NAME) == 0 ) {      \
   207                 ID = k;                                             \
   208                 break;                                              \
   209             }                                                       \
   210         }                                                           \
   211     }                                                               \
   212     endTime = GetHighResolutionTime();                              \
   213     endTime -= silk_Timer_start[ID];                                \
   214     if((endTime < 100000000) &&                                     \
   215         (endTime >= 0)) {                                           \
   216         silk_Timer_cnt[ID]++;                                       \
   217         silk_Timer_sum[ID] += endTime;                              \
   218         if( endTime > silk_Timer_max[ID] )                          \
   219             silk_Timer_max[ID] = endTime;                           \
   220         if( endTime < silk_Timer_min[ID] )                          \
   221             silk_Timer_min[ID] = endTime;                           \
   222     }                                                               \
   223         silk_Timer_depth_ctr--;                                     \
   224 }
   225 #endif
   227 #else /* SILK_TIC_TOC */
   229 /* define macros as empty strings */
   230 #define TIC(TAG_NAME)
   231 #define TOC(TAG_NAME)
   232 #define silk_TimerSave(FILE_NAME)
   234 #endif /* SILK_TIC_TOC */
   237 #if SILK_DEBUG
   238 /************************************/
   239 /* write data to file for debugging */
   240 /************************************/
   241 /* Example: DEBUG_STORE_DATA(testfile.pcm, &RIN[0], 160*sizeof(opus_int16)); */
   243 #define silk_NUM_STORES_MAX                                  100
   244 extern FILE *silk_debug_store_fp[ silk_NUM_STORES_MAX ];
   245 extern int silk_debug_store_count;
   247 /* Faster way of storing the data */
   248 #define DEBUG_STORE_DATA( FILE_NAME, DATA_PTR, N_BYTES ) {          \
   249     static opus_int init = 0, cnt = 0;                              \
   250     static FILE **fp;                                               \
   251     if (init == 0) {                                                \
   252         init = 1;                                                   \
   253         cnt = silk_debug_store_count++;                             \
   254         silk_debug_store_fp[ cnt ] = fopen(#FILE_NAME, "wb");       \
   255     }                                                               \
   256     fwrite((DATA_PTR), (N_BYTES), 1, silk_debug_store_fp[ cnt ]);   \
   257 }
   259 /* Call this at the end of main() */
   260 #define SILK_DEBUG_STORE_CLOSE_FILES {                              \
   261     opus_int i;                                                     \
   262     for( i = 0; i < silk_debug_store_count; i++ ) {                 \
   263         fclose( silk_debug_store_fp[ i ] );                         \
   264     }                                                               \
   265 }
   267 #else /* SILK_DEBUG */
   269 /* define macros as empty strings */
   270 #define DEBUG_STORE_DATA(FILE_NAME, DATA_PTR, N_BYTES)
   271 #define SILK_DEBUG_STORE_CLOSE_FILES
   273 #endif /* SILK_DEBUG */
   275 #ifdef  __cplusplus
   276 }
   277 #endif
   279 #endif /* SILK_DEBUG_H */

mercurial