Fix synchronisation in BackgroundBlurDrawable
The PositionUpdateListener in BackgroundBlurDrawable is called from a thread pool to update the position of the BlurRegion. After that, in frame drawing callback (RenderThread), the Aggregator takes all the settings in BackgroundBlurDrawable and dispatches them to SF. However, while the RenderThread is working on frame N, the Ui thread is working on frame N+1. So when the frame drawing callback is called on RenderThread for frame N, BackgroundBlurDrawable might already be holding settings for frame N+1. In this CL, we fix that by making BackgroundBlurDrawable work only on Ui thread, while BlurRegion lives only on RenderThread. Just before drawing, we copy the state of BackgroundBlurDrawable into a BlurRegion. So when render thread starts doing its thing for frame N, Ui thread can start setting up BackgroundBlurDrawable for frame N+1. The settings for frame N are already copied over to BlurRegion. In frame drawing callback, we take the blur regions if there is a pending update and send them to SF. Bug: 167166562 Test: m && atest BlurAggregatorTest Change-Id: Icec0fa8e97de30b7bad15b97f848ae642076652f
Loading
Please register or sign in to comment