Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(84)

Unified Diff: LayoutTests/fast/events/hit-test-cache.html

Issue 1142283004: Implement a Hit Test Cache. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fix comments from tdresser Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..9e907838fc86feeb06ac70ed4e9bd31c19b4eefc
--- /dev/null
+++ b/LayoutTests/fast/events/hit-test-cache.html
@@ -0,0 +1,110 @@
+<!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>
+setPrintTestResultsLazily();
+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()
+{
+ internals.clearHitTestCache(document);
+ document.lastHitTestCount = internals.hitTestCount(document);
+ document.lastHitTestCacheHits = internals.hitTestCacheHits(document);
+}
+
+function checkElementAt(x, y, expectedHitTestCount, expectedHitTestCacheCount)
+{
+ shouldBe("document.elementFromPoint(" + x + "," + y + ")",
+ "internals.elementFromPointNoCache(document, " + x + ", " + y + ")");
+ shouldBeEqualToNumber("hitTestCountDelta()", expectedHitTestCount);
+ shouldBeEqualToNumber("hitTestCacheHitsDelta()", expectedHitTestCacheCount);
+}
+
+onload = function() {
+ clearCounts();
+ debug('Hit test main div');
+ debug('---------------------');
+
+ // Verify that the cache is working; the second call
+ // to checkElementAt should end up using the cache from the first call.
+ checkElementAt(60, 60, 2, 0);
+ checkElementAt(60, 60, 2, 1);
+
+ clearCounts();
+ debug('');
+ debug('Hit test fixed div after scroll');
+ debug('---------------------');
+
+ // Verify that after we scroll an element the hit cache isn't used.
+ checkElementAt(12, 12, 2, 0);
+ checkElementAt(10, 60, 2, 0);
+ window.scrollTo(0, 50);
+ checkElementAt(12, 12, 2, 0);
+
+ clearCounts();
+ debug('');
+ debug('Hit test after style change');
+ debug('---------------------');
+ checkElementAt(12, 12, 2, 0);
+ document.getElementById('target').style.background = "blue";
+ checkElementAt(12, 12, 2, 0);
+
+ clearCounts();
+ debug('');
+ debug('Hit test after dom manipulation');
+ debug('---------------------');
+ checkElementAt(12, 12, 2, 0);
+ document.getElementById('target').setAttribute("foo", "bar");
+ checkElementAt(12, 12, 2, 0);
+ finishJSTest();
+}
+</script>
« no previous file with comments | « no previous file | LayoutTests/fast/events/hit-test-cache-expected.txt » ('j') | Source/core/layout/HitTestCache.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698