SurfaceView: Synchronize position updates with fixed size changes
This cl solves a couple of issues: 1. Render thread workers and UI thread share the surface size. They work on different frames (UI thread sets up the next frame while render thread is working on the current frame. Accessing the surface size is unsafe and can result in flickers. 2. UI thread is changing the geometry on size change which might conflict with render thread causing flickers. This is because of unsafe accesses as the one mentioned above and the UI thread may not have the up-to-date position of the view. This cl fixes the issues by only applying geometry changes in the UI thread when creating the surface, otherwise the render thread workers are responsible for updating the geometry. The RenderNode position update listeners are updated whenever the surface size changes in order to capture the new size and accompanying changes which must be applied with the new geometry changes. Note: updating the position update listeners will trigger a position update callback so we are guaranteed to apply the changes in scenarios where the fixed size changes but the view size does not change. Test: atest SurfaceViewSyncTest#testSurfaceViewChangeFixedSize Test: atest SurfaceViewSyncTest#testSurfaceViewChangeFixedSizeWithViewSizeChanges Test: go/wm-smoke Test: repro steps from b/190449942 Fixes: 190449942 Change-Id: I076321c853f9a0f6cbf169637e3f3ede60361d60
Loading
Please register or sign in to comment