Gecko:DisplayListBasedInvalidation: Difference between revisions

Line 63: Line 63:
* Inactive Layer tree has changed - Inactive LayerManager(0x11a3e8e20) for display item Opacity(0x116bf6560) has an invalid region - invalidating layer 0x119286800
* Inactive Layer tree has changed - Inactive LayerManager(0x11a3e8e20) for display item Opacity(0x116bf6560) has an invalid region - invalidating layer 0x119286800
** When we have an inactive layer subtree, DLBI runs on the individual layers (and is logged as such) and we run LayerTreeInvalidation to find the changed area of the layer tree.
** When we have an inactive layer subtree, DLBI runs on the individual layers (and is logged as such) and we run LayerTreeInvalidation to find the changed area of the layer tree.


Logging Wish List:
Logging Wish List:
Line 73: Line 70:
* Convert display item type numbers to names.
* Convert display item type numbers to names.
* View the inactive layer trees created/processed when MOZ_DUMP_PAINT_LIST=1
* View the inactive layer trees created/processed when MOZ_DUMP_PAINT_LIST=1
== Under Invalidation ==
There are 3 main reasons for not invalidating the correct area:
* Not scheduling a paint
** If you're not getting 'PAINT START' / 'PAINT END' logged in response to the change, then nothing is scheduling a paint. You need to ensure that the changed frame is calling nsIFrame::SchedulePaint (possibly via one of the InvalidateFrame() functions).
* Display item not changed
** If the display item you expect to have changed isn't listed, then DLBI hasn't detected the change. You either need to mark the frame as invalid (using nsIFrame::InvalidateFrame), or check the logic in nsDisplayItem::ComputeInvalidationRegion (virtual!) to make sure that it can detect your change.
* Wrong area invalidated
** If your display item is listed as invalidated, but doesn't cover the right pixels, then this is most likely a bug in your implementation of ComputeInvalidationRegion, GetBounds, GetBorderRect, GetPaddingRect or GetContentRect on your display item. The code calling this is FrameLayerBuilder::InvalidateForLayerChange.


== Other Useful Tools ==
== Other Useful Tools ==
* Turn on paint flashing pref - nglayout.debug.paint_flashing
* Turn on paint flashing pref - nglayout.debug.paint_flashing
Confirmed users
44

edits