test_will_change.html (3629B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <title>Tests for MozAfterPaint</title> 5 <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> 6 <script src="chrome://mochikit/content/tests/SimpleTest/paint_listener.js"></script> 7 <style> 8 div { 9 width: 100px; 10 height: 100px; 11 background: radial-gradient(ellipse at center, #87e0fd 0%,#53cbf1 40%,#05abe0 100%); 12 } 13 </style> 14 </head> 15 <body> 16 </body> 17 <script> 18 19 var utils = window.windowUtils; 20 21 function waitForPaints() { 22 return new Promise(function(resolve, reject) { 23 waitForAllPaintsFlushed(resolve); 24 }); 25 } 26 27 add_task(async () => { 28 var element = document.createElement("div"); 29 document.body.appendChild(element); 30 31 await waitForPaints(); 32 33 utils.checkAndClearPaintedState(element); 34 element.style.opacity = "0.5"; 35 36 await waitForPaints(); 37 38 var painted = utils.checkAndClearPaintedState(element); 39 // *** We check that this repaints because the test is relying 40 // on this property. If this is broken then this test wont 41 // be reliable check for will-change. 42 is(painted, true, "element should have been painted"); 43 44 element.remove(); 45 }); 46 47 add_task(async () => { 48 var element = document.createElement("div"); 49 document.body.appendChild(element); 50 51 element.style.willChange = "opacity"; 52 53 await waitForPaints(); 54 55 utils.checkAndClearPaintedState(element); 56 element.style.opacity = "0.5"; 57 58 await waitForPaints(); 59 60 var painted = utils.checkAndClearPaintedState(element); 61 // BasicLayers' heuristics are so that even with will-change:opacity, 62 // we can still have repaints. 63 if (utils.layerManagerType != "Basic") { 64 is(painted, false, "will-change:opacity element should not have been painted"); 65 } 66 67 element.remove(); 68 }); 69 70 add_task(async () => { 71 var element = document.createElement("div"); 72 document.body.appendChild(element); 73 74 element.style.willChange = "transform"; 75 76 await waitForPaints(); 77 78 utils.checkAndClearPaintedState(element); 79 element.style.transform = "translateY(-5px)"; 80 81 await waitForPaints(); 82 83 var painted = utils.checkAndClearPaintedState(element); 84 // BasicLayers' heuristics are so that even with will-change:transform, 85 // we can still have repaints. 86 if (utils.layerManagerType != "Basic") { 87 is(painted, false, "will-change:transform element should not have been painted"); 88 } 89 90 element.remove(); 91 }); 92 93 add_task(async () => { 94 var element = document.createElement("div"); 95 document.body.appendChild(element); 96 97 element.style.willChange = "translate"; 98 99 await waitForPaints(); 100 101 utils.checkAndClearPaintedState(element); 102 element.style.translate = "5px"; 103 104 await waitForPaints(); 105 106 var painted = utils.checkAndClearPaintedState(element); 107 // BasicLayers' heuristics are so that even with will-change:translate, 108 // we can still have repaints. 109 if (utils.layerManagerType != "Basic") { 110 is(painted, false, "will-change:translate element should not have been painted"); 111 } 112 113 element.remove(); 114 }); 115 116 add_task(async () => { 117 var element = document.createElement("div"); 118 document.body.appendChild(element); 119 120 element.style.willChange = "offset-path"; 121 122 await waitForPaints(); 123 124 utils.checkAndClearPaintedState(element); 125 element.style.offsetPath = "path('M55 50 h1')"; 126 127 await waitForPaints(); 128 129 var painted = utils.checkAndClearPaintedState(element); 130 // BasicLayers' heuristics are so that even with will-change:offset-path, 131 // we can still have repaints. 132 if (utils.layerManagerType != "Basic") { 133 is(painted, false, "will-change:offset-path element should not have been painted"); 134 } 135 136 element.remove(); 137 }); 138 139 </script> 140 </html>