| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="utf-8" /> |
| <title>functionality test of window.performance.measure</title> |
| <link rel="author" title="Intel" href="http://www.intel.com/" /> |
| <link rel="help" href="http://www.w3.org/TR/user-timing/#extensions-performance-interface"/> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/common/performance-timeline-utils.js"></script> |
| <script src="resources/webperftestharness.js"></script> |
| <script src="resources/webperftestharnessextension.js"></script> |
| <script> |
| setup({ explicit_done: true }); |
| |
| function onload_test() |
| { |
| const measures_for_timing_order = [ |
| ['nav2now', 'navigationStart'], |
| ['loadTime', 'navigationStart', 'loadEventEnd'], |
| ['loadEventEnd2a', 'loadEventEnd', 'abc'], |
| ['nav2a', 'navigationStart', 'abc'], |
| ['domComplete2a', 'domComplete', 'abc'], |
| ['negativeValue', 1, 'navigationStart'], |
| ]; |
| const context = new PerformanceContext(window.performance); |
| |
| mark_names.forEach(function(name) { |
| context.mark(name); |
| }); |
| measures_for_timing_order.forEach(context.initialMeasures, context); |
| test_greater_than(context.getEntriesByName('nav2now', 'measure')[0].duration, 0, 'Measure of navigationStart to now should be positive value.'); |
| test_greater_than(context.getEntriesByName('loadTime', 'measure')[0].duration, 0, 'Measure of navigationStart to loadEventEnd should be positive value.'); |
| test_greater_than(0, context.getEntriesByName('negativeValue', 'measure')[0].duration, 'Measure of current mark to navigationStart should be negative value.'); |
| test_equals(context.getEntriesByName('loadTime', 'measure')[0].duration + context.getEntriesByName('loadEventEnd2a', 'measure')[0].duration, context.getEntriesByName('nav2a', 'measure')[0].duration, 'loadTime plus loadEventEnd to a mark "a" should equal to navigationStart to "a".'); |
| |
| // Following cases test for scenarios that measure names are tied twice. |
| mark_names.forEach(function(name) { |
| context.mark(name); |
| }); |
| measures_for_timing_order.forEach(context.initialMeasures, context); |
| |
| test_greater_than(context.getEntriesByName('nav2now', 'measure')[1].duration, context.getEntriesByName('nav2now', 'measure')[0].duration, 'Second measure of current mark to navigationStart should be negative value.'); |
| test_equals(context.getEntriesByName('loadTime', 'measure')[0].duration, context.getEntriesByName('loadTime', 'measure')[1].duration, 'Measures of loadTime should have same duration.'); |
| test_greater_than(context.getEntriesByName('domComplete2a', 'measure')[1].duration, context.getEntriesByName('domComplete2a', 'measure')[0].duration, 'Measure from domComplete event to most recent mark "a" should have longer duration.'); |
| test_greater_than(context.getEntriesByName('negativeValue', 'measure')[0].duration, context.getEntriesByName('negativeValue', 'measure')[1].duration, 'Measure from most recent mark to navigationStart should have longer duration.'); |
| |
| done(); |
| } |
| </script> |
| </head> |
| <body onload="setTimeout(onload_test,0)"> |
| <h1>Description</h1> |
| <p>This test validates functionality of the interface window.performance.measure using keywords from the Navigation Timing spec.</p> |
| <div id="log"></div> |
| </body> |
| </html> |