]>
Commit | Line | Data |
---|---|---|
d8f41ccd | 1 | /* Copyright (c) 1997,2011,2014 Apple Inc. |
b1ab9ed8 A |
2 | * |
3 | * comDebug.h | |
4 | */ | |
5 | ||
6 | #ifndef _COM_DEBUG_H_ | |
7 | #define _COM_DEBUG_H_ | |
8 | ||
9 | #ifdef __cplusplus | |
10 | extern "C" { | |
11 | #endif | |
12 | ||
13 | /* | |
14 | * enable general debugging printfs and error checking. | |
15 | */ | |
16 | #define COM_DEBUG 0 | |
17 | #if COM_DEBUG | |
18 | #include <stdio.h> | |
19 | ||
20 | #define ddprintf(x) printf x | |
21 | #else | |
22 | #define ddprintf(x) | |
23 | #endif | |
24 | ||
25 | /* | |
26 | * block parsing debug | |
27 | */ | |
28 | #define COM_SCAN_DEBUG 0 | |
29 | #if COM_SCAN_DEBUG | |
30 | #define scprintf(x) printf x | |
31 | #else | |
32 | #define scprintf(x) | |
33 | #endif | |
34 | ||
35 | /* | |
36 | * 2nd-level comcrypt debug | |
37 | */ | |
38 | #define LEVEL2_DEBUG 0 | |
39 | #if LEVEL2_DEBUG | |
40 | #include <stdio.h> | |
41 | ||
42 | #define l2printf(x) printf x | |
43 | #else | |
44 | #define l2printf(x) | |
45 | #endif | |
46 | ||
47 | /* | |
48 | * lookahead queue debug | |
49 | */ | |
50 | #define COM_LA_DEBUG 0 | |
51 | #define COM_LA_PRINTF 0 | |
52 | #if COM_LA_PRINTF | |
53 | #define laprintf(x) printf x | |
54 | #else | |
55 | #define laprintf(x) | |
56 | #endif | |
57 | ||
58 | /* | |
59 | * Statistics measurements. This is a private API. | |
60 | */ | |
61 | #if COM_DEBUG | |
62 | #define COM_STATS 0 | |
63 | #else | |
64 | #define COM_STATS 0 | |
65 | #endif | |
66 | ||
67 | #if COM_STATS | |
68 | ||
69 | /* | |
70 | * Info obtained via a call to getComStats() | |
71 | */ | |
72 | typedef struct { | |
73 | unsigned level1blocks; | |
74 | unsigned plaintextBytes; | |
75 | unsigned ciphertextBytes; | |
76 | unsigned oneByteFrags; // 1st level only | |
77 | unsigned twoByteFrags; // ditto | |
78 | unsigned level2oneByteFrags; // second level only | |
79 | unsigned level2twoByteFrags; // ditto | |
80 | unsigned level2byteCode; // bytes, pre-encrypted | |
81 | unsigned level2cipherText; // bytes, post-encrypt | |
82 | unsigned level2blocks; // 2nd-level blocks | |
83 | unsigned level2jmatch; // total jmatch (at first level) of | |
84 | // 2nd level blocks | |
85 | } comStats; | |
86 | ||
87 | extern comStats _comStats; | |
88 | #define incrComStat(stat, num) _comStats.stat += num; | |
89 | ||
90 | #define incr1byteFrags(recursLevel) { \ | |
91 | if(recursLevel == 1) { \ | |
92 | incrComStat(level2oneByteFrags, 1); \ | |
93 | } \ | |
94 | else { \ | |
95 | incrComStat(oneByteFrags, 1); \ | |
96 | } \ | |
97 | } | |
98 | #define incr2byteFrags(recursLevel) { \ | |
99 | if(recursLevel == 1) { \ | |
100 | incrComStat(level2twoByteFrags, 1); \ | |
101 | } \ | |
102 | else { \ | |
103 | incrComStat(twoByteFrags, 1); \ | |
104 | } \ | |
105 | } | |
106 | ||
107 | extern void resetComStats(); | |
108 | extern void getComStats(comStats *stats); | |
109 | ||
110 | #else | |
111 | #define incrComStat(stat, num) | |
112 | #define incr1byteFrags(recursLevel) | |
113 | #define incr2byteFrags(recursLevel) | |
114 | #endif | |
115 | ||
116 | /* | |
117 | * Profiling measurement. A private API when enabled. | |
118 | */ | |
119 | #if COM_DEBUG | |
120 | #define COM_PROFILE 0 | |
121 | #else | |
122 | #define COM_PROFILE 0 | |
123 | #endif | |
124 | ||
125 | #if COM_PROFILE | |
126 | ||
127 | #include <kern/time_stamp.h> | |
128 | ||
129 | /* | |
130 | * Global profiling enable. It turns out the the cost of doing the | |
131 | * kern_timestamp() call twice per codeword is way more expensive | |
132 | * than the actual comcryption code. Setting this variable to zero | |
133 | * avoids the cost of all the timestamps for reference without | |
134 | * rebuilding. Also, the cmcPerWordOhead calibrates the actual | |
135 | * cost of the two kern_timestamp() calls per word. | |
136 | */ | |
137 | extern unsigned comProfEnable; | |
138 | ||
139 | /* | |
140 | * Profiling accumulators. | |
141 | */ | |
142 | typedef unsigned comprof_t; | |
143 | ||
144 | extern comprof_t cmcTotal; | |
145 | extern comprof_t cmcQueSearch; | |
146 | extern comprof_t cmcQueMatchMove; | |
147 | extern comprof_t cmcQueMissMove; | |
148 | extern comprof_t cmcPerWordOhead; | |
149 | extern comprof_t cmcLevel2; | |
150 | ||
151 | ||
152 | /* | |
153 | * Place one of these in the local variable declaration list of each routine | |
154 | * which will do profiling. | |
155 | */ | |
156 | #define COMPROF_LOCALS \ | |
157 | struct tsval _profStartTime; \ | |
158 | struct tsval _profEndTime; | |
159 | ||
160 | /* | |
161 | * Start the clock. | |
162 | */ | |
163 | #define COMPROF_START \ | |
164 | if(comProfEnable) { \ | |
165 | kern_timestamp(&_profStartTime); \ | |
166 | } | |
167 | ||
168 | /* | |
169 | * Stop the clock and gather elapsed time to specified accumulator. | |
170 | */ | |
171 | #define COMPROF_END(accum) \ | |
172 | if(comProfEnable) { \ | |
173 | kern_timestamp(&_profEndTime); \ | |
174 | accum += (_profEndTime.low_val - _profStartTime.low_val); \ | |
175 | } | |
176 | ||
177 | ||
178 | #else | |
179 | ||
180 | #define COMPROF_LOCALS | |
181 | #define COMPROF_START | |
182 | #define COMPROF_END(accum) | |
183 | ||
184 | #endif /* COM_PROFILE */ | |
185 | ||
186 | /* | |
187 | * Get/set parameter API, private, for debug only. | |
188 | */ | |
189 | #if COM_DEBUG | |
190 | #define COM_PARAM_ENABLE 1 | |
191 | #else | |
192 | #define COM_PARAM_ENABLE 0 | |
193 | #endif /*COM_DEBUG*/ | |
194 | ||
195 | #if COM_PARAM_ENABLE | |
196 | ||
197 | extern unsigned getF1(comcryptObj cobj); | |
198 | extern void setF1(comcryptObj cobj, unsigned f1); | |
199 | extern unsigned getF2(comcryptObj cobj); | |
200 | extern void setF2(comcryptObj cobj, unsigned f2); | |
201 | extern unsigned getJmatchThresh(comcryptObj cobj); | |
202 | extern void setJmatchThresh(comcryptObj cobj, unsigned jmatchThresh); | |
203 | extern unsigned getMinByteCode(comcryptObj cobj); | |
204 | extern void setMinByteCode(comcryptObj cobj, unsigned minByteCode); | |
205 | ||
206 | #endif /*COM_PARAM_ENABLE*/ | |
207 | ||
208 | #ifdef __cplusplus | |
209 | } | |
210 | #endif | |
211 | ||
212 | #endif /*_COM_DEBUG_H_*/ |