Node::renderer() should ASSERT(!view() || !view()->needsLayout()) We should add a new method Node::staleRenderer() which does not ASSERT. That will make it very clear in the callsites if we can expect the renderer to be up to date or not. Obviously parts of the code which update renderers (or don't care if they might be stale) will change to use staleRenderer().
What is the impetus for this?
To make it clear in the source, whether we expect the renderer to be stale or not. My understanding is that noob rendering tree programmers get this wrong all the time (assuming that renderer() is up to date). I suspect we have a number of bugs related to bad assumptions.