6 window.testRunner.dumpAsText();
9 window.internals.settings.setAcceleratedCompositingForOverflowScrollEnabled(false);
11 function hasScrollbarRepaint(layerTree)
13 return hasScrollbarRepaintHelper(JSON.parse(layerTree));
16 function hasScrollbarRepaintHelper(jsonLayerTree) {
17 var repaintRects = jsonLayerTree["repaintRects"];
19 for (var i = 0; i < repaintRects.length; ++i) {
20 var width = repaintRects[i][2];
21 var height = repaintRects[i][3];
22 if (width != 15 || height != 285)
26 var children = jsonLayerTree["children"];
28 for (var i = 0; i < children.length; i++) {
29 if (hasScrollbarRepaintHelper(children[i]))
36 function testRepaint() {
38 for (var testIteration = 0; testIteration < 3; ++testIteration) {
39 var container = document.getElementById("container");
40 var marquee = document.getElementById("marquee");
41 var span = document.getElementById("span");
43 var toScroll = container;
44 if (testIteration == 0) {
45 var selection = getSelection();
47 var range = document.createRange();
48 range.selectNode(document.getElementById("selection-start"));
49 selection.addRange(range);
51 range = document.createRange();
52 range.selectNode(document.getElementById("selection-end"));
53 selection.addRange(range);
54 } else if (testIteration == 1) {
55 marquee.style.display = "block";
58 span.style.display = "inline";
61 document.body.offsetTop;
64 window.internals.startTrackingRepaints(document);
66 toScroll.scrollTop = 100;
68 if (window.internals) {
69 if (hasScrollbarRepaint(window.internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_REPAINT_RECTS)))
70 result += "PASS repainted when expected\n";
72 result += "FAIL did not repaint when expected\n";
73 window.internals.stopTrackingRepaints(document);
76 // Do all cleanup here (so as not to affect repaint rects).
77 toScroll.scrollTop = 0;
78 span.style.display = "none";
79 marquee.style.display = "none";
80 getSelection().removeAllRanges();
86 function testNoRepaint() {
88 var container = document.getElementById("container");
90 document.body.offsetTop;
93 window.internals.startTrackingRepaints(document);
95 container.scrollTop = 100;
97 if (window.internals) {
98 if (!hasScrollbarRepaint(window.internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_REPAINT_RECTS)))
99 result += "PASS did not repaint as expected\n";
101 result += "FAIL repainted when unexpected\n";
102 window.internals.stopTrackingRepaints(document);
105 container.scrollTop = 0;
110 function testOverflowHidden() {
112 var container = document.getElementById("container");
114 container.style.overflow = "hidden";
115 document.body.offsetTop;
117 if (window.internals)
118 window.internals.startTrackingRepaints(document);
120 container.scrollTop = 100;
122 if (window.internals) {
123 if (hasScrollbarRepaint(window.internals.layerTreeAsText(document, internals.LAYER_TREE_INCLUDES_REPAINT_RECTS)))
124 result += "PASS repainted when expected\n";
126 result += "FAIL did not repaint when expected\n";
128 window.internals.stopTrackingRepaints(document);
131 container.scrollTop = 0;
137 var marquee = document.getElementById("marquee");
139 var result = testRepaint();
140 result += testNoRepaint();
141 result += testOverflowHidden();
142 var pre = document.createElement('pre');
143 document.body.appendChild(pre);
144 pre.innerHTML = result;
145 if (!window.internals)
146 document.getElementById("description").style.display = "block";
149 window.onload = doTests;
152 #target::selection { background-color: green; }
157 border: 1px black solid;
159 -webkit-backface-visibility: hidden;
169 background-color: blue;
170 -webkit-backface-visibility: hidden;
178 background-color: green;
179 -webkit-backface-visibility: hidden;
193 -webkit-backface-visibility: hidden;
199 <pre id="description">
200 This test ensures that if the only thing that scrolls is a composited layer,
201 we do not repaint. It passes if we repaint when we have to draw the selection
202 block gaps or if we have content that is not in a composited layer. It also
203 checks that we do not repaint when all the content is in a composited layer.
206 <span id="span">Hello!</span>
207 <div id="fixed"></div>
208 <div class="scrolled" id="selection-start"></div>
209 <div class="scrolled" id="selection-end"></div>
210 <div class="scrolled"></div>
211 <div class="scrolled"></div>
212 <div class="scrolled"></div>
213 <div class="scrolled"></div>
214 <div class="scrolled"></div>
215 <div class="scrolled"></div>
216 <div class="scrolled"></div>
218 <marquee id="marquee" direction="up" scrollamount="1">
219 <p>Lorem ipsum dolor amet</p>
220 <p>Lorem ipsum dolor amet</p>
221 <p>Lorem ipsum dolor amet</p>
222 <p>Lorem ipsum dolor amet</p>
223 <p>Lorem ipsum dolor amet</p>
224 <p>Lorem ipsum dolor amet</p>
225 <p>Lorem ipsum dolor amet</p>