droppedentriescount.any.js (3144B)
1 promise_test(t => { 2 // This setup is required for later tests as well. 3 // Await for a dropped entry. 4 return new Promise(res => { 5 // Set a buffer size of 0 so that new resource entries count as dropped. 6 performance.setResourceTimingBufferSize(0); 7 // Use an observer to make sure the promise is resolved only when the 8 // new entry has been created. 9 new PerformanceObserver(res).observe({type: 'resource'}); 10 fetch('resources/square.png?id=1'); 11 }).then(() => { 12 return new Promise(resolve => { 13 new PerformanceObserver(t.step_func((entries, obs, options) => { 14 assert_equals(options['droppedEntriesCount'], 0); 15 resolve(); 16 })).observe({type: 'mark'}); 17 performance.mark('test'); 18 })}); 19 }, 'Dropped entries count is 0 when there are no dropped entries of relevant type.'); 20 21 promise_test(async t => { 22 return new Promise(resolve => { 23 new PerformanceObserver(t.step_func((entries, obs, options) => { 24 assert_equals(options['droppedEntriesCount'], 1); 25 resolve(); 26 })).observe({entryTypes: ['mark', 'resource']}); 27 performance.mark('meow'); 28 }); 29 }, 'Dropped entries correctly counted with multiple types.'); 30 31 promise_test(t => { 32 return new Promise(resolve => { 33 new PerformanceObserver(t.step_func((entries, obs, options) => { 34 assert_equals(options['droppedEntriesCount'], 1, 35 'There should have been some dropped resource timing entries at this point'); 36 resolve(); 37 })).observe({type: 'resource', buffered: true}); 38 }); 39 }, 'Dropped entries counted even if observer was not registered at the time.'); 40 41 promise_test(t => { 42 return new Promise(resolve => { 43 let callback_ran = false; 44 new PerformanceObserver(t.step_func((entries, obs, options) => { 45 if (!callback_ran) { 46 assert_equals(options['droppedEntriesCount'], 2, 47 'There should be two dropped entries right now.'); 48 fetch('resources/square.png?id=3'); 49 callback_ran = true; 50 } else { 51 assert_equals(options['droppedEntriesCount'], undefined, 52 'droppedEntriesCount should be unset after the first callback!'); 53 resolve(); 54 } 55 })).observe({type: 'resource'}); 56 fetch('resources/square.png?id=2'); 57 }); 58 }, 'Dropped entries only surfaced on the first callback.'); 59 60 61 promise_test(t => { 62 return new Promise(resolve => { 63 let callback_ran = false; 64 let droppedEntriesCount = -1; 65 new PerformanceObserver(t.step_func((entries, obs, options) => { 66 if (!callback_ran) { 67 assert_greater_than(options['droppedEntriesCount'], 0, 68 'There should be several dropped entries right now.'); 69 droppedEntriesCount = options['droppedEntriesCount']; 70 callback_ran = true; 71 obs.observe({type: 'mark'}); 72 performance.mark('woof'); 73 } else { 74 assert_equals(options['droppedEntriesCount'], droppedEntriesCount, 75 'There should be droppedEntriesCount due to the new observe().'); 76 resolve(); 77 } 78 })).observe({type: 'resource'}); 79 fetch('resources/square.png?id=4'); 80 }); 81 }, 'Dropped entries surfaced after an observe() call!');