Bug 1935611 - Fix libyuv/libpng link failed for loongarch64. r=glandium,tnikkel,ng
[gecko.git] / dom / performance / tests / test_performance_observer.js
blobddc57d4096724f348ef9fcd29209790b41c7cc5b
1 test(t => {
2   assert_throws(
3     { name: "TypeError" },
4     function () {
5       new PerformanceObserver();
6     },
7     "PerformanceObserver constructor should throw TypeError if no argument is specified."
8   );
10   assert_throws(
11     { name: "TypeError" },
12     function () {
13       new PerformanceObserver({});
14     },
15     "PerformanceObserver constructor should throw TypeError if the argument is not a function."
16   );
17 }, "Test that PerformanceObserver constructor throws exception");
19 test(t => {
20   var observer = new PerformanceObserver(() => {});
22   assert_throws(
23     { name: "TypeError" },
24     function () {
25       observer.observe();
26     },
27     "observe() should throw TypeError exception if no option specified."
28   );
30   assert_throws(
31     { name: "TypeError" },
32     function () {
33       observer.observe({ unsupportedAttribute: "unsupported" });
34     },
35     "obsrve() should throw TypeError exception if the option has no 'entryTypes' attribute."
36   );
38   assert_equals(
39     undefined,
40     observer.observe({ entryTypes: [] }),
41     "observe() should silently ignore empty 'entryTypes' sequence."
42   );
44   assert_throws(
45     { name: "TypeError" },
46     function () {
47       observer.observe({ entryTypes: null });
48     },
49     "obsrve() should throw TypeError exception if 'entryTypes' attribute is null."
50   );
52   assert_equals(
53     undefined,
54     observer.observe({ entryTypes: ["invalid"] }),
55     "observe() should silently ignore invalid 'entryTypes' values."
56   );
57 }, "Test that PerformanceObserver.observe throws exception");
59 function promiseObserve(test, options) {
60   return new Promise(resolve => {
61     performance.clearMarks();
62     performance.clearMeasures();
64     var observer = new PerformanceObserver(list => resolve(list));
65     observer.observe(options);
66     test.add_cleanup(() => observer.disconnect());
67   });
70 promise_test(t => {
71   var promise = promiseObserve(t, { entryTypes: ["mark", "measure"] });
73   performance.mark("test-start");
74   performance.mark("test-end");
75   performance.measure("test-measure", "test-start", "test-end");
77   return promise.then(list => {
78     assert_equals(
79       list.getEntries().length,
80       3,
81       "There should be three observed entries."
82     );
84     var markEntries = list.getEntries().filter(entry => {
85       return entry.entryType == "mark";
86     });
87     assert_array_equals(
88       markEntries,
89       performance.getEntriesByType("mark"),
90       "Observed 'mark' entries should equal to entries obtained by getEntriesByType."
91     );
93     var measureEntries = list.getEntries().filter(entry => {
94       return entry.entryType == "measure";
95     });
96     assert_array_equals(
97       measureEntries,
98       performance.getEntriesByType("measure"),
99       "Observed 'measure' entries should equal to entries obtained by getEntriesByType."
100     );
101   });
102 }, "Test for user-timing with PerformanceObserver");
104 promise_test(t => {
105   var promise = new Promise((resolve, reject) => {
106     performance.clearMarks();
107     performance.clearMeasures();
109     var observer = new PerformanceObserver(list => reject(list));
110     observer.observe({ entryTypes: ["mark", "measure"] });
111     observer.disconnect();
112     t.step_timeout(resolve, 100);
113   });
115   performance.mark("test-start");
116   performance.mark("test-end");
117   performance.measure("test-measure", "test-start", "test-end");
119   return promise.then(
120     () => {
121       assert_equals(performance.getEntriesByType("mark").length, 2);
122       assert_equals(performance.getEntriesByType("measure").length, 1);
123     },
124     list => {
125       assert_unreached("Observer callback should never be called.");
126     }
127   );
128 }, "Nothing should be notified after disconnecting observer");
130 promise_test(t => {
131   var promise = promiseObserve(t, { entryTypes: ["mark"] });
133   performance.mark("test");
135   return promise.then(list => {
136     assert_array_equals(
137       list.getEntries({ entryType: "mark" }),
138       performance.getEntriesByType("mark"),
139       "getEntries with entryType filter should return correct results."
140     );
142     assert_array_equals(
143       list.getEntries({ name: "test" }),
144       performance.getEntriesByName("test"),
145       "getEntries with name filter should return correct results."
146     );
148     assert_array_equals(
149       list.getEntries({ name: "test", entryType: "mark" }),
150       performance.getEntriesByName("test"),
151       "getEntries with name and entryType filter should return correct results."
152     );
154     assert_array_equals(
155       list.getEntries({ name: "invalid" }),
156       [],
157       "getEntries with non-existent name filter should return an empty array."
158     );
160     assert_array_equals(
161       list.getEntries({ name: "test", entryType: "measure" }),
162       [],
163       "getEntries with name filter and non-existent entryType should return an empty array."
164     );
166     assert_array_equals(
167       list.getEntries({ name: "invalid", entryType: "mark" }),
168       [],
169       "getEntries with non-existent name and entryType filter should return an empty array."
170     );
172     assert_array_equals(
173       list.getEntries({ initiatorType: "xmlhttprequest" }),
174       [],
175       "getEntries with initiatorType filter should return an empty array."
176     );
177   });
178 }, "Test for PerformanceObserverEntryList.getEntries");
180 promise_test(t => {
181   var promise = promiseObserve(t, { entryTypes: ["mark", "measure"] });
183   performance.mark("test");
184   performance.measure("test-measure", "test", "test");
186   return promise.then(list => {
187     assert_array_equals(
188       list.getEntriesByType("mark"),
189       performance.getEntriesByType("mark")
190     );
191     assert_array_equals(
192       list.getEntriesByType("measure"),
193       performance.getEntriesByType("measure")
194     );
195   });
196 }, "Test for PerformanceObserverEntryList.getEntriesByType");
198 promise_test(t => {
199   var promise = promiseObserve(t, { entryTypes: ["mark", "measure"] });
201   performance.mark("test");
202   performance.measure("test-measure", "test", "test");
204   return promise.then(list => {
205     assert_array_equals(
206       list.getEntriesByName("test"),
207       performance.getEntriesByName("test")
208     );
209     assert_array_equals(
210       list.getEntriesByName("test-measure"),
211       performance.getEntriesByName("test-measure")
212     );
213   });
214 }, "Test for PerformanceObserverEntryList.getEntriesByName");
216 promise_test(t => {
217   var promise = new Promise(resolve => {
218     performance.clearMarks();
219     performance.clearMeasures();
221     var observer = new PerformanceObserver(list => resolve(list));
222     observer.observe({ entryTypes: ["mark", "measure"] });
223     observer.observe({ entryTypes: ["mark", "measure"] });
224     t.add_cleanup(() => observer.disconnect());
225   });
227   performance.mark("test-start");
228   performance.mark("test-end");
229   performance.measure("test-measure", "test-start", "test-end");
231   return promise.then(list => {
232     assert_equals(
233       list.getEntries().length,
234       3,
235       "Observed user timing entries should have only three entries."
236     );
237   });
238 }, "Test that invoking observe method twice affects nothing");
240 promise_test(t => {
241   var promise = new Promise(resolve => {
242     performance.clearMarks();
243     performance.clearMeasures();
245     var observer = new PerformanceObserver(list => resolve(list));
246     observer.observe({ entryTypes: ["mark", "measure"] });
247     observer.observe({ entryTypes: ["mark"] });
248     t.add_cleanup(() => observer.disconnect());
249   });
251   performance.mark("test-start");
252   performance.mark("test-end");
253   performance.measure("test-measure", "test-start", "test-end");
255   return promise.then(list => {
256     assert_equals(
257       list.getEntries().length,
258       2,
259       "Observed user timing entries should have only two entries."
260     );
261   });
262 }, "Test that observing filter is replaced by a new filter");
264 promise_test(t => {
265   var promise = new Promise(resolve => {
266     performance.clearMarks();
267     performance.clearMeasures();
269     var observer = new PerformanceObserver(list => resolve(list));
270     observer.observe({ entryTypes: ["mark"] });
271     observer.observe({ entryTypes: ["measure"] });
272     t.add_cleanup(() => observer.disconnect());
273   });
275   performance.mark("test-start");
276   performance.mark("test-end");
277   performance.measure("test-measure", "test-start", "test-end");
279   return promise.then(list => {
280     assert_equals(
281       list.getEntries().length,
282       1,
283       "Observed user timing entries should have only 1 entries."
284     );
285   });
286 }, "Test that observing filter is replaced by a new filter");