OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <head> | 2 <head> |
3 <title>Performance Paint Timing Test</title> | 3 <title>Performance Paint Timing Test: FP followed by FCP</title> |
4 </head> | 4 </head> |
5 <body> | 5 <body> |
6 <script src="../../resources/testharness.js"></script> | 6 <script src="../../resources/testharness.js"></script> |
7 <script src="../../resources/testharnessreport.js"></script> | 7 <script src="../../resources/testharnessreport.js"></script> |
| 8 <div id="main"></div> |
8 <div id="image"></div> | 9 <div id="image"></div> |
9 | 10 |
10 <script> | 11 <script> |
11 async_test(function (t) { | 12 async_test(function (t) { |
12 var observer = new PerformanceObserver( | 13 testRunner.capturePixelsAsyncThen(t.step_func(function() { |
13 t.step_func(function (entryList) { | 14 const bufferedEntries = performance.getEntriesByType('paint'); |
14 var entries = entryList.getEntries(); | 15 assert_equals(bufferedEntries.length, 0, "No paint entries yet"); |
15 // Nothing contentful to be painted yet. | |
16 assert_equals(entries.length, 1, | |
17 "There should be only one paint timing instance delivered at
a time."); | |
18 assert_equals(entries[0].entryType, "paint", | |
19 "Expected entryType to be: paint."); | |
20 if (entries[0].name == "first-paint") { | |
21 t.first_paint_time = entries[0].startTime; | |
22 } else if (entries[0].name == "first-contentful-paint") { | |
23 assert_not_equals(t.first_paint_time, ""); | |
24 t.first_contentful_paint_time = entries[0].startTime; | |
25 assert_greater_than(t.first_contentful_paint_time - t.first_
paint_time, 100); | |
26 observer.disconnect(); | |
27 t.done(); | |
28 } | |
29 }) | |
30 ); | |
31 observer.observe({entryTypes: ["paint"]}); | |
32 | 16 |
33 // Wait 100ms, then load image | 17 const div = document.createElement("div"); |
34 setTimeout(function() { | 18 div.style.width = "100px"; |
35 var img = document.createElement("IMG"); | 19 div.style.height = "100px"; |
36 img.src = "resources/circles.png"; | 20 div.style.backgroundColor = "red"; |
37 document.getElementById('image').appendChild(img); | 21 div.style.color = "blue"; |
38 }, 100); | 22 document.getElementById("main").appendChild(div); |
39 }, "First Paint triggered by non-contentful paint. Image load triggers First
Contentful Paint."); | |
40 | 23 |
| 24 testRunner.capturePixelsAsyncThen(t.step_func(function() { |
| 25 const bufferedEntries = performance.getEntriesByType('paint'); |
| 26 assert_equals(bufferedEntries.length, 1, "FP only."); |
| 27 assert_equals(bufferedEntries[0].entryType, "paint"); |
| 28 assert_equals(bufferedEntries[0].name, "first-paint"); |
| 29 |
| 30 const img = document.createElement("IMG"); |
| 31 img.src = "resources/circles.png"; |
| 32 img.onload = function() { |
| 33 testRunner.capturePixelsAsyncThen(t.step_func_done(function(
) { |
| 34 const bufferedEntries = performance.getEntriesByType('pa
int'); |
| 35 assert_equals(bufferedEntries.length, 2, "FP and FCP."); |
| 36 assert_equals(bufferedEntries[0].entryType, "paint"); |
| 37 assert_equals(bufferedEntries[0].name, "first-paint"); |
| 38 assert_equals(bufferedEntries[1].entryType, "paint"); |
| 39 assert_equals(bufferedEntries[1].name, "first-contentful
-paint"); |
| 40 })); |
| 41 }; |
| 42 document.getElementById('image').appendChild(img); |
| 43 })); |
| 44 })); |
| 45 }, "First Paint triggered by non-contentful paint. Image load triggers Fir
st Contentful Paint."); |
41 </script> | 46 </script> |
42 <div style="background-color:black;color:white;padding:20px;"></div> | |
43 | |
44 | |
45 </body> | 47 </body> |
46 </html> | 48 </html> |
OLD | NEW |