Index: LayoutTests/fast/events/hit-test-cache.html |
diff --git a/LayoutTests/fast/events/hit-test-cache.html b/LayoutTests/fast/events/hit-test-cache.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e98d2a5ea3ff3f72465eeb890770e2a77e7cd659 |
--- /dev/null |
+++ b/LayoutTests/fast/events/hit-test-cache.html |
@@ -0,0 +1,87 @@ |
+<!DOCTYPE html> |
+<meta name="viewport" content="width=device-width, initial-scale=1"> |
+<style> |
+html { |
+ font-family: Ahem; |
+ font-size: 10px; |
+} |
+#testArea { |
+ height: 6000px; |
+ width: 500px; |
+ background: red; |
+} |
+#target { |
+ position: fixed; |
+ left: 10px; |
+ top: 10px; |
+ width: 40px; |
+ height: 40px; |
+ background: yellow; |
+} |
+</style> |
+<div id=testArea> |
+ <div id=target></div> |
+</div> |
+<p id="description"></p> |
+<div id="console"></div> |
+<script src="../../resources/js-test.js"></script> |
+<script> |
+if (window.internals) { |
+ window.internals.settings.setViewportEnabled(true); |
+ window.internals.settings.setMockScrollbarsEnabled(true); |
+} |
+ |
+description("Ensure hit test cache works in correct scenarios of scrolling, dom and style changes."); |
+ |
+function hitTestCountDelta() |
+{ |
+ var lastCount = 0; |
+ if ('lastHitTestCount' in document) |
+ lastCount = document.lastHitTestCount; |
+ var newCount = internals.hitTestCount(document); |
+ document.lastHitTestCount = newCount; |
+ return newCount - lastCount; |
+} |
+ |
+function hitTestCacheHitsDelta() |
+{ |
+ var lastCount = 0; |
+ if ('lastHitTestCacheHits' in document) |
+ lastCount = document.lastHitTestCacheHits; |
+ var newCount = internals.hitTestCacheHits(document); |
+ document.lastHitTestCacheHits = newCount; |
+ return newCount - lastCount; |
+} |
+ |
+function clearCounts() |
+{ |
+ document.lastHitTestCount = internals.hitTestCount(document); |
+ document.lastHitTestCacheHits = internals.hitTestCacheHits(document); |
+} |
+ |
+function reportElementAt(x, y) |
+{ |
+ var element = document.elementFromPoint(x, y); |
+ debug("Element is " + element.nodeName + ", " + element.id); |
+ element = internals.elementFromPointNoCache(document, x, y); |
+ debug("Element (no cache) is " + element.nodeName + ", " + element.id); |
+ debug("Hit Test " + hitTestCountDelta() + "/" + hitTestCacheHitsDelta()); |
+} |
+ |
+onload = function() { |
+ clearCounts(); |
+ debug('Hit test fixed div after scroll'); |
Rick Byers
2015/06/05 20:48:58
please add at least one simple test case where the
dtapuska
2015/06/09 18:21:23
Done.
|
+ debug('---------------------'); |
+ |
+ reportElementAt(12, 12); |
+ reportElementAt(10, 60); |
+ window.scrollTo(0, 50); |
+ reportElementAt(12, 12); |
+ |
Rick Byers
2015/06/05 20:48:59
nit: debug('') here to make the output more readab
dtapuska
2015/06/09 18:21:23
Done.
|
+ debug('Hit test after style change'); |
+ debug('---------------------'); |
+ reportElementAt(12, 12); |
+ document.getElementById('target').style.background = "blue"; |
+ reportElementAt(12, 12); |
Rick Byers
2015/06/05 20:48:58
I'd prefer if the test code indicated what the exp
dtapuska
2015/06/09 18:21:23
Done.
|
+} |
+</script> |