xref: /aosp_15_r20/external/protobuf/benchmarks/protobuf.js/protobufjs_benchmark.js (revision 1b3f573f81763fcece89efc2b6a5209149e44ab8)
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