// META: script=performanceobservers.js
test(function () {
const obs = new PerformanceObserver(() => {});
assert_throws_js(TypeError, function () {
obs.observe({});
});
assert_throws_js(TypeError, function () {
obs.observe({entryType: ['mark', 'measure']});
});
}, "Calling observe() without 'type' or 'entryTypes' throws a TypeError");
test(() => {
const obs = new PerformanceObserver(() =>{});
obs.observe({entryTypes: ["mark"]});
assert_throws_dom('InvalidModificationError', function () {
obs.observe({type: "measure"});
});
}, "Calling observe() with entryTypes and then type should throw an InvalidModificationError");
test(() => {
const obs = new PerformanceObserver(() =>{});
obs.observe({type: "mark"});
assert_throws_dom('InvalidModificationError', function () {
obs.observe({entryTypes: ["measure"]});
});
}, "Calling observe() with type and then entryTypes should throw an InvalidModificationError");
test(() => {
const obs = new PerformanceObserver(() =>{});
assert_throws_js(TypeError, function () {
obs.observe({type: "mark", entryTypes: ["measure"]});
});
}, "Calling observe() with type and entryTypes should throw a TypeError");
test(function () {
const obs = new PerformanceObserver(() =>{});
// Definitely not an entry type.
obs.observe({type: "this-cannot-match-an-entryType"});
// Close to an entry type, but not quite.
obs.observe({type: "marks"});
}, "Passing in unknown values to type does throw an exception.");
async_test(function (t) {
let observedMark = false;
let observedMeasure = false;
const observer = new PerformanceObserver(
t.step_func(function (entryList, obs) {
observedMark |= entryList.getEntries().filter(
entry => entry.entryType === 'mark').length;
observedMeasure |= entryList.getEntries().filter(
entry => entry.entryType === 'measure').length
// Only conclude the test once we receive both entries!
if (observedMark && observedMeasure) {
observer.disconnect();
t.done();
}
})
);
observer.observe({type: "mark"});
observer.observe({type: "measure"});
self.performance.mark("mark1");
self.performance.measure("measure1");
}, "observe() with different type values stacks.");