mirror of
https://github.com/protobufjs/protobuf.js.git
synced 2025-12-08 20:58:55 +00:00
103 lines
3.5 KiB
JavaScript
103 lines
3.5 KiB
JavaScript
"use strict";
|
|
|
|
var fs = require("fs"),
|
|
path = require("path");
|
|
|
|
// A profiling stub to measure encoding / decoding performance using benchmark data.
|
|
|
|
var commands = ["encode", "decode", "encode-browser", "decode-browser", "fromjson"];
|
|
if (commands.indexOf(process.argv[2]) < 0) { // 0: node, 1: prof.js
|
|
process.stderr.write("usage: " + path.basename(process.argv[1]) + " <" + commands.join("|") + "> [iterations=10000000]\n");
|
|
return;
|
|
}
|
|
|
|
// Spin up a node process with profiling enabled and process the generated log
|
|
if (process.execArgv.indexOf("--prof") < 0) {
|
|
process.stdout.write("cleaning up old logs ...\n");
|
|
var child_process = require("child_process");
|
|
var logRe = /^isolate-[0-9A-F]+-v8\.log$/;
|
|
fs.readdirSync(process.cwd()).forEach(function readdirSync_it(file) {
|
|
if (logRe.test(file))
|
|
fs.unlink(file);
|
|
});
|
|
process.stdout.write("generating profile (may take a while) ...\n");
|
|
child_process.execSync("node --prof --trace-deopt " + process.execArgv.join(" ") + " " + process.argv.slice(1).join(" "), {
|
|
cwd: process.cwd(),
|
|
stdio: "inherit"
|
|
});
|
|
process.stdout.write("processing profile ...\n");
|
|
fs.readdirSync(process.cwd()).forEach(function readdirSync_it(file) {
|
|
if (logRe.test(file)) {
|
|
child_process.execSync("node --prof-process " + file, {
|
|
cwd: process.cwd(),
|
|
stdio: "inherit"
|
|
});
|
|
// fs.unlink(file);
|
|
}
|
|
});
|
|
process.stdout.write("done.\n");
|
|
return;
|
|
}
|
|
|
|
// Actual profiling code
|
|
var protobuf = require("..");
|
|
|
|
// protobuf.util.codegen.verbose = true;
|
|
|
|
var root, json;
|
|
|
|
if (process.argv[2] === "fromjson") {
|
|
json = require("../tests/data/test.json");
|
|
if (process.argv.indexOf("--resolve") < 0)
|
|
for (var k = 0; k < 10000; ++k)
|
|
protobuf.Root.fromJSON(json);
|
|
else
|
|
for (var l = 0; l < 10000; ++l)
|
|
protobuf.Root.fromJSON(json).resolveAll();
|
|
return;
|
|
}
|
|
|
|
var Test, data, count;
|
|
|
|
if (process.argv.indexOf("--alt") < 0) {
|
|
root = protobuf.parse(fs.readFileSync(require.resolve("../bench/data/bench.proto")).toString("utf8")).root;
|
|
Test = root.lookup("Test");
|
|
json = JSON.stringify(root);
|
|
data = require("../bench/data/bench.json");
|
|
count = 10000000;
|
|
process.stdout.write("bench.proto");
|
|
} else {
|
|
root = protobuf.parse(fs.readFileSync(require.resolve("../tests/data/mapbox/vector_tile.proto")).toString("utf8")).root;
|
|
Test = root.lookup("vector_tile.Tile");
|
|
data = Test.decode(fs.readFileSync(require.resolve("../tests/data/mapbox/vector_tile.bin")));
|
|
count = 1000;
|
|
process.stdout.write("vector_tile.proto");
|
|
}
|
|
|
|
if (process.argv.length > 3 && /^\d+$/.test(process.argv[3]))
|
|
count = parseInt(process.argv[3], 10);
|
|
process.stdout.write(" x " + count + "\n");
|
|
|
|
function setupBrowser() {
|
|
protobuf.Writer.create = function create_browser() { return new protobuf.Writer(); };
|
|
protobuf.Reader.create = function create_browser(buf) { return new protobuf.Reader(buf); };
|
|
}
|
|
|
|
switch (process.argv[2]) {
|
|
case "encode-browser":
|
|
setupBrowser();
|
|
// eslint-disable-next-line no-fallthrough
|
|
case "encode":
|
|
for (var i = 0; i < count; ++i)
|
|
Test.encode(data).finish();
|
|
break;
|
|
case "decode-browser":
|
|
setupBrowser();
|
|
// eslint-disable-next-line no-fallthrough
|
|
case "decode":
|
|
var buf = Test.encode(data).finish();
|
|
for (var j = 0; j < count; ++j)
|
|
Test.decode(buf);
|
|
break;
|
|
}
|