summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/performance-timeline/po-callback-mutate.any.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/performance-timeline/po-callback-mutate.any.js')
-rw-r--r--testing/web-platform/tests/performance-timeline/po-callback-mutate.any.js66
1 files changed, 66 insertions, 0 deletions
diff --git a/testing/web-platform/tests/performance-timeline/po-callback-mutate.any.js b/testing/web-platform/tests/performance-timeline/po-callback-mutate.any.js
new file mode 100644
index 0000000000..8f1b09bc37
--- /dev/null
+++ b/testing/web-platform/tests/performance-timeline/po-callback-mutate.any.js
@@ -0,0 +1,66 @@
+// META: script=performanceobservers.js
+
+ async_test(function (t) {
+ var callbackCount = 0;
+ var observer = new PerformanceObserver(
+ t.step_func(function (entryList, obs) {
+ callbackCount++;
+
+ if (callbackCount === 1) {
+ checkEntries(entryList.getEntries(), [
+ {entryType: "measure", name: "measure1"},
+ ]);
+ observer.observe({entryTypes: ["mark"]});
+ self.performance.mark("mark2");
+ self.performance.measure("measure2");
+ return;
+ }
+
+ if (callbackCount === 2) {
+ checkEntries(entryList.getEntries(), [
+ {entryType: "mark", name: "mark2"},
+ ]);
+ self.performance.mark("mark-before-change-observe-state-to-measure");
+ self.performance.measure("measure-before-change-observe-state-to-measure");
+ observer.observe({entryTypes: ["measure"]});
+ self.performance.mark("mark3");
+ self.performance.measure("measure3");
+ return;
+ }
+
+ if (callbackCount === 3) {
+ checkEntries(entryList.getEntries(), [
+ {entryType: "measure", name: "measure3"},
+ {entryType: "mark", name: "mark-before-change-observe-state-to-measure"},
+ ]);
+ self.performance.mark("mark-before-change-observe-state-to-both");
+ self.performance.measure("measure-before-change-observe-state-to-both");
+ observer.observe({entryTypes: ["mark", "measure"]});
+ self.performance.mark("mark4");
+ self.performance.measure("measure4");
+ return;
+ }
+
+ if (callbackCount === 4) {
+ checkEntries(entryList.getEntries(), [
+ {entryType: "measure", name: "measure-before-change-observe-state-to-both"},
+ {entryType: "measure", name: "measure4"},
+ {entryType: "mark", name: "mark4"},
+ ]);
+ self.performance.mark("mark-before-disconnect");
+ self.performance.measure("measure-before-disconnect");
+ observer.disconnect();
+ self.performance.mark("mark-after-disconnect");
+ self.performance.measure("measure-after-disconnect");
+ t.done();
+ return;
+ }
+
+ assert_unreached("The callback must not be invoked after disconnecting");
+ })
+ );
+
+ observer.observe({entryTypes: ["measure"]});
+ self.performance.mark("mark1");
+ self.performance.measure("measure1");
+ }, "PerformanceObserver modifications inside callback should update filtering and not clear buffer");