On 8/26/13 9:11 PM, L. David Baron wrote:
Is it worth prioritizing having working incremental layout so that you can benchmark the architecture for doing incremental updates (and make sure it performs acceptably) over these tasks that you list? (As somebody following from a distance, I'm more concerned about that, because it seems likely to be the sort of thing that might require changes in architecture and thus rewriting code that would implement the above.)
We have a plan for incremental layout which is partially implemented already. Right now, I believe what is implemented is that changes that require only repaints do not reflow, and there is some initial work on style struct diffing and dirty bit propagation. Also intrinsic width bubbling is skipped if it is not needed. DLBI is underway but needs the flow tree construction to be rewritten to be useful.
It definitely makes sense to get incremental layout (and perhaps bidi) working before redoing too much code that would have to be rewritten. At this point I think that the "visitor + kernel function" pattern will work with incremental reflow, so any changes that can fit into this framework are likely to be incremental-safe. This includes stuff like margin collapsing, negative margins, and negative heights. Also, areas that are pure CSS parsing strike me as fine to work on.
Areas where we will have to be careful to make incremental-safe are tables, absolute positioning, and fixed positioning. I think some of that stuff should wait on the flow tree construction phase to be rewritten to be incremental. I would advise against making sweeping changes to flow tree construction in the current framework; better to just push on the flow tree construction rewrite to be bottom-up, parallelizable, and to propagate dirty bits efficiently (i.e. be incremental). However, as I said I think constraint solving changes, especially if they're just to kernel functions, are fine.
Patrick _______________________________________________ dev-servo mailing list dev-servo@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-servo