test_smoothness.html (2172B)
1 <html> 2 <head> 3 <title>Test Frame Uniformity While Scrolling</title> 4 <script src="/tests/SimpleTest/SimpleTest.js"></script> 5 <script src="/tests/SimpleTest/EventUtils.js"></script> 6 <script src="/tests/SimpleTest/paint_listener.js"></script> 7 <script type="application/javascript" src="apz_test_utils.js"></script> 8 <script type="application/javascript" src="apz_test_native_event_utils.js"></script> 9 10 <style> 11 #content { 12 height: 5000px; 13 background: repeating-linear-gradient(#EEE, #EEE 100px, #DDD 100px, #DDD 200px); 14 } 15 </style> 16 <script type="text/javascript"> 17 var scrollEvents = 100; 18 var i = 0; 19 // Scroll points 20 var x = 100; 21 var y = 150; 22 23 SimpleTest.waitForExplicitFinish(); 24 var utils = SpecialPowers.getDOMWindowUtils(window); 25 26 async function sendScrollEvent() { 27 var scrollDiv = document.getElementById("content"); 28 29 if (i < scrollEvents) { 30 i++; 31 // Scroll diff 32 var dx = 0; 33 var dy = -10; // Negative to scroll down 34 await synthesizeNativeWheel(scrollDiv, x, y, dx, dy); 35 window.requestAnimationFrame(sendScrollEvent); 36 } else { 37 // Locally, with silk and apz + e10s, retina 15" mbp usually get ~1.0 - 1.5 38 // w/o silk + e10s + apz, I get up to 7. Lower is better. 39 // Windows, I get ~3. Values are not valid w/o hardware vsync 40 var uniformities = utils.getFrameUniformityTestData(); 41 for (var j = 0; j < uniformities.layerUniformities.length; j++) { 42 var layerResult = uniformities.layerUniformities[j]; 43 var layerAddr = layerResult.layerAddress; 44 var uniformity = layerResult.frameUniformity; 45 var msg = "Layer: " + layerAddr.toString(16) + " Uniformity: " + uniformity; 46 SimpleTest.ok((uniformity >= 0) && (uniformity < 4.0), msg); 47 } 48 SimpleTest.finish(); 49 } 50 } 51 52 function startTest() { 53 window.requestAnimationFrame(sendScrollEvent); 54 } 55 56 if (!isApzEnabled()) { 57 SimpleTest.ok(true, "APZ not enabled, skipping test"); 58 SimpleTest.finish(); 59 } 60 </script> 61 </head> 62 63 <body> 64 <div id="content"> 65 </div> 66 </body> 67 </html>