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