perf_hooks: add toJSON to performance class

Added toJSON method to the InternalPerformance class as per the
convention followed in other performance classes and per the spec:
https://www.w3.org/TR/hr-time/#tojson-method

Fixes: https://github.com/nodejs/node/issues/37623

PR-URL: https://github.com/nodejs/node/pull/37771
Fixes: https://github.com/nodejs/node/issues/37623
Reviewed-By: James M Snell <jasnell@gmail.com>
This commit is contained in:
Yash Ladha 2021-03-16 22:15:02 +05:30 committed by James M Snell
parent 5bfb6f0564
commit 93f0b4d35b
No known key found for this signature in database
GPG Key ID: 7341B15C070877AC
3 changed files with 37 additions and 0 deletions

View File

@ -261,6 +261,14 @@ If the wrapped function returns a promise, a finally handler will be attached
to the promise and the duration will be reported once the finally handler is
invoked.
### `performance.toJSON()`
<!-- YAML
added: REPLACEME
-->
An object which is JSON representation of the `performance` object. It
is similar to [`window.performance.toJSON`][] in browsers.
## Class: `PerformanceEntry`
<!-- YAML
added: v8.5.0
@ -1025,4 +1033,5 @@ require('some-module');
[`child_process.spawnSync()`]: child_process.md#child_process_child_process_spawnsync_command_args_options
[`process.hrtime()`]: process.md#process_process_hrtime_time
[`timeOrigin`]: https://w3c.github.io/hr-time/#dom-performance-timeorigin
[`window.performance.toJSON`]: https://developer.mozilla.org/en-US/docs/Web/API/Performance/toJSON
[`window.performance`]: https://developer.mozilla.org/en-US/docs/Web/API/Window/performance

View File

@ -59,6 +59,15 @@ class Performance extends EventTarget {
timeOrigin: this.timeOrigin,
}, opts)}`;
}
}
function toJSON() {
return {
nodeTiming: this.nodeTiming,
timeOrigin: this.timeOrigin,
eventLoopUtilization: this.eventLoopUtilization()
};
}
class InternalPerformance extends EventTarget {}
@ -105,6 +114,11 @@ ObjectDefineProperties(Performance.prototype, {
configurable: true,
enumerable: true,
value: timeOriginTimestamp,
},
toJSON: {
configurable: true,
enumerable: true,
value: toJSON,
}
});

View File

@ -0,0 +1,14 @@
'use strict';
require('../common');
const assert = require('assert');
const { performance } = require('perf_hooks');
// Test toJSON for performance object
{
assert.strictEqual(typeof performance.toJSON, 'function');
const jsonObject = performance.toJSON();
assert.strictEqual(typeof jsonObject, 'object');
assert.strictEqual(jsonObject.timeOrigin, performance.timeOrigin);
assert.strictEqual(typeof jsonObject.nodeTiming, 'object');
}