Gecko:DisplayListBasedInvalidation
Jump to navigation
Jump to search
Display List Based Invalidation
Instead of invalidating areas of the screen as we do currently, we want invalidation to happen at the display list/layer boundary to reduce unnecessary redrawing
Basic Outline
- Display List changes
- We want to compare the new display to the old one and invalidate layer regions of anything that has changed.
- We already cache most of the information that we need, and iterate over it in FrameLayerBuilder.
- We need to add the old bounds of the display item into the cached data
- Some items (e.g. borders) need two rectangles: an outer rect and an inner rect
- Invalidating display items that no longer exist.
- How do we do this?
- We could iterate over the frames DisplayItemData at the end of nsFrame::BuildDisplayList, and send invalidations for any display item types that weren't just created.
- FrameLayerBuilder already detects items being added to or removed from a layer, so this won't be a problem if we do the processing in FrameLayerBuilder
- Style and other changes
- These should invalidate all (?) display items for the frame, so we can just set a dirty bit on the frame and check this from FrameLayerBuilder
Potential Problems
- Window resizing / incremental loading
- We want to make sure that we are only invalidating the new areas, not the entire page
- Bordered frame size changes
- We don't really want to invalidate the entire area here, but we do need to invalidate some of the internal area as well as the extended bounds.