<br><br><div class="gmail_quote">On Mon, Jan 30, 2012 at 3:56 AM, Nikolas Zimmermann <span dir="ltr"><<a href="mailto:zimmermann@physik.rwth-aachen.de">zimmermann@physik.rwth-aachen.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Good evening WebKit folks,<br>
<br>
while working on some SVG Filter dynamic update issues I found out that long-standing assumptions about the paint time don't hold anymore:<br>
<br>
<svg><br>
<rect id="rect" width="1" height="100"/><br>
<script><br>
function doTest() {<br>
   document.getElementById("rect").setAttribute("width", "100");<br>
   layoutTestController.notifyDone();<br>
}<br>
<br>
layoutTestController.waitUntilDone();<br>
setTimeout(doTest, 0);<br>
</script><br>
</svg><br>
<br>
The document was laid out and painted once before the timeout fired. Most SVG repainting tests work this way: setup document initially, then use a setTimeout(doSomething, 0) to eg. change an attribute, then dump the document to capture that invalidations/repaints work properly.<br>
</blockquote><div><br></div><div>That's racy and doesn't match what actual browsers will do. </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Something has changed recently - to get the same effect as we used to, following is needed:<br>
<script><br>
function doTest() {<br>
   setTimeout(function() {    // EXTRA TIMEOUT 1<br>
       document.getElementById("rect").setAttribute("width", "100");<br>
       setTimeout(function() { layoutTestController.notifyDone(); }, 0); // EXTRA TIMEOUT 2<br>
   }, 0);<br>
}<br>
<br>
layoutTestController.waitUntilDone();<br>
setTimeout(doTest, 0);<br>
</script><br></blockquote><div><br></div><div>This doesn't look any better.</div><div><br></div><div>If you want to paint at a specific time in a repaint test, use layoutTestController.display().</div><div> </div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Does that ring a bell to anyone? Why is the initial painting not done yet, if setTimeout(, 0) fires the first time?<br>
There's also an extra setTimeout needed now, before calling notifyDone(), otherwise the repaint is not captured.<br>
<br>
Currently most SVG tests that exercise dynamic updates are useless, as the painting always happens after the whole script ran, that means it's not possible to capture repaint problems at the moment w/o fixing all these tests.<br>
</blockquote><div><br></div><div>I think you should fix the tests.</div><div><br></div><div>- James</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Cheers,<br>
Niko<br>
<br>
<br>
_______________________________________________<br>
webkit-dev mailing list<br>
<a href="mailto:webkit-dev@lists.webkit.org">webkit-dev@lists.webkit.org</a><br>
<a href="http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev" target="_blank">http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev</a><br>
</blockquote></div><br>