Move handleCompleteDeferredRemoval to animator thread
The method may remove window hierarchy element in random timing (usually depends on animation). If the caller indirectly calls to performSurfacePlacement inside a loop that also removes element, the loop may encounter index out of bound exception. It is hard for the caller to aware how to iterate window containers safely. Because performSurfacePlacement always calls WindowAnimator scheduleAnimationLocked, the movement of invocation should not miss the original cases for deferred removal. It also reduces unnecessary invocations up to 50% because animator won't execute multiple times if it is scheduled, while performSurfacePlacement calls each time. And the partial cost may be moved out from binder thread. Bug: 173270358 Test: CtsWindowManagerDeviceTestCases Change-Id: If9a45403e7bbedb2073f8e6f6e90934af0c4c29e
Loading
Please register or sign in to comment