1885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/***********************************************************************
2885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgCopyright (c) 2006-2011, Skype Limited. All rights reserved.
3885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgRedistribution and use in source and binary forms, with or without
4885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgmodification, are permitted provided that the following conditions
5885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgare met:
6885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org- Redistributions of source code must retain the above copyright notice,
7885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgthis list of conditions and the following disclaimer.
8885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org- Redistributions in binary form must reproduce the above copyright
9885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgnotice, this list of conditions and the following disclaimer in the
10885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgdocumentation and/or other materials provided with the distribution.
11e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org- Neither the name of Internet Society, IETF or IETF Trust, nor the
12885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgnames of specific contributors, may be used to endorse or promote
13885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgproducts derived from this software without specific prior written
14885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgpermission.
15e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.orgTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgLIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgCONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgSUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgINTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgCONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgPOSSIBILITY OF SUCH DAMAGE.
26885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org***********************************************************************/
27885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
28885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef HAVE_CONFIG_H
29885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "config.h"
30885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
31885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
32885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "debug.h"
33885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "SigProc_FIX.h"
34885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
35885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#if SILK_TIC_TOC
36885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
37885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef _WIN32
38885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
39885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#if (defined(_WIN32) || defined(_WINCE))
40885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <windows.h>    /* timer */
41885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#else   /* Linux or Mac*/
42885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <sys/time.h>
43885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
44885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
45885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgunsigned long silk_GetHighResolutionTime(void) /* O  time in usec*/
46885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{
47885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    /* Returns a time counter in microsec   */
48885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    /* the resolution is platform dependent */
49885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    /* but is typically 1.62 us resolution  */
50885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    LARGE_INTEGER lpPerformanceCount;
51885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    LARGE_INTEGER lpFrequency;
52885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    QueryPerformanceCounter(&lpPerformanceCount);
53885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    QueryPerformanceFrequency(&lpFrequency);
54885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    return (unsigned long)((1000000*(lpPerformanceCount.QuadPart)) / lpFrequency.QuadPart);
55885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org}
56885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#else   /* Linux or Mac*/
57885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgunsigned long GetHighResolutionTime(void) /* O  time in usec*/
58885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{
59885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    struct timeval tv;
60885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    gettimeofday(&tv, 0);
61885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    return((tv.tv_sec*1000000)+(tv.tv_usec));
62885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org}
63885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
64885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
65885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgint           silk_Timer_nTimers = 0;
66885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgint           silk_Timer_depth_ctr = 0;
67885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgchar          silk_Timer_tags[silk_NUM_TIMERS_MAX][silk_NUM_TIMERS_MAX_TAG_LEN];
68885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef WIN32
69885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgLARGE_INTEGER silk_Timer_start[silk_NUM_TIMERS_MAX];
70885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#else
71885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgunsigned long silk_Timer_start[silk_NUM_TIMERS_MAX];
72885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
73885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgunsigned int  silk_Timer_cnt[silk_NUM_TIMERS_MAX];
74885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgopus_int64     silk_Timer_min[silk_NUM_TIMERS_MAX];
75885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgopus_int64     silk_Timer_sum[silk_NUM_TIMERS_MAX];
76885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgopus_int64     silk_Timer_max[silk_NUM_TIMERS_MAX];
77885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgopus_int64     silk_Timer_depth[silk_NUM_TIMERS_MAX];
78885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
79885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef WIN32
80885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgvoid silk_TimerSave(char *file_name)
81885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{
82885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    if( silk_Timer_nTimers > 0 )
83885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    {
84885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        int k;
85885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        FILE *fp;
86885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        LARGE_INTEGER lpFrequency;
87885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        LARGE_INTEGER lpPerformanceCount1, lpPerformanceCount2;
88885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        int del = 0x7FFFFFFF;
89885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        double avg, sum_avg;
90885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        /* estimate overhead of calling performance counters */
91885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        for( k = 0; k < 1000; k++ ) {
92885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            QueryPerformanceCounter(&lpPerformanceCount1);
93885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            QueryPerformanceCounter(&lpPerformanceCount2);
94885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            lpPerformanceCount2.QuadPart -= lpPerformanceCount1.QuadPart;
95885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            if( (int)lpPerformanceCount2.LowPart < del )
96885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org                del = lpPerformanceCount2.LowPart;
97885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        }
98885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        QueryPerformanceFrequency(&lpFrequency);
99885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        /* print results to file */
100885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        sum_avg = 0.0f;
101885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        for( k = 0; k < silk_Timer_nTimers; k++ ) {
102885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            if (silk_Timer_depth[k] == 0) {
103885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org                sum_avg += (1e6 * silk_Timer_sum[k] / silk_Timer_cnt[k] - del) / lpFrequency.QuadPart * silk_Timer_cnt[k];
104885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            }
105885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        }
106885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        fp = fopen(file_name, "w");
107885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        fprintf(fp, "                                min         avg     %%         max      count\n");
108885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        for( k = 0; k < silk_Timer_nTimers; k++ ) {
109885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            if (silk_Timer_depth[k] == 0) {
110885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org                fprintf(fp, "%-28s", silk_Timer_tags[k]);
111885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            } else if (silk_Timer_depth[k] == 1) {
112885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org                fprintf(fp, " %-27s", silk_Timer_tags[k]);
113885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            } else if (silk_Timer_depth[k] == 2) {
114885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org                fprintf(fp, "  %-26s", silk_Timer_tags[k]);
115885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            } else if (silk_Timer_depth[k] == 3) {
116885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org                fprintf(fp, "   %-25s", silk_Timer_tags[k]);
117885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            } else {
118885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org                fprintf(fp, "    %-24s", silk_Timer_tags[k]);
119885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            }
120885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            avg = (1e6 * silk_Timer_sum[k] / silk_Timer_cnt[k] - del) / lpFrequency.QuadPart;
121885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            fprintf(fp, "%8.2f", (1e6 * (silk_max_64(silk_Timer_min[k] - del, 0))) / lpFrequency.QuadPart);
122885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            fprintf(fp, "%12.2f %6.2f", avg, 100.0 * avg / sum_avg * silk_Timer_cnt[k]);
123885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            fprintf(fp, "%12.2f", (1e6 * (silk_max_64(silk_Timer_max[k] - del, 0))) / lpFrequency.QuadPart);
124885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            fprintf(fp, "%10d\n", silk_Timer_cnt[k]);
125885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        }
126885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        fprintf(fp, "                                microseconds\n");
127885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        fclose(fp);
128885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    }
129885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org}
130885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#else
131885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgvoid silk_TimerSave(char *file_name)
132885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{
133885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    if( silk_Timer_nTimers > 0 )
134885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    {
135885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        int k;
136885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        FILE *fp;
137885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        /* print results to file */
138885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        fp = fopen(file_name, "w");
139885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        fprintf(fp, "                                min         avg         max      count\n");
140885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        for( k = 0; k < silk_Timer_nTimers; k++ )
141885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        {
142885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            if (silk_Timer_depth[k] == 0) {
143885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org                fprintf(fp, "%-28s", silk_Timer_tags[k]);
144885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            } else if (silk_Timer_depth[k] == 1) {
145885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org                fprintf(fp, " %-27s", silk_Timer_tags[k]);
146885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            } else if (silk_Timer_depth[k] == 2) {
147885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org                fprintf(fp, "  %-26s", silk_Timer_tags[k]);
148885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            } else if (silk_Timer_depth[k] == 3) {
149885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org                fprintf(fp, "   %-25s", silk_Timer_tags[k]);
150885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            } else {
151885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org                fprintf(fp, "    %-24s", silk_Timer_tags[k]);
152885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            }
153885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            fprintf(fp, "%d ", silk_Timer_min[k]);
154885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            fprintf(fp, "%f ", (double)silk_Timer_sum[k] / (double)silk_Timer_cnt[k]);
155885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            fprintf(fp, "%d ", silk_Timer_max[k]);
156885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org            fprintf(fp, "%10d\n", silk_Timer_cnt[k]);
157885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        }
158885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        fprintf(fp, "                                microseconds\n");
159885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org        fclose(fp);
160885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org    }
161885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org}
162885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif
163885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
164885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif /* SILK_TIC_TOC */
165885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
166885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#if SILK_DEBUG
167885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgFILE *silk_debug_store_fp[ silk_NUM_STORES_MAX ];
168885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgint silk_debug_store_count = 0;
169885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif /* SILK_DEBUG */
170885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org
171