Skip to content

Commit

Permalink
perf_hooks: add toJSON to performance class
Browse files Browse the repository at this point in the history
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: #37623

PR-URL: #37771
Fixes: #37623
Reviewed-By: James M Snell <jasnell@gmail.com>
  • Loading branch information
yashLadha authored and jasnell committed Apr 30, 2021
1 parent 5bfb6f0 commit 93f0b4d
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 0 deletions.
9 changes: 9 additions & 0 deletions doc/api/perf_hooks.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
14 changes: 14 additions & 0 deletions lib/perf_hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 {}
Expand Down Expand Up @@ -105,6 +114,11 @@ ObjectDefineProperties(Performance.prototype, {
configurable: true,
enumerable: true,
value: timeOriginTimestamp,
},
toJSON: {
configurable: true,
enumerable: true,
value: toJSON,
}
});

Expand Down
14 changes: 14 additions & 0 deletions test/parallel/test-tojson-perf_hooks.js
Original file line number Diff line number Diff line change
@@ -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');
}

0 comments on commit 93f0b4d

Please sign in to comment.