Skip to content

Commit

Permalink
node: improve performance of process.hrtime()
Browse files Browse the repository at this point in the history
Move argument validation out of C++ and into JS. Improves performance
by about 15-20%.

PR-URL: #4484
Reviewed-By: Trevor Norris <[email protected]>
Reviewed-By: James M Snell <[email protected]>
  • Loading branch information
evanlucas committed Dec 30, 2015
1 parent bfa925f commit 78fd435
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 18 deletions.
10 changes: 0 additions & 10 deletions src/node.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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());

Expand Down
24 changes: 16 additions & 8 deletions src/node.js
Original file line number Diff line number Diff line change
Expand Up @@ -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]
];
};
};

Expand Down

0 comments on commit 78fd435

Please sign in to comment.