| <!DOCTYPE HTML> |
| <meta charset=utf-8> |
| <title>Largest Contentful Paint: Progressively Loaded Image</title> |
| <body> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="resources/largest-contentful-paint-helpers.js"></script> |
| <script src="/common/get-host-info.sub.js"></script> |
| <script> |
| promise_test(async function (t) { |
| assert_implements(window.LargestContentfulPaint, "LargestContentfulPaint is not implemented"); |
| const beforeLoad = performance.now(); |
| const observer = new PerformanceObserver( |
| t.step_func_done(function(entryList) { |
| assert_equals(entryList.getEntries().length, 1); |
| const entry = entryList.getEntries()[0]; |
| const imgElement = document.getElementById('image_id'); |
| const imageSrc = imgElement.currentSrc; |
| const imageWidth = imgElement.naturalWidth; |
| const imageHeight = imgElement.naturalHeight; |
| const size = imageWidth * imageHeight; |
| const lcpLoadTime = entry.loadTime; |
| const lcpRenderTime = entry.renderTime; |
| const resLoadTime = calculateResourceLoadTime(imageSrc); |
| assert_greater_than_equal(lcpLoadTime,resLoadTime,'Load before LCP event fired'); |
| assert_greater_than_equal(lcpRenderTime,resLoadTime,'Load before LCP event rendered'); |
| checkImage(entry, imageSrc, 'image_id', size, beforeLoad); |
| }) |
| ); |
| observer.observe({type: 'largest-contentful-paint', buffered: true}) |
| }, 'Ensure Progressive JPEG LCP load and render events occur after resource loading'); |
| |
| function calculateResourceLoadTime(imageSrc) { |
| const entries = performance.getEntriesByName(imageSrc); |
| const resourceEntry = entries[0]; |
| assert_equals(entries.length, 1, 'No Resource timing entry found'); |
| return resourceEntry.responseEnd; |
| } |
| </script> |
| <img src='/images/computer.jpg?pipe=trickle(982:d1)' id='image_id'/> |
| </body> |
| </html> |