Browse Source

bench: Add function_call to bench-misc

v0.9.11-release
isaacs 12 years ago
parent
commit
4e1bcdcab9
  1. 43
      benchmark/function_call/bench.js
  2. 15
      benchmark/function_call/wscript
  3. 1
      benchmark/misc/function_call/.gitignore
  4. 2
      benchmark/misc/function_call/Makefile
  5. 5
      benchmark/misc/function_call/binding.cc
  6. 8
      benchmark/misc/function_call/binding.gyp
  7. 33
      benchmark/misc/function_call/index.js

43
benchmark/function_call/bench.js

@ -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));

15
benchmark/function_call/wscript

@ -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'

1
benchmark/misc/function_call/.gitignore

@ -0,0 +1 @@
build/

2
benchmark/misc/function_call/Makefile

@ -0,0 +1,2 @@
binding:
node-gyp rebuild --nodedir=../../..

5
benchmark/function_call/binding.cc → benchmark/misc/function_call/binding.cc

@ -1,6 +1,5 @@
#include <v8.h>
#include <node.h>
#include <time.h>
using namespace v8;
@ -8,12 +7,12 @@ static int c = 0;
static Handle<Value> Hello(const Arguments& args) {
HandleScope scope;
//time_t tv = time(NULL);
return scope.Close(Integer::New(c++));
}
extern "C" void init (Handle<Object> target) {
HandleScope scope;
//target->Set(String::New("hello"), String::New("World"));
NODE_SET_METHOD(target, "hello", Hello);
}
NODE_MODULE(binding, init);

8
benchmark/misc/function_call/binding.gyp

@ -0,0 +1,8 @@
{
'targets': [
{
'target_name': 'binding',
'sources': [ 'binding.cc' ]
}
]
}

33
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);
}
Loading…
Cancel
Save