OLD | NEW |
| (Empty) |
1 // Protocol Buffers - Google's data interchange format | |
2 // Copyright 2013 Google Inc. All rights reserved. | |
3 // https://developers.google.com/protocol-buffers/ | |
4 // | |
5 // Redistribution and use in source and binary forms, with or without | |
6 // modification, are permitted provided that the following conditions are | |
7 // met: | |
8 // | |
9 // * Redistributions of source code must retain the above copyright | |
10 // notice, this list of conditions and the following disclaimer. | |
11 // * Redistributions in binary form must reproduce the above | |
12 // copyright notice, this list of conditions and the following disclaimer | |
13 // in the documentation and/or other materials provided with the | |
14 // distribution. | |
15 // * Neither the name of Google Inc. nor the names of its | |
16 // contributors may be used to endorse or promote products derived from | |
17 // this software without specific prior written permission. | |
18 // | |
19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
30 | |
31 #import "GPBTestUtilities.h" | |
32 #import "google/protobuf/Unittest.pbobjc.h" | |
33 #import "google/protobuf/UnittestImport.pbobjc.h" | |
34 #import "google/protobuf/UnittestObjc.pbobjc.h" | |
35 | |
36 // | |
37 // This file really just uses the unittests framework as a testbed to | |
38 // run some simple performance tests. The data can then be used to help | |
39 // evaluate changes to the runtime. | |
40 // | |
41 | |
42 static const uint32_t kRepeatedCount = 100; | |
43 | |
44 @interface PerfTests : GPBTestCase | |
45 @end | |
46 | |
47 @implementation PerfTests | |
48 | |
49 - (void)setUp { | |
50 // A convenient place to put a break point if you want to connect instruments. | |
51 [super setUp]; | |
52 } | |
53 | |
54 - (void)testMessagePerformance { | |
55 [self measureBlock:^{ | |
56 for (int i = 0; i < 200; ++i) { | |
57 TestAllTypes* message = [[TestAllTypes alloc] init]; | |
58 [self setAllFields:message repeatedCount:kRepeatedCount]; | |
59 NSData* rawBytes = [message data]; | |
60 [message release]; | |
61 message = [[TestAllTypes alloc] initWithData:rawBytes error:NULL]; | |
62 [message release]; | |
63 } | |
64 }]; | |
65 } | |
66 | |
67 - (void)testExtensionsPerformance { | |
68 [self measureBlock:^{ | |
69 for (int i = 0; i < 200; ++i) { | |
70 TestAllExtensions* message = [[TestAllExtensions alloc] init]; | |
71 [self setAllExtensions:message repeatedCount:kRepeatedCount]; | |
72 NSData* rawBytes = [message data]; | |
73 [message release]; | |
74 TestAllExtensions* message2 = | |
75 [[TestAllExtensions alloc] initWithData:rawBytes error:NULL]; | |
76 [message2 release]; | |
77 } | |
78 }]; | |
79 } | |
80 | |
81 - (void)testPackedTypesPerformance { | |
82 [self measureBlock:^{ | |
83 for (int i = 0; i < 1000; ++i) { | |
84 TestPackedTypes* message = [[TestPackedTypes alloc] init]; | |
85 [self setPackedFields:message repeatedCount:kRepeatedCount]; | |
86 NSData* rawBytes = [message data]; | |
87 [message release]; | |
88 message = [[TestPackedTypes alloc] initWithData:rawBytes error:NULL]; | |
89 [message release]; | |
90 } | |
91 }]; | |
92 } | |
93 | |
94 - (void)testPackedExtensionsPerformance { | |
95 [self measureBlock:^{ | |
96 for (int i = 0; i < 1000; ++i) { | |
97 TestPackedExtensions* message = [[TestPackedExtensions alloc] init]; | |
98 [self setPackedExtensions:message repeatedCount:kRepeatedCount]; | |
99 NSData* rawBytes = [message data]; | |
100 [message release]; | |
101 TestPackedExtensions* message2 = | |
102 [[TestPackedExtensions alloc] initWithData:rawBytes error:NULL]; | |
103 [message2 release]; | |
104 } | |
105 }]; | |
106 } | |
107 | |
108 - (void)testHas { | |
109 TestAllTypes* message = [self allSetRepeatedCount:1]; | |
110 [self measureBlock:^{ | |
111 for (int i = 0; i < 10000; ++i) { | |
112 [message hasOptionalInt32]; | |
113 message.hasOptionalInt32 = NO; | |
114 [message hasOptionalInt32]; | |
115 | |
116 [message hasOptionalInt64]; | |
117 message.hasOptionalInt64 = NO; | |
118 [message hasOptionalInt64]; | |
119 | |
120 [message hasOptionalUint32]; | |
121 message.hasOptionalUint32 = NO; | |
122 [message hasOptionalUint32]; | |
123 | |
124 [message hasOptionalUint64]; | |
125 message.hasOptionalUint64 = NO; | |
126 [message hasOptionalUint64]; | |
127 | |
128 [message hasOptionalSint32]; | |
129 message.hasOptionalSint32 = NO; | |
130 [message hasOptionalSint32]; | |
131 | |
132 [message hasOptionalSint64]; | |
133 message.hasOptionalSint64 = NO; | |
134 [message hasOptionalSint64]; | |
135 | |
136 [message hasOptionalFixed32]; | |
137 message.hasOptionalFixed32 = NO; | |
138 [message hasOptionalFixed32]; | |
139 | |
140 [message hasOptionalFixed64]; | |
141 message.hasOptionalFixed64 = NO; | |
142 [message hasOptionalFixed64]; | |
143 | |
144 [message hasOptionalSfixed32]; | |
145 message.hasOptionalSfixed32 = NO; | |
146 [message hasOptionalSfixed32]; | |
147 | |
148 [message hasOptionalSfixed64]; | |
149 message.hasOptionalSfixed64 = NO; | |
150 [message hasOptionalSfixed64]; | |
151 | |
152 [message hasOptionalFloat]; | |
153 message.hasOptionalFloat = NO; | |
154 [message hasOptionalFloat]; | |
155 | |
156 [message hasOptionalDouble]; | |
157 message.hasOptionalDouble = NO; | |
158 [message hasOptionalDouble]; | |
159 | |
160 [message hasOptionalBool]; | |
161 message.hasOptionalBool = NO; | |
162 [message hasOptionalBool]; | |
163 | |
164 [message hasOptionalString]; | |
165 message.hasOptionalString = NO; | |
166 [message hasOptionalString]; | |
167 | |
168 [message hasOptionalBytes]; | |
169 message.hasOptionalBytes = NO; | |
170 [message hasOptionalBytes]; | |
171 | |
172 [message hasOptionalGroup]; | |
173 message.hasOptionalGroup = NO; | |
174 [message hasOptionalGroup]; | |
175 | |
176 [message hasOptionalNestedMessage]; | |
177 message.hasOptionalNestedMessage = NO; | |
178 [message hasOptionalNestedMessage]; | |
179 | |
180 [message hasOptionalForeignMessage]; | |
181 message.hasOptionalForeignMessage = NO; | |
182 [message hasOptionalForeignMessage]; | |
183 | |
184 [message hasOptionalImportMessage]; | |
185 message.hasOptionalImportMessage = NO; | |
186 [message hasOptionalImportMessage]; | |
187 | |
188 [message.optionalGroup hasA]; | |
189 message.optionalGroup.hasA = NO; | |
190 [message.optionalGroup hasA]; | |
191 | |
192 [message.optionalNestedMessage hasBb]; | |
193 message.optionalNestedMessage.hasBb = NO; | |
194 [message.optionalNestedMessage hasBb]; | |
195 | |
196 [message.optionalForeignMessage hasC]; | |
197 message.optionalForeignMessage.hasC = NO; | |
198 [message.optionalForeignMessage hasC]; | |
199 | |
200 [message.optionalImportMessage hasD]; | |
201 message.optionalImportMessage.hasD = NO; | |
202 [message.optionalImportMessage hasD]; | |
203 | |
204 [message hasOptionalNestedEnum]; | |
205 message.hasOptionalNestedEnum = NO; | |
206 [message hasOptionalNestedEnum]; | |
207 | |
208 [message hasOptionalForeignEnum]; | |
209 message.hasOptionalForeignEnum = NO; | |
210 [message hasOptionalForeignEnum]; | |
211 | |
212 [message hasOptionalImportEnum]; | |
213 message.hasOptionalImportEnum = NO; | |
214 [message hasOptionalImportEnum]; | |
215 | |
216 [message hasOptionalStringPiece]; | |
217 message.hasOptionalStringPiece = NO; | |
218 [message hasOptionalStringPiece]; | |
219 | |
220 [message hasOptionalCord]; | |
221 message.hasOptionalCord = NO; | |
222 [message hasOptionalCord]; | |
223 | |
224 [message hasDefaultInt32]; | |
225 message.hasDefaultInt32 = NO; | |
226 [message hasDefaultInt32]; | |
227 | |
228 [message hasDefaultInt64]; | |
229 message.hasDefaultInt64 = NO; | |
230 [message hasDefaultInt64]; | |
231 | |
232 [message hasDefaultUint32]; | |
233 message.hasDefaultUint32 = NO; | |
234 [message hasDefaultUint32]; | |
235 | |
236 [message hasDefaultUint64]; | |
237 message.hasDefaultUint64 = NO; | |
238 [message hasDefaultUint64]; | |
239 | |
240 [message hasDefaultSint32]; | |
241 message.hasDefaultSint32 = NO; | |
242 [message hasDefaultSint32]; | |
243 | |
244 [message hasDefaultSint64]; | |
245 message.hasDefaultSint64 = NO; | |
246 [message hasDefaultSint64]; | |
247 | |
248 [message hasDefaultFixed32]; | |
249 message.hasDefaultFixed32 = NO; | |
250 [message hasDefaultFixed32]; | |
251 | |
252 [message hasDefaultFixed64]; | |
253 message.hasDefaultFixed64 = NO; | |
254 [message hasDefaultFixed64]; | |
255 | |
256 [message hasDefaultSfixed32]; | |
257 message.hasDefaultSfixed32 = NO; | |
258 [message hasDefaultSfixed32]; | |
259 | |
260 [message hasDefaultSfixed64]; | |
261 message.hasDefaultSfixed64 = NO; | |
262 [message hasDefaultSfixed64]; | |
263 | |
264 [message hasDefaultFloat]; | |
265 message.hasDefaultFloat = NO; | |
266 [message hasDefaultFloat]; | |
267 | |
268 [message hasDefaultDouble]; | |
269 message.hasDefaultDouble = NO; | |
270 [message hasDefaultDouble]; | |
271 | |
272 [message hasDefaultBool]; | |
273 message.hasDefaultBool = NO; | |
274 [message hasDefaultBool]; | |
275 | |
276 [message hasDefaultString]; | |
277 message.hasDefaultString = NO; | |
278 [message hasDefaultString]; | |
279 | |
280 [message hasDefaultBytes]; | |
281 message.hasDefaultBytes = NO; | |
282 [message hasDefaultBytes]; | |
283 | |
284 [message hasDefaultNestedEnum]; | |
285 message.hasDefaultNestedEnum = NO; | |
286 [message hasDefaultNestedEnum]; | |
287 | |
288 [message hasDefaultForeignEnum]; | |
289 message.hasDefaultForeignEnum = NO; | |
290 [message hasDefaultForeignEnum]; | |
291 | |
292 [message hasDefaultImportEnum]; | |
293 message.hasDefaultImportEnum = NO; | |
294 [message hasDefaultImportEnum]; | |
295 | |
296 [message hasDefaultStringPiece]; | |
297 message.hasDefaultStringPiece = NO; | |
298 [message hasDefaultStringPiece]; | |
299 | |
300 [message hasDefaultCord]; | |
301 message.hasDefaultCord = NO; | |
302 [message hasDefaultCord]; | |
303 } | |
304 }]; | |
305 } | |
306 | |
307 @end | |
OLD | NEW |