summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/longtask-timing/longtask-tojson.html
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--testing/web-platform/tests/longtask-timing/longtask-tojson.html74
1 files changed, 74 insertions, 0 deletions
diff --git a/testing/web-platform/tests/longtask-timing/longtask-tojson.html b/testing/web-platform/tests/longtask-timing/longtask-tojson.html
new file mode 100644
index 0000000000..b1f9b3c9b1
--- /dev/null
+++ b/testing/web-platform/tests/longtask-timing/longtask-tojson.html
@@ -0,0 +1,74 @@
+<!doctype html>
+<html>
+<head>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+</head>
+<body>
+<script>
+ async_test(function (t) {
+ assert_implements(window.PerformanceLongTaskTiming, 'Longtasks are not supported.');
+ const observer = new PerformanceObserver(
+ t.step_func(function (entryList) {
+ const entries = entryList.getEntries();
+ assert_greater_than_equal(entries.length, 1);
+ const entry = entries[0];
+ assert_equals(typeof(entry.toJSON), 'function');
+ const entryJSON = entry.toJSON();
+ assert_equals(typeof(entryJSON), 'object');
+ // Check attributes inheritted from PerformanceEntry.
+ const performanceEntryKeys = [
+ 'name',
+ 'entryType',
+ 'startTime',
+ 'duration'
+ ];
+ for (const key of performanceEntryKeys) {
+ assert_equals(entryJSON[key], entry[key],
+ `entry.toJSON().${key} should match entry.${key}`);
+ }
+
+ // Check PerformanceLongTaskTiming specific entries.
+ assert_equals(typeof(entryJSON.attribution), 'object');
+ const entryJsonAttribution = entryJSON.attribution[0];
+ assert_equals(typeof(entryJsonAttribution), 'object');
+ assert_equals(entryJSON.attribution.length, entry.attribution.length);
+
+ // Check TaskAttributionTiming toJSON.
+ const entryAttribution = entry.attribution[0];
+ assert_equals(typeof(entryAttribution.toJSON), 'function');
+ const entryAttributionJSON = entryAttribution.toJSON();
+ assert_equals(typeof(entryAttributionJSON), 'object');
+ // Check TaskAttributionTiming attributes, from both:
+ // 1) |entryJsonAttribution| from PerformanceLongTaskTiming.
+ // 2) |entryAttributionJSON| from TaskAttributionTiming.
+ const taskAttributionTimingKeys = [
+ 'name',
+ 'entryType',
+ 'startTime',
+ 'duration',
+ 'containerType',
+ 'containerSrc',
+ 'containerId',
+ 'containerName'
+ ];
+ for (const key of taskAttributionTimingKeys) {
+ assert_equals(entryAttributionJSON[key], entryAttribution[key],
+ `attribution.toJSON().${key} should match attribution.${key}`);
+ assert_equals(entryJsonAttribution[key], entryAttribution[key],
+ `entry.toJSON().attribution[0].${key} should match attribution.${key}`);
+ }
+ t.done();
+ })
+ );
+ observer.observe({entryTypes: ['longtask']});
+
+ window.onload = () => {
+ // Trigger a long task.
+ const begin = window.performance.now();
+ while (window.performance.now() < begin + 60);
+ };
+ }, 'Test toJSON() in PerformanceLongTaskTiming and TaskAttributionTiming');
+</script>
+</body>
+</html>