async_test(t => { assert_precondition(window.PerformanceLongTaskTiming, 'Longtasks are not supported.'); new PerformanceObserver(t.step_func((entryList, obs) => { const observer = new PerformanceObserver(t.step_func_done(list => { let longtaskObserved = false; list.getEntries().forEach(entry => { if (entry.entryType === 'mark') return; assert_equals(entry.entryType, 'longtask'); assert_equals(entry.name, 'self'); assert_greater_than(entry.duration, 50); longtaskObserved = true; }); assert_true(longtaskObserved, 'Did not observe buffered longtask.'); })); observer.observe({type: 'longtask', buffered: true}); // Observer mark so that we can flush the observer callback. observer.observe({type: 'mark'}); performance.mark('m'); // Disconnect the embedding observer so this callback only runs once. obs.disconnect(); })).observe({entryTypes: ['longtask']}); // Create a long task. const begin = window.performance.now(); while (window.performance.now() < begin + 60); }, 'PerformanceObserver with buffered flag can see previous longtask entries.');