1*1b3f573fSAndroid Build Coastguard Worker #include "benchmarks.pb.h" 2*1b3f573fSAndroid Build Coastguard Worker #include "datasets/google_message1/proto2/benchmark_message1_proto2.pb.h" 3*1b3f573fSAndroid Build Coastguard Worker #include "datasets/google_message1/proto3/benchmark_message1_proto3.pb.h" 4*1b3f573fSAndroid Build Coastguard Worker #include "datasets/google_message2/benchmark_message2.pb.h" 5*1b3f573fSAndroid Build Coastguard Worker #include "datasets/google_message3/benchmark_message3.pb.h" 6*1b3f573fSAndroid Build Coastguard Worker #include "datasets/google_message4/benchmark_message4.pb.h" 7*1b3f573fSAndroid Build Coastguard Worker #include "data_proto2_to_proto3_util.h" 8*1b3f573fSAndroid Build Coastguard Worker 9*1b3f573fSAndroid Build Coastguard Worker #include <fstream> 10*1b3f573fSAndroid Build Coastguard Worker 11*1b3f573fSAndroid Build Coastguard Worker using google::protobuf::util::Proto3DataStripper; 12*1b3f573fSAndroid Build Coastguard Worker ReadFile(const std::string & name)13*1b3f573fSAndroid Build Coastguard Workerstd::string ReadFile(const std::string& name) { 14*1b3f573fSAndroid Build Coastguard Worker std::ifstream file(name.c_str()); 15*1b3f573fSAndroid Build Coastguard Worker GOOGLE_CHECK(file.is_open()) << "Couldn't find file '" 16*1b3f573fSAndroid Build Coastguard Worker << name 17*1b3f573fSAndroid Build Coastguard Worker << "', please make sure you are running this command from the benchmarks" 18*1b3f573fSAndroid Build Coastguard Worker << " directory.\n"; 19*1b3f573fSAndroid Build Coastguard Worker return std::string((std::istreambuf_iterator<char>(file)), 20*1b3f573fSAndroid Build Coastguard Worker std::istreambuf_iterator<char>()); 21*1b3f573fSAndroid Build Coastguard Worker } 22*1b3f573fSAndroid Build Coastguard Worker main(int argc,char * argv[])23*1b3f573fSAndroid Build Coastguard Workerint main(int argc, char *argv[]) { 24*1b3f573fSAndroid Build Coastguard Worker if (argc % 2 == 0 || argc == 1) { 25*1b3f573fSAndroid Build Coastguard Worker std::cerr << "Usage: [input_files] [output_file_names] where " << 26*1b3f573fSAndroid Build Coastguard Worker "input_files are one to one mapping to output_file_names." << 27*1b3f573fSAndroid Build Coastguard Worker std::endl; 28*1b3f573fSAndroid Build Coastguard Worker return 1; 29*1b3f573fSAndroid Build Coastguard Worker } 30*1b3f573fSAndroid Build Coastguard Worker 31*1b3f573fSAndroid Build Coastguard Worker for (int i = argc / 2; i > 0; i--) { 32*1b3f573fSAndroid Build Coastguard Worker const std::string &input_file = argv[i]; 33*1b3f573fSAndroid Build Coastguard Worker const std::string &output_file = argv[i + argc / 2]; 34*1b3f573fSAndroid Build Coastguard Worker 35*1b3f573fSAndroid Build Coastguard Worker std::cerr << "Generating " << input_file 36*1b3f573fSAndroid Build Coastguard Worker << " to " << output_file << std::endl; 37*1b3f573fSAndroid Build Coastguard Worker benchmarks::BenchmarkDataset dataset; 38*1b3f573fSAndroid Build Coastguard Worker Message* message; 39*1b3f573fSAndroid Build Coastguard Worker std::string dataset_payload = ReadFile(input_file); 40*1b3f573fSAndroid Build Coastguard Worker GOOGLE_CHECK(dataset.ParseFromString(dataset_payload)) 41*1b3f573fSAndroid Build Coastguard Worker << "Can' t parse data file " << input_file; 42*1b3f573fSAndroid Build Coastguard Worker 43*1b3f573fSAndroid Build Coastguard Worker if (dataset.message_name() == "benchmarks.proto3.GoogleMessage1") { 44*1b3f573fSAndroid Build Coastguard Worker message = new benchmarks::proto3::GoogleMessage1; 45*1b3f573fSAndroid Build Coastguard Worker } else if (dataset.message_name() == "benchmarks.proto2.GoogleMessage1") { 46*1b3f573fSAndroid Build Coastguard Worker message = new benchmarks::proto2::GoogleMessage1; 47*1b3f573fSAndroid Build Coastguard Worker } else if (dataset.message_name() == "benchmarks.proto2.GoogleMessage2") { 48*1b3f573fSAndroid Build Coastguard Worker message = new benchmarks::proto2::GoogleMessage2; 49*1b3f573fSAndroid Build Coastguard Worker } else if (dataset.message_name() == 50*1b3f573fSAndroid Build Coastguard Worker "benchmarks.google_message3.GoogleMessage3") { 51*1b3f573fSAndroid Build Coastguard Worker message = new benchmarks::google_message3::GoogleMessage3; 52*1b3f573fSAndroid Build Coastguard Worker } else if (dataset.message_name() == 53*1b3f573fSAndroid Build Coastguard Worker "benchmarks.google_message4.GoogleMessage4") { 54*1b3f573fSAndroid Build Coastguard Worker message = new benchmarks::google_message4::GoogleMessage4; 55*1b3f573fSAndroid Build Coastguard Worker } else { 56*1b3f573fSAndroid Build Coastguard Worker std::cerr << "Unknown message type: " << dataset.message_name(); 57*1b3f573fSAndroid Build Coastguard Worker exit(1); 58*1b3f573fSAndroid Build Coastguard Worker } 59*1b3f573fSAndroid Build Coastguard Worker 60*1b3f573fSAndroid Build Coastguard Worker for (int i = 0; i < dataset.payload_size(); i++) { 61*1b3f573fSAndroid Build Coastguard Worker message->ParseFromString(dataset.payload(i)); 62*1b3f573fSAndroid Build Coastguard Worker Proto3DataStripper stripper; 63*1b3f573fSAndroid Build Coastguard Worker stripper.StripMessage(message); 64*1b3f573fSAndroid Build Coastguard Worker dataset.set_payload(i, message->SerializeAsString()); 65*1b3f573fSAndroid Build Coastguard Worker } 66*1b3f573fSAndroid Build Coastguard Worker 67*1b3f573fSAndroid Build Coastguard Worker std::ofstream ofs(output_file); 68*1b3f573fSAndroid Build Coastguard Worker ofs << dataset.SerializeAsString(); 69*1b3f573fSAndroid Build Coastguard Worker ofs.close(); 70*1b3f573fSAndroid Build Coastguard Worker } 71*1b3f573fSAndroid Build Coastguard Worker 72*1b3f573fSAndroid Build Coastguard Worker 73*1b3f573fSAndroid Build Coastguard Worker return 0; 74*1b3f573fSAndroid Build Coastguard Worker } 75