| <!doctype html> |
| <html> |
| <head> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| </head> |
| <body> |
| <script> |
| async_test(function (t) { |
| 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']}); |
| |
| // Trigger a long task. |
| const begin = window.performance.now(); |
| while (window.performance.now() < begin + 51); |
| }, 'Test toJSON() in PerformanceLongTaskTiming and TaskAttributionTiming'); |
| </script> |
| </body> |
| </html> |