diff options
author | Rich Trott <rtrott@gmail.com> | 2018-06-15 13:03:12 -0700 |
---|---|---|
committer | Rich Trott <rtrott@gmail.com> | 2018-06-19 10:37:38 -0700 |
commit | d10742d8913690819209f96a96d1a7e46a70fffe (patch) | |
tree | 83326315ac76d9981dad39cf6b6d57f4cde33ab9 /benchmark/napi | |
parent | 5d4c5d3f714ebf9a032099cc6000ebaf9e53113f (diff) | |
download | android-node-v8-d10742d8913690819209f96a96d1a7e46a70fffe.tar.gz android-node-v8-d10742d8913690819209f96a96d1a7e46a70fffe.tar.bz2 android-node-v8-d10742d8913690819209f96a96d1a7e46a70fffe.zip |
benchmark: create napi benchmark directory
Move C++ benchmark useful for NAPI to its own directory. This will
isolate the benchmark so it can be excluded from testing that applies to
all other benchmarks but not this one.
PR-URL: https://github.com/nodejs/node/pull/21046
Reviewed-By: Anatoli Papirovski <apapirovski@mac.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'benchmark/napi')
-rw-r--r-- | benchmark/napi/function_call/.gitignore | 1 | ||||
-rw-r--r-- | benchmark/napi/function_call/binding.cc | 14 | ||||
-rw-r--r-- | benchmark/napi/function_call/binding.gyp | 12 | ||||
-rw-r--r-- | benchmark/napi/function_call/index.js | 50 | ||||
-rw-r--r-- | benchmark/napi/function_call/napi_binding.c | 26 |
5 files changed, 103 insertions, 0 deletions
diff --git a/benchmark/napi/function_call/.gitignore b/benchmark/napi/function_call/.gitignore new file mode 100644 index 0000000000..567609b123 --- /dev/null +++ b/benchmark/napi/function_call/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/benchmark/napi/function_call/binding.cc b/benchmark/napi/function_call/binding.cc new file mode 100644 index 0000000000..289a94ac3e --- /dev/null +++ b/benchmark/napi/function_call/binding.cc @@ -0,0 +1,14 @@ +#include <v8.h> +#include <node.h> + +static int c = 0; + +void Hello(const v8::FunctionCallbackInfo<v8::Value>& args) { + args.GetReturnValue().Set(c++); +} + +void Initialize(v8::Local<v8::Object> target) { + NODE_SET_METHOD(target, "hello", Hello); +} + +NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize) diff --git a/benchmark/napi/function_call/binding.gyp b/benchmark/napi/function_call/binding.gyp new file mode 100644 index 0000000000..ac122ed1a0 --- /dev/null +++ b/benchmark/napi/function_call/binding.gyp @@ -0,0 +1,12 @@ +{ + 'targets': [ + { + 'target_name': 'napi_binding', + 'sources': [ 'napi_binding.c' ] + }, + { + 'target_name': 'binding', + 'sources': [ 'binding.cc' ] + } + ] +} diff --git a/benchmark/napi/function_call/index.js b/benchmark/napi/function_call/index.js new file mode 100644 index 0000000000..cbc512c972 --- /dev/null +++ b/benchmark/napi/function_call/index.js @@ -0,0 +1,50 @@ +// show the difference between calling a short js function +// relative to a comparable C++ function. +// Reports n of calls per second. +// Note that JS speed goes up, while cxx speed stays about the same. +'use strict'; + +const assert = require('assert'); +const common = require('../../common.js'); + +// this fails when we try to open with a different version of node, +// which is quite common for benchmarks. so in that case, just +// abort quietly. + +try { + var binding = require('./build/Release/binding'); +} catch (er) { + console.error('misc/function_call.js Binding failed to load'); + process.exit(0); +} +const cxx = binding.hello; + +let napi_binding; +try { + napi_binding = require('./build/Release/napi_binding'); +} catch (er) { + console.error('misc/function_call/index.js NAPI-Binding failed to load'); + process.exit(0); +} +const napi = napi_binding.hello; + +var c = 0; +function js() { + return c++; +} + +assert(js() === cxx()); + +const bench = common.createBenchmark(main, { + type: ['js', 'cxx', 'napi'], + n: [1e6, 1e7, 5e7] +}); + +function main({ n, type }) { + const fn = type === 'cxx' ? cxx : type === 'napi' ? napi : js; + bench.start(); + for (var i = 0; i < n; i++) { + fn(); + } + bench.end(n); +} diff --git a/benchmark/napi/function_call/napi_binding.c b/benchmark/napi/function_call/napi_binding.c new file mode 100644 index 0000000000..d97170e0fc --- /dev/null +++ b/benchmark/napi/function_call/napi_binding.c @@ -0,0 +1,26 @@ +#include <assert.h> +#include <node_api.h> + +static int32_t increment = 0; + +static napi_value Hello(napi_env env, napi_callback_info info) { + napi_value result; + napi_status status = napi_create_int32(env, increment++, &result); + assert(status == napi_ok); + return result; +} + +NAPI_MODULE_INIT() { + napi_value hello; + napi_status status = + napi_create_function(env, + "hello", + NAPI_AUTO_LENGTH, + Hello, + NULL, + &hello); + assert(status == napi_ok); + status = napi_set_named_property(env, exports, "hello", hello); + assert(status == napi_ok); + return exports; +} |