Bug 193419 - Optimize repaints during RenderTreeUpdater::tearDownRenderers()
Summary: Optimize repaints during RenderTreeUpdater::tearDownRenderers()
Status: NEW
Alias: None
Product: WebKit
Classification: Unclassified
Component: Layout and Rendering (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Nobody
URL:
Keywords: InRadar
Depends on:
Blocks:
 
Reported: 2019-01-14 16:54 PST by Simon Fraser (smfr)
Modified: 2019-01-14 16:57 PST (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Simon Fraser (smfr) 2019-01-14 16:54:12 PST
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.
Comment 1 Radar WebKit Bug Importer 2019-01-14 16:54:43 PST
<rdar://problem/47270842>
Comment 2 Simon Fraser (smfr) 2019-01-14 16:57:59 PST
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