From a647d82f83ad5ddad5db7be2cc24c3d686121792 Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Thu, 12 Jan 2017 20:03:29 +0800 Subject: [PATCH] process: improve process.hrtime * Add benchmarks for diffing a previous result * Improvements to the documentation, including type annotation * Update the outdated comments in src/node.cc, improve comments in lib/internal/process.js * Check the argument is an Array Tuple with length 2 PR-URL: https://github.com/nodejs/node/pull/10764 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Brian White --- benchmark/process/bench-hrtime.js | 28 +++++++++++++++++++------- doc/api/process.md | 30 ++++++++++++++++------------ lib/internal/process.js | 18 +++++++++-------- src/node.cc | 12 +++++------ test/parallel/test-process-hrtime.js | 15 ++++++++++---- 5 files changed, 65 insertions(+), 38 deletions(-) diff --git a/benchmark/process/bench-hrtime.js b/benchmark/process/bench-hrtime.js index 661dff43b0..8a2920a238 100644 --- a/benchmark/process/bench-hrtime.js +++ b/benchmark/process/bench-hrtime.js @@ -1,18 +1,32 @@ 'use strict'; const common = require('../common'); +const assert = require('assert'); const bench = common.createBenchmark(main, { - n: [1e6] + n: [1e6], + type: ['raw', 'diff'] }); - function main(conf) { - const n = conf.n >>> 0; + const n = conf.n | 0; + const hrtime = process.hrtime; + var noDead = hrtime(); + var i; - bench.start(); - for (var i = 0; i < n; i++) { - process.hrtime(); + if (conf.type === 'raw') { + bench.start(); + for (i = 0; i < n; i++) { + noDead = hrtime(); + } + bench.end(n); + } else { + bench.start(); + for (i = 0; i < n; i++) { + noDead = hrtime(noDead); + } + bench.end(n); } - bench.end(n); + + assert.ok(Array.isArray(noDead)); } diff --git a/doc/api/process.md b/doc/api/process.md index 4e20399d41..cd16dec540 100644 --- a/doc/api/process.md +++ b/doc/api/process.md @@ -1016,18 +1016,25 @@ Android) added: v0.7.6 --> -The `process.hrtime()` method returns the current high-resolution real time in a -`[seconds, nanoseconds]` tuple Array. `time` is an optional parameter that must -be the result of a previous `process.hrtime()` call (and therefore, a real time -in a `[seconds, nanoseconds]` tuple Array containing a previous time) to diff -with the current time. These times are relative to an arbitrary time in the -past, and not related to the time of day and therefore not subject to clock -drift. The primary use is for measuring performance between intervals. +* `time` {Array} The result of a previous call to `process.hrtime()` +* Returns: {Array} + +The `process.hrtime()` method returns the current high-resolution real time +in a `[seconds, nanoseconds]` tuple Array, where `nanoseconds` is the +remaining part of the real time that can't be represented in second precision. -Passing in the result of a previous call to `process.hrtime()` is useful for -calculating an amount of time passed between calls: +`time` is an optional parameter that must be the result of a previous +`process.hrtime()` call to diff with the current time. If the parameter +passed in is not a tuple Array, a `TypeError` will be thrown. Passing in a +user-defined array instead of the result of a previous call to +`process.hrtime()` will lead to undefined behavior. + +These times are relative to an arbitrary time in the +past, and not related to the time of day and therefore not subject to clock +drift. The primary use is for measuring performance between intervals: ```js +const NS_PER_SEC = 1e9; var time = process.hrtime(); // [ 1800216, 25 ] @@ -1035,14 +1042,11 @@ setTimeout(() => { var diff = process.hrtime(time); // [ 1, 552 ] - console.log(`Benchmark took ${diff[0] * 1e9 + diff[1]} nanoseconds`); + console.log(`Benchmark took ${diff[0] * NS_PER_SEC + diff[1]} nanoseconds`); // benchmark took 1000000527 nanoseconds }, 1000); ``` -Constructing an array by some method other than calling `process.hrtime()` and -passing the result to process.hrtime() will result in undefined behavior. - ## process.initgroups(user, extra_group)