Bug 1935611 - Fix libyuv/libpng link failed for loongarch64. r=glandium,tnikkel,ng
[gecko.git] / dom / performance / tests / test_performance_user_timing.js
blobc98bee6f119930a13e2364eb6c7face78636b9ab
1 var steps = [
2   // Test single mark addition
3   function () {
4     ok(true, "Running mark addition test");
5     performance.mark("test");
6     var marks = performance.getEntriesByType("mark");
7     is(marks.length, 1, "Number of marks should be 1");
8     var mark = marks[0];
9     is(mark.name, "test", "mark name should be 'test'");
10     is(mark.entryType, "mark", "mark type should be 'mark'");
11     isnot(mark.startTime, 0, "mark start time should not be 0");
12     is(mark.duration, 0, "mark duration should be 0");
13   },
14   // Test multiple mark addition
15   function () {
16     ok(true, "Running multiple mark with same name addition test");
17     performance.mark("test");
18     performance.mark("test");
19     performance.mark("test");
20     var marks_type = performance.getEntriesByType("mark");
21     is(marks_type.length, 3, "Number of marks by type should be 3");
22     var marks_name = performance.getEntriesByName("test");
23     is(marks_name.length, 3, "Number of marks by name should be 3");
24     var mark = marks_name[0];
25     is(mark.name, "test", "mark name should be 'test'");
26     is(mark.entryType, "mark", "mark type should be 'mark'");
27     isnot(mark.startTime, 0, "mark start time should not be 0");
28     is(mark.duration, 0, "mark duration should be 0");
29     var times = [];
30     // This also tests the chronological ordering specified as
31     // required for getEntries in the performance timeline spec.
32     marks_name.forEach(function (s) {
33       times.forEach(function (time) {
34         ok(
35           s.startTime >= time.startTime,
36           "Times should be equal or increasing between similarly named marks: " +
37             s.startTime +
38             " >= " +
39             time.startTime
40         );
41       });
42       times.push(s);
43     });
44   },
45   // Test all marks removal
46   function () {
47     ok(true, "Running all mark removal test");
48     performance.mark("test");
49     performance.mark("test2");
50     var marks = performance.getEntriesByType("mark");
51     is(marks.length, 2, "number of marks before all removal");
52     performance.clearMarks();
53     marks = performance.getEntriesByType("mark");
54     is(marks.length, 0, "number of marks after all removal");
55   },
56   // Test single mark removal
57   function () {
58     ok(true, "Running removal test (0 'test' marks with other marks)");
59     performance.mark("test2");
60     var marks = performance.getEntriesByType("mark");
61     is(marks.length, 1, "number of marks before all removal");
62     performance.clearMarks("test");
63     marks = performance.getEntriesByType("mark");
64     is(marks.length, 1, "number of marks after all removal");
65   },
66   // Test single mark removal
67   function () {
68     ok(true, "Running removal test (0 'test' marks with no other marks)");
69     var marks = performance.getEntriesByType("mark");
70     is(marks.length, 0, "number of marks before all removal");
71     performance.clearMarks("test");
72     marks = performance.getEntriesByType("mark");
73     is(marks.length, 0, "number of marks after all removal");
74   },
75   function () {
76     ok(true, "Running removal test (1 'test' mark with other marks)");
77     performance.mark("test");
78     performance.mark("test2");
79     var marks = performance.getEntriesByType("mark");
80     is(marks.length, 2, "number of marks before all removal");
81     performance.clearMarks("test");
82     marks = performance.getEntriesByType("mark");
83     is(marks.length, 1, "number of marks after all removal");
84   },
85   function () {
86     ok(true, "Running removal test (1 'test' mark with no other marks)");
87     performance.mark("test");
88     var marks = performance.getEntriesByType("mark");
89     is(marks.length, 1, "number of marks before all removal");
90     performance.clearMarks("test");
91     marks = performance.getEntriesByType("mark");
92     is(marks.length, 0, "number of marks after all removal");
93   },
94   function () {
95     ok(true, "Running removal test (2 'test' marks with other marks)");
96     performance.mark("test");
97     performance.mark("test");
98     performance.mark("test2");
99     var marks = performance.getEntriesByType("mark");
100     is(marks.length, 3, "number of marks before all removal");
101     performance.clearMarks("test");
102     marks = performance.getEntriesByType("mark");
103     is(marks.length, 1, "number of marks after all removal");
104   },
105   function () {
106     ok(true, "Running removal test (2 'test' marks with no other marks)");
107     performance.mark("test");
108     performance.mark("test");
109     var marks = performance.getEntriesByType("mark");
110     is(marks.length, 2, "number of marks before all removal");
111     performance.clearMarks("test");
112     marks = performance.getEntriesByType("mark");
113     is(marks.length, 0, "number of marks after all removal");
114   },
115   // Test mark name being same as navigation timing parameter
116   function () {
117     ok(true, "Running mark name collision test");
118     for (n in performance.timing) {
119       try {
120         if (n == "toJSON") {
121           ok(true, "Skipping toJSON entry in collision test");
122           continue;
123         }
124         performance.mark(n);
125         ok(
126           false,
127           "Mark name collision test failed for name " +
128             n +
129             ", shouldn't make it here!"
130         );
131       } catch (e) {
132         ok(
133           e instanceof DOMException,
134           "DOM exception thrown for mark named " + n
135         );
136         is(
137           e.code,
138           e.SYNTAX_ERR,
139           "DOM exception for name collision is syntax error"
140         );
141       }
142     }
143   },
144   // Test measure
145   function () {
146     ok(true, "Running measure addition with no start/end time test");
147     performance.measure("test");
148     var measures = performance.getEntriesByType("measure");
149     is(measures.length, 1, "number of measures should be 1");
150     var measure = measures[0];
151     is(measure.name, "test", "measure name should be 'test'");
152     is(measure.entryType, "measure", "measure type should be 'measure'");
153     is(measure.startTime, 0, "measure start time should be zero");
154     ok(measure.duration >= 0, "measure duration should not be negative");
155   },
156   function () {
157     ok(true, "Running measure addition with only start time test");
158     performance.mark("test1");
159     performance.measure("test", "test1", undefined);
160     var measures = performance.getEntriesByName("test", "measure");
161     var marks = performance.getEntriesByName("test1", "mark");
162     var measure = measures[0];
163     var mark = marks[0];
164     is(
165       measure.startTime,
166       mark.startTime,
167       "measure start time should be equal to the mark startTime"
168     );
169     ok(measure.duration >= 0, "measure duration should not be negative");
170   },
171   function () {
172     ok(true, "Running measure addition with only end time test");
173     performance.mark("test1");
174     performance.measure("test", undefined, "test1");
175     var measures = performance.getEntriesByName("test", "measure");
176     var marks = performance.getEntriesByName("test1", "mark");
177     var measure = measures[0];
178     var mark = marks[0];
179     ok(measure.duration >= 0, "measure duration should not be negative");
180   },
181   // Test measure picking latest version of similarly named tags
182   function () {
183     ok(true, "Running multiple mark with same name addition test");
184     performance.mark("test");
185     performance.mark("test");
186     performance.mark("test");
187     performance.mark("test2");
188     var marks_name = performance.getEntriesByName("test");
189     is(marks_name.length, 3, "Number of marks by name should be 3");
190     var marks_name2 = performance.getEntriesByName("test2");
191     is(marks_name2.length, 1, "Number of marks by name should be 1");
192     var test_mark = marks_name2[0];
193     performance.measure("test", "test", "test2");
194     var measures_type = performance.getEntriesByType("measure");
195     var last_mark = marks_name[marks_name.length - 1];
196     is(measures_type.length, 1, "Number of measures by type should be 1");
197     var measure = measures_type[0];
198     is(
199       measure.startTime,
200       last_mark.startTime,
201       "Measure start time should be the start time of the latest 'test' mark"
202     );
203     // Tolerance testing to avoid oranges, since we're doing double math across two different languages.
204     ok(
205       measure.duration - (test_mark.startTime - last_mark.startTime) < 0.00001,
206       "Measure duration ( " +
207         measure.duration +
208         ") should be difference between two marks"
209     );
210   },
211   function () {
212     // We don't have navigationStart in workers.
213     if ("window" in self) {
214       ok(true, "Running measure addition with no start/end time test");
215       performance.measure("test", "navigationStart");
216       var measures = performance.getEntriesByType("measure");
217       is(measures.length, 1, "number of measures should be 1");
218       var measure = measures[0];
219       is(measure.name, "test", "measure name should be 'test'");
220       is(measure.entryType, "measure", "measure type should be 'measure'");
221       is(measure.startTime, 0, "measure start time should be zero");
222       ok(measure.duration >= 0, "measure duration should not be negative");
223     }
224   },
225   // Test all measure removal
226   function () {
227     ok(true, "Running all measure removal test");
228     performance.measure("test");
229     performance.measure("test2");
230     var measures = performance.getEntriesByType("measure");
231     is(measures.length, 2, "measure entries should be length 2");
232     performance.clearMeasures();
233     measures = performance.getEntriesByType("measure");
234     is(measures.length, 0, "measure entries should be length 0");
235   },
236   // Test single measure removal
237   function () {
238     ok(true, "Running all measure removal test");
239     performance.measure("test");
240     performance.measure("test2");
241     var measures = performance.getEntriesByType("measure");
242     is(measures.length, 2, "measure entries should be length 2");
243     performance.clearMeasures("test");
244     measures = performance.getEntriesByType("measure");
245     is(measures.length, 1, "measure entries should be length 1");
246   },
247   // Test measure with invalid start time mark name
248   function () {
249     ok(true, "Running measure invalid start test");
250     try {
251       performance.measure("test", "notamark");
252       ok(false, "invalid measure start time exception not thrown!");
253     } catch (e) {
254       ok(e instanceof DOMException, "DOM exception thrown for invalid measure");
255       is(
256         e.code,
257         e.SYNTAX_ERR,
258         "DOM exception for invalid time is syntax error"
259       );
260     }
261   },
262   // Test measure with invalid end time mark name
263   function () {
264     ok(true, "Running measure invalid end test");
265     try {
266       performance.measure("test", undefined, "notamark");
267       ok(false, "invalid measure end time exception not thrown!");
268     } catch (e) {
269       ok(e instanceof DOMException, "DOM exception thrown for invalid measure");
270       is(
271         e.code,
272         e.SYNTAX_ERR,
273         "DOM exception for invalid time is syntax error"
274       );
275     }
276   },
277   // Test measure name being same as navigation timing parameter
278   function () {
279     ok(true, "Running measure name collision test");
280     for (n in performance.timing) {
281       if (n == "toJSON") {
282         ok(true, "Skipping toJSON entry in collision test");
283         continue;
284       }
285       performance.measure(n);
286       ok(true, "Measure name supports name collisions: " + n);
287     }
288   },
289   // Test measure mark being a reserved name
290   function () {
291     ok(true, "Create measures using all reserved names");
292     for (n in performance.timing) {
293       try {
294         if (n == "toJSON") {
295           ok(true, "Skipping toJSON entry in collision test");
296           continue;
297         }
298         performance.measure("test", n);
299         ok(true, "Measure created from reserved name as starting time: " + n);
300       } catch (e) {
301         ok(
302           [
303             "redirectStart",
304             "redirectEnd",
305             "unloadEventStart",
306             "unloadEventEnd",
307             "loadEventEnd",
308             "secureConnectionStart",
309           ].includes(n),
310           "Measure created from reserved name as starting time: " +
311             n +
312             " and threw expected error"
313         );
314       }
315     }
316   },
317   // TODO: Test measure picking latest version of similarly named tags