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 to the promise and the duration will be reported once the finally handler is
invoked. 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` ## Class: `PerformanceEntry`
<!-- YAML <!-- YAML
added: v8.5.0 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 [`child_process.spawnSync()`]: child_process.md#child_process_child_process_spawnsync_command_args_options
[`process.hrtime()`]: process.md#process_process_hrtime_time [`process.hrtime()`]: process.md#process_process_hrtime_time
[`timeOrigin`]: https://w3c.github.io/hr-time/#dom-performance-timeorigin [`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 [`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, timeOrigin: this.timeOrigin,
}, opts)}`; }, opts)}`;
} }
}
function toJSON() {
return {
nodeTiming: this.nodeTiming,
timeOrigin: this.timeOrigin,
eventLoopUtilization: this.eventLoopUtilization()
};
} }
class InternalPerformance extends EventTarget {} class InternalPerformance extends EventTarget {}
@ -105,6 +114,11 @@ ObjectDefineProperties(Performance.prototype, {
configurable: true, configurable: true,
enumerable: true, enumerable: true,
value: timeOriginTimestamp, 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');
}