Browse Source

node: improve performance of process.hrtime()

Move argument validation out of C++ and into JS. Improves performance
by about 15-20%.

PR-URL: https://github.com/nodejs/node/pull/4484
Reviewed-By: Trevor Norris <trev.norris@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
process-exit-stdio-flushing
Evan Lucas 9 years ago
parent
commit
78fd43514f
  1. 10
      src/node.cc
  2. 24
      src/node.js

10
src/node.cc

@ -2138,18 +2138,8 @@ void Kill(const FunctionCallbackInfo<Value>& args) {
// and nanoseconds, to avoid any integer overflow possibility.
// Pass in an Array from a previous hrtime() call to instead get a time diff.
void Hrtime(const FunctionCallbackInfo<Value>& args) {
Environment* env = Environment::GetCurrent(args);
uint64_t t = uv_hrtime();
if (!args[1]->IsUndefined()) {
if (!args[1]->IsArray()) {
return env->ThrowTypeError(
"process.hrtime() only accepts an Array tuple");
}
args.GetReturnValue().Set(true);
}
Local<ArrayBuffer> ab = args[0].As<Uint32Array>()->Buffer();
uint32_t* fields = static_cast<uint32_t*>(ab->GetContents().Data());

24
src/node.js

@ -192,15 +192,23 @@
}
process.hrtime = function hrtime(ar) {
const ret = [0, 0];
if (_hrtime(hrValues, ar)) {
ret[0] = (hrValues[0] * 0x100000000 + hrValues[1]) - ar[0];
ret[1] = hrValues[2] - ar[1];
} else {
ret[0] = hrValues[0] * 0x100000000 + hrValues[1];
ret[1] = hrValues[2];
_hrtime(hrValues);
if (typeof ar !== 'undefined') {
if (Array.isArray(ar)) {
return [
(hrValues[0] * 0x100000000 + hrValues[1]) - ar[0],
hrValues[2] - ar[1]
];
}
throw new TypeError('process.hrtime() only accepts an Array tuple');
}
return ret;
return [
hrValues[0] * 0x100000000 + hrValues[1],
hrValues[2]
];
};
};

Loading…
Cancel
Save