diff --git a/benchmark/function_call/bench.js b/benchmark/function_call/bench.js deleted file mode 100644 index 55e6ea116f..0000000000 --- a/benchmark/function_call/bench.js +++ /dev/null @@ -1,43 +0,0 @@ -var binding = require('./build/default/binding'); - -c = 0 - -function js() { - return c++; //(new Date()).getTime(); -} - -var cxx = binding.hello; - -var i, N = 100000000; - -console.log(js()); -console.log(cxx()); - - - -var start = new Date(); -for (i = 0; i < N; i++) { - js(); -} -var jsDiff = new Date() - start; -console.log(N +" JS function calls: " + jsDiff); - - -var start = new Date(); -for (i = 0; i < N; i++) { - cxx(); -} -var cxxDiff = new Date() - start; -console.log(N +" C++ function calls: " + cxxDiff); - -function toMicro (diff) { - return (diff / N) * 1000000; -} - -console.log("\nJS function call speed: %d microseconds", toMicro(jsDiff)); -console.log("C++ function call speed: %d microseconds", toMicro(cxxDiff)); - - -console.log("\nJS speedup " + (cxxDiff / jsDiff)); - - diff --git a/benchmark/function_call/wscript b/benchmark/function_call/wscript deleted file mode 100644 index 3db367fe0e..0000000000 --- a/benchmark/function_call/wscript +++ /dev/null @@ -1,15 +0,0 @@ -srcdir = '.' -blddir = 'build' -VERSION = '0.0.1' - -def set_options(opt): - opt.tool_options('compiler_cxx') - -def configure(conf): - conf.check_tool('compiler_cxx') - conf.check_tool('node_addon') - -def build(bld): - obj = bld.new_task_gen('cxx', 'shlib', 'node_addon') - obj.target = 'binding' - obj.source = 'binding.cc' diff --git a/benchmark/misc/function_call/.gitignore b/benchmark/misc/function_call/.gitignore new file mode 100644 index 0000000000..567609b123 --- /dev/null +++ b/benchmark/misc/function_call/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/benchmark/misc/function_call/Makefile b/benchmark/misc/function_call/Makefile new file mode 100644 index 0000000000..9dc1f30329 --- /dev/null +++ b/benchmark/misc/function_call/Makefile @@ -0,0 +1,2 @@ +binding: + node-gyp rebuild --nodedir=../../.. diff --git a/benchmark/function_call/binding.cc b/benchmark/misc/function_call/binding.cc similarity index 74% rename from benchmark/function_call/binding.cc rename to benchmark/misc/function_call/binding.cc index 75882c1ef8..6ea928464c 100644 --- a/benchmark/function_call/binding.cc +++ b/benchmark/misc/function_call/binding.cc @@ -1,6 +1,5 @@ #include #include -#include using namespace v8; @@ -8,12 +7,12 @@ static int c = 0; static Handle Hello(const Arguments& args) { HandleScope scope; - //time_t tv = time(NULL); return scope.Close(Integer::New(c++)); } extern "C" void init (Handle target) { HandleScope scope; - //target->Set(String::New("hello"), String::New("World")); NODE_SET_METHOD(target, "hello", Hello); } + +NODE_MODULE(binding, init); diff --git a/benchmark/misc/function_call/binding.gyp b/benchmark/misc/function_call/binding.gyp new file mode 100644 index 0000000000..3bfb84493f --- /dev/null +++ b/benchmark/misc/function_call/binding.gyp @@ -0,0 +1,8 @@ +{ + 'targets': [ + { + 'target_name': 'binding', + 'sources': [ 'binding.cc' ] + } + ] +} diff --git a/benchmark/misc/function_call/index.js b/benchmark/misc/function_call/index.js new file mode 100644 index 0000000000..ac05478a3e --- /dev/null +++ b/benchmark/misc/function_call/index.js @@ -0,0 +1,33 @@ +// show the difference between calling a short js function +// relative to a comparable C++ function. +// Reports millions of calls per second. +// Note that JS speed goes up, while cxx speed stays about the same. + +var assert = require('assert'); +var common = require('../../common.js'); + +var binding = require('./build/Release/binding'); +var cxx = binding.hello; + +var c = 0; +function js() { + return c++; +} + +assert(js() === cxx()); + +var bench = common.createBenchmark(main, { + type: ['js', 'cxx'], + millions: [1,10,50] +}); + +function main(conf) { + var n = +conf.millions * 1e6; + + var fn = conf.type === 'cxx' ? cxx : js; + bench.start(); + for (var i = 0; i < n; i++) { + fn(); + } + bench.end(+conf.millions); +}