Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Skip to content
Commit ebb486e7 authored by Marissa Wall's avatar Marissa Wall
Browse files

jank: un-handled deferred transaction

A deferred transaction comes in at exactly the wrong moment and
sets the eTraversalNeeded transaction flag. The transaction is
applied but it still needs to run handleTransaction/doTransaction
to update its sync points, change current to drawing state, etc.

At the same time, SurfaceFlinger's main thread clears the
eTraversalNeeded bit because in almost all cases it is about to do
a traversal. In this case, it isn't enough.

The deferred transaction is applied but never handled. It needs
eTraversalNeeded set before it can be handled. Latch buffer is
called every frame but the sync points haven't been updated so
it fails and calls signalLayerUpdate. signalLayerUpdate isn't
sufficient because it doesn't add eTraversalNeeded. The cycle
continues (for that layer and only that layer) until any layer
causes eTraversalNeeded to be set.

The ideal solution would be to restructure a lot of the underlying
code but it is too late in qt-dev for such a large change.

This patch adds the eTraversalNeeded bit when deferred transactions
can't be latched because the sync points are out of date.

Bug: 132516010
Test: Transaction_tests for normal breakages
      Chrome doesn't repro the bug

Change-Id: I9c30276fdb94d25a0f09ea3484497f10286c99e6
parent cf7c96e5
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment