RenderTreeUpdater::tearDownRenderers can delete a whole renderer subtree, and in doing so RenderTreeBuilder::detachFromRenderElement() issues a repaint on (almost) all child renderers. We should be able to optimize this to just repaint the root renderer's visual overflow rect, as long as we correctly handle out-of-flow descendants.
<rdar://problem/47270842>
This does happen quite a bit during Speedometer: RenderTreeUpdater::tearDownRenderers with root element 0x3ae9037e0, root renderer 0x3af803530 RenderTreeBuilder 0x7ffeec160418 detachFromRenderElement repainting renderer 0x3afa020f0 RenderTreeBuilder 0x7ffeec160418 detachFromRenderElement repainting renderer 0x397903948 RenderTreeBuilder 0x7ffeec160418 detachFromRenderElement repainting renderer 0x3afa02200 RenderTreeBuilder 0x7ffeec160418 detachFromRenderElement repainting renderer 0x3afa01fe0 RenderTreeBuilder 0x7ffeec160418 detachFromRenderElement repainting renderer 0x3af803530 RenderTreeUpdater::tearDownRenderers with root element 0x3ae9037e0 done RenderTreeBuilder 0x7ffeec160300 detachFromRenderElement repainting renderer 0x3afa02970 RenderTreeBuilder 0x7ffeec160300 detachFromRenderElement repainting renderer 0x3b0700138 RenderTreeUpdater::tearDownRenderers with root element 0x3961006c0, root renderer 0x397303740 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397303850 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x3979010a8 RenderTreeUpdater::tearDownRenderers with root element 0x3af200070, root renderer 0x397a00da8 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397a00da8 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x3af300088 RenderTreeUpdater::tearDownRenderers with root element 0x3af200070 done RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397303960 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397303a70 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397303740 RenderTreeUpdater::tearDownRenderers with root element 0x3961006c0 done RenderTreeUpdater::tearDownRenderers with root element 0x396100720, root renderer 0x3afa02310 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x3afa02530 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397903a80 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397903ae8 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397a00fd0 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397903b50 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397a00f18 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397903bb8 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397903c20 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397903c88 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397a01140 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397903cf0 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397a01088 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397903d58 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397903dc0 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397903e28 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397a012b0 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397903e90 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397a011f8 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x397903ef8 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x3afa02640 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x39a500480 RenderTreeUpdater::tearDownRenderers with root element 0x3af2000e0, root renderer 0x3afa02420 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x3afa02420 RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x3af300110 RenderTreeUpdater::tearDownRenderers with root element 0x3af2000e0 done RenderTreeBuilder 0x7ffeec163318 detachFromRenderElement repainting renderer 0x3afa02310 RenderTreeUpdater::tearDownRenderers with root element 0x396100720 done