Commit 505ff19
doc: broken
The code sample at the top of the "Performance measurements API"
section of the docs does not run.
The code in question:
```js
const { PerformanceObserver, performance } = require('node:perf_hooks');
const obs = new PerformanceObserver((items) => {
console.log(items.getEntries()[0].duration);
performance.clearMarks();
});
obs.observe({ type: 'measure' });
performance.measure('Start to Now');
performance.mark('A');
doSomeLongRunningProcess(() => {
performance.measure('A to Now', 'A');
performance.mark('B');
performance.measure('A to B', 'A', 'B');
});
```
If you replace `doSomeLongRunningProcess` with an IIFE with a sleep()
at the top of it, you get this:
```js
const { PerformanceObserver, performance } = require('node:perf_hooks');
const obs = new PerformanceObserver((items) => {
console.log(items.getEntries()[0].duration);
performance.clearMarks();
});
obs.observe({ type: 'measure' });
performance.measure('Start to Now');
performance.mark('A');
(async function doSomeLongRunningProcess() {
await new Promise(r => setTimeout(r, 5000));
performance.measure('A to Now', 'A');
performance.mark('B');
performance.measure('A to B', 'A', 'B');
})()
```
When you run this, you get the following output:
```sh
$ node performance-test.js
17.873416
node:internal/per_context/domexception:53
ErrorCaptureStackTrace(this);
^
DOMException [SyntaxError]: The "A" performance mark has not been set
at new DOMException (node:internal/per_context/domexception:53:5)
at __node_internal_ (node:internal/util:695:10)
at getMark (node:internal/perf/usertiming:65:11)
at calculateStartDuration (node:internal/perf/usertiming:202:13)
at measure (node:internal/perf/usertiming:220:7)
at Performance.measure (node:internal/perf/performance:135:12)
at /private/tmp/performance-test.js:14:15
Node.js v20.11.1
```
I believe it's due to the call to `performance.clearMarks();` in the
PerformanceObserver callback. If you remove that, it works as expected:
```js
const { PerformanceObserver, performance } = require('node:perf_hooks');
const obs = new PerformanceObserver((items) => {
console.log(items.getEntries()[0].duration);
});
obs.observe({ type: 'measure' });
performance.measure('Start to Now');
performance.mark('A');
(async function doSomeLongRunningProcess() {
await new Promise(r => setTimeout(r, 5000));
performance.measure('A to Now', 'A');
performance.mark('B');
performance.measure('A to B', 'A', 'B');
})()
```
```sh
$ node performance-test.js
17.761083
5002.468417
```
PR-URL: #54227
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>PerformanceObserver code sample1 parent b8ca9d8 commit 505ff19Copy full SHA for 505ff19
File tree
Expand file treeCollapse file tree
1 file changed
+3
-3
lines changedOpen diff view settings
Filter options
- doc/api
Expand file treeCollapse file tree
1 file changed
+3
-3
lines changedOpen diff view settings
Collapse file
+3-3Lines changed: 3 additions & 3 deletions
- Display the source diff
- Display the rich diff
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| ||
22 | 22 | |
23 | 23 | |
24 | 24 | |
25 | | - |
26 | 25 | |
27 | 26 | |
28 | 27 | |
29 | 28 | |
30 | 29 | |
31 | | - |
| 30 | + |
| 31 | + |
32 | 32 | |
33 | 33 | |
34 | 34 | |
35 | 35 | |
36 | | - |
| 36 | + |
37 | 37 | |
38 | 38 | |
39 | 39 | |
|
0 commit comments