34 #include "benchmarks.pb.h"
35 #include "datasets/google_message1/proto2/benchmark_message1_proto2.pb.h"
36 #include "datasets/google_message1/proto3/benchmark_message1_proto3.pb.h"
37 #include "datasets/google_message2/benchmark_message2.pb.h"
38 #include "datasets/google_message3/benchmark_message3.pb.h"
39 #include "datasets/google_message4/benchmark_message4.pb.h"
42 #define PREFIX "dataset."
45 using benchmarks::BenchmarkDataset;
46 using google::protobuf::Arena;
55 for (
int i = 0;
i < dataset.payload_size();
i++) {
61 dataset.message_name());
64 std::cerr <<
"Couldn't find message named '" << dataset.message_name()
68 prototype_ = MessageFactory::generated_factory()->GetPrototype(
d);
69 SetName((dataset.name() + suffix).c_str());
98 :
Fixture(dataset,
"_parse_new") {}
107 total += payload.size();
108 m.ParseFromString(payload);
119 :
Fixture(dataset,
"_parse_newarena") {}
128 Message*
m = Arena::CreateMessage<T>(&arena);
130 total += payload.size();
131 m->ParseFromString(payload);
142 :
Fixture(dataset,
"_parse_reuse") {}
151 total += payload.size();
152 m.ParseFromString(payload);
163 :
Fixture(dataset,
"_serialize") {
195 std::ifstream file(
name.c_str());
197 "', please make sure you are running "
198 "this command from the benchmarks/ "
200 return std::string((std::istreambuf_iterator<char>(file)),
201 std::istreambuf_iterator<char>());
217 BenchmarkDataset dataset;
220 if (dataset.message_name() ==
"benchmarks.proto3.GoogleMessage1") {
221 RegisterBenchmarksForType<benchmarks::proto3::GoogleMessage1>(dataset);
222 }
else if (dataset.message_name() ==
"benchmarks.proto2.GoogleMessage1") {
223 RegisterBenchmarksForType<benchmarks::proto2::GoogleMessage1>(dataset);
224 }
else if (dataset.message_name() ==
"benchmarks.proto2.GoogleMessage2") {
225 RegisterBenchmarksForType<benchmarks::proto2::GoogleMessage2>(dataset);
226 }
else if (dataset.message_name() ==
227 "benchmarks.google_message3.GoogleMessage3") {
229 <benchmarks::google_message3::GoogleMessage3>(dataset);
230 }
else if (dataset.message_name() ==
231 "benchmarks.google_message4.GoogleMessage4") {
233 <benchmarks::google_message4::GoogleMessage4>(dataset);
235 std::cerr <<
"Unknown message type: " << dataset.message_name();
240 int main(
int argc,
char *argv[]) {
243 std::cerr <<
"Usage: ./cpp-benchmark <input data>" << std::endl;
244 std::cerr <<
"input data is in the format of \"benchmarks.proto\""
248 for (
int i = 1;
i < argc;
i++) {