Send releaseCallbackId and releaseFence to correct listener
The scenario is the following: 1. Process1 creates a T1 with a new buffer, release callback, and transaction callback. The release callback is stored locally in mReleaseBufferCallbacks so it only lives in Process1. 2. Process2 creates a T2 with a transaction callback 3. When T1 and T2 are merged, the SC from T1 end up getting the transaction callbacks from T2. SC will end up with multiple transaction callbacks 4. In BufferStateLayer, we only added mPreviousReleaseCallbackId to one transaction callback. There's a chance the release callback would only end up on the transaction callback for Process2. Process2 doesn't have the data about the callback since it was only stored in Process1. When Process2 gets the transaction callback, it will not handle the releaseCallbackId since it doesn't know what release callback it represents. Process1 will get a transaction callback, but will not contain a releaseCallbackId. To fix, add releaseBufferEndpoint that is set when the client calls setBuffer. This is used in SurfaceFlinger to recognize which listener was the one that set the buffer so it can send the release information to the correct listener. Test: ReleaseBufferCallback_test Bug: 193565751 Change-Id: I534fbde2a54608c2e30852e48dc0c75c86b22525
Loading
Please register or sign in to comment