Self replying since I had a conversation with Xidorn...

So apparently we just use frames for everything that ends up being a
rect (unlike WK, for example, that doesn't mutate the "render tree"
while doing layout).

So we just create more frames / delete frames while reflowing because
we've run out of space for example, or because we managed to complete a
reflow and the rest of the in-flow continuations are now useless.

And thus probably pursuing this is much harder than what I thought in
the first time...

If people think it's still worth I'm happy to hear discussion,
otherwise, I guess you can disregard the previous email :)

 -- Emilio

On 09/12/2017 12:05 AM, Emilio Cobos Álvarez wrote:
> Hi,
> 
> So today I was looking at a bug[1] that happens to be a combination of
> edge cases (as usual) ending up badly. In particular, a columnset frame
> removing a not-first-in-flow frame via DeleteNextInFlow that happens to
> hold the pseudo-elements of a nested display: contents element, thus
> unbinding them from the tree and breaking the counter manager invariants.
> 
> I've noticed recently in other bug I've recently fixed a similar pattern
> (that bug crashed creating a first-letter continuation during bidi
> resolution, though the underlying issue ended up being other).
> 
> I think the frame tree would be much easier to reason about and manage
> if it didn't mutate during reflow, though there seem to be a bunch of
> places that do that (grepping for StealFrame, CreateContinuation, ...).
> 
> Note: I mean mutate as "creating / destroying frames", not as in "not
> change any member variable of any frame", obviously.
> 
> My questions are (for those who know more about Gecko layout than me):
> 
>  * Do you think it is reasonably doable to stop mutating the frame tree
> from layout?
>  * Would it be worth it? (I think it would!)
>  * Would it be reasonable to spend some time on it? (perhaps in the
> medium / long term, given right now everyone has other important things
> to do :P)
> 
> I could believe that most of these changes may require some rework of
> some parts of layout and frame construction (I'm looking at float /
> out-of-flows / first-letters, etc), but I also think some of those are
> the ones where the frame constructor handles dynamic changes poorly
> (ib-splits certainly enter in this category, though I'm not sure that we
> mutate those during reflow).
> 
> Anyway I could believe that if we refactor things with this in mind we
> could make frame construction better for dynamic changes.
> 
> There are also a few CreateContinuationFor calls in block layout that
> could also be hard to replace, haven't checked in detail yet...
> 
> Anyway, just wanted to know if other people think this goal would be
> reasonable / worth it.
> 
> Thanks in advance,
> 
>  -- Emilio
> 
> [1]: https://bugzilla.mozilla.org/show_bug.cgi?id=1381134
> 
_______________________________________________
dev-tech-layout mailing list
dev-tech-layout@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-tech-layout

Reply via email to