Protocol Buffers - Google's data interchange format (grpc依赖)
https://developers.google.com/protocol-buffers/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
307 lines
9.3 KiB
307 lines
9.3 KiB
// Protocol Buffers - Google's data interchange format |
|
// Copyright 2013 Google Inc. All rights reserved. |
|
// https://developers.google.com/protocol-buffers/ |
|
// |
|
// Redistribution and use in source and binary forms, with or without |
|
// modification, are permitted provided that the following conditions are |
|
// met: |
|
// |
|
// * Redistributions of source code must retain the above copyright |
|
// notice, this list of conditions and the following disclaimer. |
|
// * Redistributions in binary form must reproduce the above |
|
// copyright notice, this list of conditions and the following disclaimer |
|
// in the documentation and/or other materials provided with the |
|
// distribution. |
|
// * Neither the name of Google Inc. nor the names of its |
|
// contributors may be used to endorse or promote products derived from |
|
// this software without specific prior written permission. |
|
// |
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
|
|
|
#import "GPBTestUtilities.h" |
|
#import "google/protobuf/Unittest.pbobjc.h" |
|
#import "google/protobuf/UnittestImport.pbobjc.h" |
|
#import "google/protobuf/UnittestObjc.pbobjc.h" |
|
|
|
// |
|
// This file really just uses the unittests framework as a testbed to |
|
// run some simple performance tests. The data can then be used to help |
|
// evaluate changes to the runtime. |
|
// |
|
|
|
static const uint32_t kRepeatedCount = 100; |
|
|
|
@interface PerfTests : GPBTestCase |
|
@end |
|
|
|
@implementation PerfTests |
|
|
|
- (void)setUp { |
|
// A convenient place to put a break point if you want to connect instruments. |
|
[super setUp]; |
|
} |
|
|
|
- (void)testMessagePerformance { |
|
[self measureBlock:^{ |
|
for (int i = 0; i < 200; ++i) { |
|
TestAllTypes* message = [[TestAllTypes alloc] init]; |
|
[self setAllFields:message repeatedCount:kRepeatedCount]; |
|
NSData* rawBytes = [message data]; |
|
[message release]; |
|
message = [[TestAllTypes alloc] initWithData:rawBytes error:NULL]; |
|
[message release]; |
|
} |
|
}]; |
|
} |
|
|
|
- (void)testExtensionsPerformance { |
|
[self measureBlock:^{ |
|
for (int i = 0; i < 200; ++i) { |
|
TestAllExtensions* message = [[TestAllExtensions alloc] init]; |
|
[self setAllExtensions:message repeatedCount:kRepeatedCount]; |
|
NSData* rawBytes = [message data]; |
|
[message release]; |
|
TestAllExtensions* message2 = |
|
[[TestAllExtensions alloc] initWithData:rawBytes error:NULL]; |
|
[message2 release]; |
|
} |
|
}]; |
|
} |
|
|
|
- (void)testPackedTypesPerformance { |
|
[self measureBlock:^{ |
|
for (int i = 0; i < 1000; ++i) { |
|
TestPackedTypes* message = [[TestPackedTypes alloc] init]; |
|
[self setPackedFields:message repeatedCount:kRepeatedCount]; |
|
NSData* rawBytes = [message data]; |
|
[message release]; |
|
message = [[TestPackedTypes alloc] initWithData:rawBytes error:NULL]; |
|
[message release]; |
|
} |
|
}]; |
|
} |
|
|
|
- (void)testPackedExtensionsPerformance { |
|
[self measureBlock:^{ |
|
for (int i = 0; i < 1000; ++i) { |
|
TestPackedExtensions* message = [[TestPackedExtensions alloc] init]; |
|
[self setPackedExtensions:message repeatedCount:kRepeatedCount]; |
|
NSData* rawBytes = [message data]; |
|
[message release]; |
|
TestPackedExtensions* message2 = |
|
[[TestPackedExtensions alloc] initWithData:rawBytes error:NULL]; |
|
[message2 release]; |
|
} |
|
}]; |
|
} |
|
|
|
- (void)testHas { |
|
TestAllTypes* message = [self allSetRepeatedCount:1]; |
|
[self measureBlock:^{ |
|
for (int i = 0; i < 10000; ++i) { |
|
[message hasOptionalInt32]; |
|
message.hasOptionalInt32 = NO; |
|
[message hasOptionalInt32]; |
|
|
|
[message hasOptionalInt64]; |
|
message.hasOptionalInt64 = NO; |
|
[message hasOptionalInt64]; |
|
|
|
[message hasOptionalUint32]; |
|
message.hasOptionalUint32 = NO; |
|
[message hasOptionalUint32]; |
|
|
|
[message hasOptionalUint64]; |
|
message.hasOptionalUint64 = NO; |
|
[message hasOptionalUint64]; |
|
|
|
[message hasOptionalSint32]; |
|
message.hasOptionalSint32 = NO; |
|
[message hasOptionalSint32]; |
|
|
|
[message hasOptionalSint64]; |
|
message.hasOptionalSint64 = NO; |
|
[message hasOptionalSint64]; |
|
|
|
[message hasOptionalFixed32]; |
|
message.hasOptionalFixed32 = NO; |
|
[message hasOptionalFixed32]; |
|
|
|
[message hasOptionalFixed64]; |
|
message.hasOptionalFixed64 = NO; |
|
[message hasOptionalFixed64]; |
|
|
|
[message hasOptionalSfixed32]; |
|
message.hasOptionalSfixed32 = NO; |
|
[message hasOptionalSfixed32]; |
|
|
|
[message hasOptionalSfixed64]; |
|
message.hasOptionalSfixed64 = NO; |
|
[message hasOptionalSfixed64]; |
|
|
|
[message hasOptionalFloat]; |
|
message.hasOptionalFloat = NO; |
|
[message hasOptionalFloat]; |
|
|
|
[message hasOptionalDouble]; |
|
message.hasOptionalDouble = NO; |
|
[message hasOptionalDouble]; |
|
|
|
[message hasOptionalBool]; |
|
message.hasOptionalBool = NO; |
|
[message hasOptionalBool]; |
|
|
|
[message hasOptionalString]; |
|
message.hasOptionalString = NO; |
|
[message hasOptionalString]; |
|
|
|
[message hasOptionalBytes]; |
|
message.hasOptionalBytes = NO; |
|
[message hasOptionalBytes]; |
|
|
|
[message hasOptionalGroup]; |
|
message.hasOptionalGroup = NO; |
|
[message hasOptionalGroup]; |
|
|
|
[message hasOptionalNestedMessage]; |
|
message.hasOptionalNestedMessage = NO; |
|
[message hasOptionalNestedMessage]; |
|
|
|
[message hasOptionalForeignMessage]; |
|
message.hasOptionalForeignMessage = NO; |
|
[message hasOptionalForeignMessage]; |
|
|
|
[message hasOptionalImportMessage]; |
|
message.hasOptionalImportMessage = NO; |
|
[message hasOptionalImportMessage]; |
|
|
|
[message.optionalGroup hasA]; |
|
message.optionalGroup.hasA = NO; |
|
[message.optionalGroup hasA]; |
|
|
|
[message.optionalNestedMessage hasBb]; |
|
message.optionalNestedMessage.hasBb = NO; |
|
[message.optionalNestedMessage hasBb]; |
|
|
|
[message.optionalForeignMessage hasC]; |
|
message.optionalForeignMessage.hasC = NO; |
|
[message.optionalForeignMessage hasC]; |
|
|
|
[message.optionalImportMessage hasD]; |
|
message.optionalImportMessage.hasD = NO; |
|
[message.optionalImportMessage hasD]; |
|
|
|
[message hasOptionalNestedEnum]; |
|
message.hasOptionalNestedEnum = NO; |
|
[message hasOptionalNestedEnum]; |
|
|
|
[message hasOptionalForeignEnum]; |
|
message.hasOptionalForeignEnum = NO; |
|
[message hasOptionalForeignEnum]; |
|
|
|
[message hasOptionalImportEnum]; |
|
message.hasOptionalImportEnum = NO; |
|
[message hasOptionalImportEnum]; |
|
|
|
[message hasOptionalStringPiece]; |
|
message.hasOptionalStringPiece = NO; |
|
[message hasOptionalStringPiece]; |
|
|
|
[message hasOptionalCord]; |
|
message.hasOptionalCord = NO; |
|
[message hasOptionalCord]; |
|
|
|
[message hasDefaultInt32]; |
|
message.hasDefaultInt32 = NO; |
|
[message hasDefaultInt32]; |
|
|
|
[message hasDefaultInt64]; |
|
message.hasDefaultInt64 = NO; |
|
[message hasDefaultInt64]; |
|
|
|
[message hasDefaultUint32]; |
|
message.hasDefaultUint32 = NO; |
|
[message hasDefaultUint32]; |
|
|
|
[message hasDefaultUint64]; |
|
message.hasDefaultUint64 = NO; |
|
[message hasDefaultUint64]; |
|
|
|
[message hasDefaultSint32]; |
|
message.hasDefaultSint32 = NO; |
|
[message hasDefaultSint32]; |
|
|
|
[message hasDefaultSint64]; |
|
message.hasDefaultSint64 = NO; |
|
[message hasDefaultSint64]; |
|
|
|
[message hasDefaultFixed32]; |
|
message.hasDefaultFixed32 = NO; |
|
[message hasDefaultFixed32]; |
|
|
|
[message hasDefaultFixed64]; |
|
message.hasDefaultFixed64 = NO; |
|
[message hasDefaultFixed64]; |
|
|
|
[message hasDefaultSfixed32]; |
|
message.hasDefaultSfixed32 = NO; |
|
[message hasDefaultSfixed32]; |
|
|
|
[message hasDefaultSfixed64]; |
|
message.hasDefaultSfixed64 = NO; |
|
[message hasDefaultSfixed64]; |
|
|
|
[message hasDefaultFloat]; |
|
message.hasDefaultFloat = NO; |
|
[message hasDefaultFloat]; |
|
|
|
[message hasDefaultDouble]; |
|
message.hasDefaultDouble = NO; |
|
[message hasDefaultDouble]; |
|
|
|
[message hasDefaultBool]; |
|
message.hasDefaultBool = NO; |
|
[message hasDefaultBool]; |
|
|
|
[message hasDefaultString]; |
|
message.hasDefaultString = NO; |
|
[message hasDefaultString]; |
|
|
|
[message hasDefaultBytes]; |
|
message.hasDefaultBytes = NO; |
|
[message hasDefaultBytes]; |
|
|
|
[message hasDefaultNestedEnum]; |
|
message.hasDefaultNestedEnum = NO; |
|
[message hasDefaultNestedEnum]; |
|
|
|
[message hasDefaultForeignEnum]; |
|
message.hasDefaultForeignEnum = NO; |
|
[message hasDefaultForeignEnum]; |
|
|
|
[message hasDefaultImportEnum]; |
|
message.hasDefaultImportEnum = NO; |
|
[message hasDefaultImportEnum]; |
|
|
|
[message hasDefaultStringPiece]; |
|
message.hasDefaultStringPiece = NO; |
|
[message hasDefaultStringPiece]; |
|
|
|
[message hasDefaultCord]; |
|
message.hasDefaultCord = NO; |
|
[message hasDefaultCord]; |
|
} |
|
}]; |
|
} |
|
|
|
@end
|
|
|