1*1b3f573fSAndroid Build Coastguard Workerrequire('./datasets/google_message1/proto2/benchmark_message1_proto2_pb.js'); 2*1b3f573fSAndroid Build Coastguard Workerrequire('./datasets/google_message1/proto3/benchmark_message1_proto3_pb.js'); 3*1b3f573fSAndroid Build Coastguard Workerrequire('./datasets/google_message2/benchmark_message2_pb.js'); 4*1b3f573fSAndroid Build Coastguard Workerrequire('./datasets/google_message3/benchmark_message3_pb.js'); 5*1b3f573fSAndroid Build Coastguard Workerrequire('./datasets/google_message4/benchmark_message4_pb.js'); 6*1b3f573fSAndroid Build Coastguard Workerrequire('./benchmarks_pb.js'); 7*1b3f573fSAndroid Build Coastguard Worker 8*1b3f573fSAndroid Build Coastguard Workervar fs = require('fs'); 9*1b3f573fSAndroid Build Coastguard Workervar benchmarkSuite = require("./benchmark_suite.js"); 10*1b3f573fSAndroid Build Coastguard Worker 11*1b3f573fSAndroid Build Coastguard Worker 12*1b3f573fSAndroid Build Coastguard Workerfunction getNewPrototype(name) { 13*1b3f573fSAndroid Build Coastguard Worker var message = eval("proto." + name); 14*1b3f573fSAndroid Build Coastguard Worker if (typeof(message) == "undefined") { 15*1b3f573fSAndroid Build Coastguard Worker throw "type " + name + " is undefined"; 16*1b3f573fSAndroid Build Coastguard Worker } 17*1b3f573fSAndroid Build Coastguard Worker return message; 18*1b3f573fSAndroid Build Coastguard Worker} 19*1b3f573fSAndroid Build Coastguard Worker 20*1b3f573fSAndroid Build Coastguard Workervar results = []; 21*1b3f573fSAndroid Build Coastguard Workervar json_file = ""; 22*1b3f573fSAndroid Build Coastguard Worker 23*1b3f573fSAndroid Build Coastguard Workerconsole.log("#####################################################"); 24*1b3f573fSAndroid Build Coastguard Workerconsole.log("Js Benchmark: "); 25*1b3f573fSAndroid Build Coastguard Workerprocess.argv.forEach(function(filename, index) { 26*1b3f573fSAndroid Build Coastguard Worker if (index < 2) { 27*1b3f573fSAndroid Build Coastguard Worker return; 28*1b3f573fSAndroid Build Coastguard Worker } 29*1b3f573fSAndroid Build Coastguard Worker if (filename.indexOf("--json_output") != -1) { 30*1b3f573fSAndroid Build Coastguard Worker json_file = filename.replace(/^--json_output=/, ''); 31*1b3f573fSAndroid Build Coastguard Worker return; 32*1b3f573fSAndroid Build Coastguard Worker } 33*1b3f573fSAndroid Build Coastguard Worker 34*1b3f573fSAndroid Build Coastguard Worker var benchmarkDataset = 35*1b3f573fSAndroid Build Coastguard Worker proto.benchmarks.BenchmarkDataset.deserializeBinary(fs.readFileSync(filename)); 36*1b3f573fSAndroid Build Coastguard Worker var messageList = []; 37*1b3f573fSAndroid Build Coastguard Worker var totalBytes = 0; 38*1b3f573fSAndroid Build Coastguard Worker benchmarkDataset.getPayloadList().forEach(function(onePayload) { 39*1b3f573fSAndroid Build Coastguard Worker var message = getNewPrototype(benchmarkDataset.getMessageName()); 40*1b3f573fSAndroid Build Coastguard Worker messageList.push(message.deserializeBinary(onePayload)); 41*1b3f573fSAndroid Build Coastguard Worker totalBytes += onePayload.length; 42*1b3f573fSAndroid Build Coastguard Worker }); 43*1b3f573fSAndroid Build Coastguard Worker 44*1b3f573fSAndroid Build Coastguard Worker var scenarios = benchmarkSuite.newBenchmark( 45*1b3f573fSAndroid Build Coastguard Worker benchmarkDataset.getMessageName(), filename, "js"); 46*1b3f573fSAndroid Build Coastguard Worker scenarios.suite 47*1b3f573fSAndroid Build Coastguard Worker .add("js deserialize", function() { 48*1b3f573fSAndroid Build Coastguard Worker benchmarkDataset.getPayloadList().forEach(function(onePayload) { 49*1b3f573fSAndroid Build Coastguard Worker var protoType = getNewPrototype(benchmarkDataset.getMessageName()); 50*1b3f573fSAndroid Build Coastguard Worker protoType.deserializeBinary(onePayload); 51*1b3f573fSAndroid Build Coastguard Worker }); 52*1b3f573fSAndroid Build Coastguard Worker }) 53*1b3f573fSAndroid Build Coastguard Worker .add("js serialize", function() { 54*1b3f573fSAndroid Build Coastguard Worker var protoType = getNewPrototype(benchmarkDataset.getMessageName()); 55*1b3f573fSAndroid Build Coastguard Worker messageList.forEach(function(message) { 56*1b3f573fSAndroid Build Coastguard Worker message.serializeBinary(); 57*1b3f573fSAndroid Build Coastguard Worker }); 58*1b3f573fSAndroid Build Coastguard Worker }) 59*1b3f573fSAndroid Build Coastguard Worker .run({"Async": false}); 60*1b3f573fSAndroid Build Coastguard Worker 61*1b3f573fSAndroid Build Coastguard Worker results.push({ 62*1b3f573fSAndroid Build Coastguard Worker filename: filename, 63*1b3f573fSAndroid Build Coastguard Worker benchmarks: { 64*1b3f573fSAndroid Build Coastguard Worker protobufjs_decoding: scenarios.benches[0] * totalBytes / 1024 / 1024, 65*1b3f573fSAndroid Build Coastguard Worker protobufjs_encoding: scenarios.benches[1] * totalBytes / 1024 / 1024 66*1b3f573fSAndroid Build Coastguard Worker } 67*1b3f573fSAndroid Build Coastguard Worker }) 68*1b3f573fSAndroid Build Coastguard Worker 69*1b3f573fSAndroid Build Coastguard Worker console.log("Throughput for deserialize: " 70*1b3f573fSAndroid Build Coastguard Worker + scenarios.benches[0] * totalBytes / 1024 / 1024 + "MB/s" ); 71*1b3f573fSAndroid Build Coastguard Worker console.log("Throughput for serialize: " 72*1b3f573fSAndroid Build Coastguard Worker + scenarios.benches[1] * totalBytes / 1024 / 1024 + "MB/s" ); 73*1b3f573fSAndroid Build Coastguard Worker console.log(""); 74*1b3f573fSAndroid Build Coastguard Worker}); 75*1b3f573fSAndroid Build Coastguard Workerconsole.log("#####################################################"); 76*1b3f573fSAndroid Build Coastguard Worker 77*1b3f573fSAndroid Build Coastguard Workerif (json_file != "") { 78*1b3f573fSAndroid Build Coastguard Worker fs.writeFile(json_file, JSON.stringify(results), (err) => { 79*1b3f573fSAndroid Build Coastguard Worker if (err) throw err; 80*1b3f573fSAndroid Build Coastguard Worker }); 81*1b3f573fSAndroid Build Coastguard Worker} 82*1b3f573fSAndroid Build Coastguard Worker 83