1// Flags: --expose-internals --no-warnings 2'use strict'; 3 4const common = require('../common'); 5const assert = require('assert'); 6const { internalBinding } = require('internal/test/binding'); 7const { 8 observerCounts: counts 9} = internalBinding('performance'); 10const { 11 performance, 12 PerformanceObserver, 13 constants 14} = require('perf_hooks'); 15 16const { 17 NODE_PERFORMANCE_ENTRY_TYPE_GC, 18 NODE_PERFORMANCE_ENTRY_TYPE_HTTP2, 19} = constants; 20 21assert.strictEqual(counts[NODE_PERFORMANCE_ENTRY_TYPE_GC], 0); 22assert.strictEqual(counts[NODE_PERFORMANCE_ENTRY_TYPE_HTTP2], 0); 23 24{ 25 [1, null, undefined, {}, [], Infinity].forEach((i) => { 26 assert.throws( 27 () => new PerformanceObserver(i), 28 { 29 code: 'ERR_INVALID_ARG_TYPE', 30 name: 'TypeError', 31 } 32 ); 33 }); 34 const observer = new PerformanceObserver(common.mustNotCall()); 35 36 [1, 'test'].forEach((input) => { 37 assert.throws( 38 () => observer.observe(input), 39 { 40 code: 'ERR_INVALID_ARG_TYPE', 41 name: 'TypeError', 42 message: 'The "options" argument must be of type object.' + 43 common.invalidArgTypeHelper(input) 44 }); 45 }); 46 47 [1, null, {}, Infinity].forEach((i) => { 48 assert.throws(() => observer.observe({ entryTypes: i }), 49 { 50 code: 'ERR_INVALID_ARG_TYPE', 51 name: 'TypeError' 52 }); 53 }); 54 55 const obs = new PerformanceObserver(common.mustNotCall()); 56 obs.observe({ entryTypes: ['mark', 'mark'] }); 57 obs.disconnect(); 58 performance.mark('42'); 59} 60 61// Test Non-Buffered 62{ 63 const observer = 64 new PerformanceObserver(common.mustCall(callback)); 65 66 function callback(list, obs) { 67 assert.strictEqual(obs, observer); 68 const entries = list.getEntries(); 69 assert.strictEqual(entries.length, 3); 70 observer.disconnect(); 71 } 72 observer.observe({ entryTypes: ['mark', 'node'] }); 73 performance.mark('test1'); 74 performance.mark('test2'); 75 performance.mark('test3'); 76} 77