Fwd: khtml rendering performance

Germain Garand germain at ebooksfrance.org
Sat Dec 11 00:43:35 GMT 2004


Le Vendredi 03 Décembre 2004 15:43, Allan Sandfeld Jensen a écrit :
> > What do you think?
>
> It sounds great if we can do it this simple.
>

As a matter of fact, this kept me busy for a while :)

Over the week, I investigated several ways of simply and generally telling 
where to stop repainting in the hierarchy of a given object, but really found 
nothing reliable.

I understand why WebCore choose a brute force approach and tracks/calculate 
the absolute position and rectangle of every single RenderObject, but I still 
questioned its value, for it has many drawbacks:
1) it is not yet reliable - e.g even the simple testcase attached as repaint 
problems (at least in Nokia's WebCore) and I didn't look for it.
2) it is expensive and slows down layout for little benefits as far as 
non-layered objects are concerned (more on that latter)
3) it is convoluted and as such difficult to evaluate/maintain in a 
deterministic way

eventually, I considered that the major problem we have is repaint performance 
on layered objects. Performance on normal flow repaint is generally not 
critical and may even be worsened by expensive calculations at layout time, 
since in most cases, changes will percolate down to the canvas anyway.

So I came up with attached implementation, which gets layered repaints right 
(which is easily deterministic) and simply proceed to dirty non-layered 
objects up to the closest block formatting context with non variable 
width/height.

As far as I can tell this fixes all real-world testcases I have, including 
tomshardware.com.
For a striking example, see e.g http://geocities.com/e6y/doom.html

Greetings,
Germain
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.kde.org/mailman/private/kfm-devel/attachments/20041211/04ad95d5/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: repaints.2.diff
Type: text/x-diff
Size: 23790 bytes
Desc: not available
URL: <https://mail.kde.org/mailman/private/kfm-devel/attachments/20041211/04ad95d5/attachment.diff>


More information about the kfm-devel mailing list