1*1b3f573fSAndroid Build Coastguard Workervar root = require("./generated_bundle_code.js"); 2*1b3f573fSAndroid Build Coastguard Workervar fs = require('fs'); 3*1b3f573fSAndroid Build Coastguard Workervar benchmark = require("./node_modules/benchmark"); 4*1b3f573fSAndroid Build Coastguard Workervar benchmarkSuite = require("./benchmark_suite.js"); 5*1b3f573fSAndroid Build Coastguard Worker 6*1b3f573fSAndroid Build Coastguard Worker 7*1b3f573fSAndroid Build Coastguard Workerfunction getNewPrototype(name) { 8*1b3f573fSAndroid Build Coastguard Worker var message = eval("root." + name); 9*1b3f573fSAndroid Build Coastguard Worker if (typeof(message) == "undefined") { 10*1b3f573fSAndroid Build Coastguard Worker throw "type " + name + " is undefined"; 11*1b3f573fSAndroid Build Coastguard Worker } 12*1b3f573fSAndroid Build Coastguard Worker return message; 13*1b3f573fSAndroid Build Coastguard Worker} 14*1b3f573fSAndroid Build Coastguard Worker 15*1b3f573fSAndroid Build Coastguard Worker 16*1b3f573fSAndroid Build Coastguard Workervar results = []; 17*1b3f573fSAndroid Build Coastguard Worker 18*1b3f573fSAndroid Build Coastguard Workerconsole.log("#####################################################"); 19*1b3f573fSAndroid Build Coastguard Workerconsole.log("ProtobufJs Benchmark: "); 20*1b3f573fSAndroid Build Coastguard Workerprocess.argv.forEach(function(filename, index) { 21*1b3f573fSAndroid Build Coastguard Worker if (index < 2) { 22*1b3f573fSAndroid Build Coastguard Worker return; 23*1b3f573fSAndroid Build Coastguard Worker } 24*1b3f573fSAndroid Build Coastguard Worker var benchmarkDataset = 25*1b3f573fSAndroid Build Coastguard Worker root.benchmarks.BenchmarkDataset.decode(fs.readFileSync(filename)); 26*1b3f573fSAndroid Build Coastguard Worker var messageList = []; 27*1b3f573fSAndroid Build Coastguard Worker var totalBytes = 0; 28*1b3f573fSAndroid Build Coastguard Worker benchmarkDataset.payload.forEach(function(onePayload) { 29*1b3f573fSAndroid Build Coastguard Worker var message = getNewPrototype(benchmarkDataset.messageName); 30*1b3f573fSAndroid Build Coastguard Worker messageList.push(message.decode(onePayload)); 31*1b3f573fSAndroid Build Coastguard Worker totalBytes += onePayload.length; 32*1b3f573fSAndroid Build Coastguard Worker }); 33*1b3f573fSAndroid Build Coastguard Worker 34*1b3f573fSAndroid Build Coastguard Worker var scenarios = benchmarkSuite.newBenchmark( 35*1b3f573fSAndroid Build Coastguard Worker benchmarkDataset.messageName, filename, "protobufjs"); 36*1b3f573fSAndroid Build Coastguard Worker scenarios.suite 37*1b3f573fSAndroid Build Coastguard Worker .add("protobuf.js static decoding", function() { 38*1b3f573fSAndroid Build Coastguard Worker benchmarkDataset.payload.forEach(function(onePayload) { 39*1b3f573fSAndroid Build Coastguard Worker var protoType = getNewPrototype(benchmarkDataset.messageName); 40*1b3f573fSAndroid Build Coastguard Worker protoType.decode(onePayload); 41*1b3f573fSAndroid Build Coastguard Worker }); 42*1b3f573fSAndroid Build Coastguard Worker }) 43*1b3f573fSAndroid Build Coastguard Worker .add("protobuf.js static encoding", function() { 44*1b3f573fSAndroid Build Coastguard Worker var protoType = getNewPrototype(benchmarkDataset.messageName); 45*1b3f573fSAndroid Build Coastguard Worker messageList.forEach(function(message) { 46*1b3f573fSAndroid Build Coastguard Worker protoType.encode(message).finish(); 47*1b3f573fSAndroid Build Coastguard Worker }); 48*1b3f573fSAndroid Build Coastguard Worker }) 49*1b3f573fSAndroid Build Coastguard Worker .run({"Async": false}); 50*1b3f573fSAndroid Build Coastguard Worker 51*1b3f573fSAndroid Build Coastguard Worker results.push({ 52*1b3f573fSAndroid Build Coastguard Worker filename: filename, 53*1b3f573fSAndroid Build Coastguard Worker benchmarks: { 54*1b3f573fSAndroid Build Coastguard Worker protobufjs_decoding: scenarios.benches[0] * totalBytes, 55*1b3f573fSAndroid Build Coastguard Worker protobufjs_encoding: scenarios.benches[1] * totalBytes 56*1b3f573fSAndroid Build Coastguard Worker } 57*1b3f573fSAndroid Build Coastguard Worker }) 58*1b3f573fSAndroid Build Coastguard Worker 59*1b3f573fSAndroid Build Coastguard Worker console.log("Throughput for decoding: " 60*1b3f573fSAndroid Build Coastguard Worker + scenarios.benches[0] * totalBytes / 1024 / 1024 + "MB/s" ); 61*1b3f573fSAndroid Build Coastguard Worker console.log("Throughput for encoding: " 62*1b3f573fSAndroid Build Coastguard Worker + scenarios.benches[1] * totalBytes / 1024 / 1024 + "MB/s" ); 63*1b3f573fSAndroid Build Coastguard Worker console.log(""); 64*1b3f573fSAndroid Build Coastguard Worker}); 65*1b3f573fSAndroid Build Coastguard Workerconsole.log("#####################################################"); 66*1b3f573fSAndroid Build Coastguard Worker 67