| <!DOCTYPE html> |
| <html> |
| <head> |
| <link rel="stylesheet" href="resources/compositor-touch-hit-rects.css"> |
| <style> |
| #layer { |
| will-change: transform; |
| } |
| #manychildren { |
| height: 10px; |
| } |
| .child:first-child { |
| margin-top: 20px; |
| } |
| .child { |
| height: 5px; |
| width: 5px; |
| margin: 5px; |
| margin-left: 300px; |
| } |
| </style> |
| </head> |
| <body> |
| <p id="description"> |
| Tests that there is an upper limit on the number of hit rects generated per layer. http://crbug.com/299177. |
| </p> |
| |
| <div id="tests"> |
| <div id="layer"> |
| <div id="manychildren" class="testcase"> |
| <div class="child"></div> |
| </div> |
| </div> |
| </div> |
| |
| <div id="console"></div> |
| <script src="resources/compositor-touch-hit-rects.js"></script> |
| <script> |
| |
| const kMaxRects = 100; |
| const kFixedRects = 1; |
| |
| function verifyRectCount(expectedRects) { |
| if (!window.internals) |
| log('Missing window.internals'); |
| |
| internals.forceCompositingUpdate(document); |
| var rects = internals.touchEventTargetLayerRects(document); |
| log('Test node has ' + document.querySelectorAll('.child').length + ' children with ' + rects.length + ' rects'); |
| if (rects.length != expectedRects) { |
| log('FAIL - got ' + rects.length + ' rects, expected ' + expectedRects + '.'); |
| } |
| } |
| |
| preRunHandlerForTest['manychildren'] = function(e) { |
| var template = document.querySelector('.child'); |
| for( var i = 0; i < kMaxRects - kFixedRects - 1; i++) { |
| template.parentElement.appendChild(template.cloneNode()); |
| } |
| |
| // Make sure the test is working properly. |
| verifyRectCount(kMaxRects); |
| |
| // Now push us over the limit. |
| template.parentElement.appendChild(template.cloneNode()); |
| verifyRectCount(1); |
| |
| // Verify that any additional rects get subsumed. |
| template.parentElement.appendChild(template.cloneNode()); |
| verifyRectCount(1); |
| }; |
| |
| </script> |
| </body> |