summaryrefslogtreecommitdiff
path: root/tests/SurfaceViewSyncTest
AgeCommit message (Collapse)Author
2023-01-27Expose SurfaceSyncGroup public APIs Chavi Weingarten
Test: SurfaceSyncGroupContinuousTest Bug: 237804605 Change-Id: Ibdfde9c4f9d7bf6ff23987ead43e6e93bc7cd3b1
2022-12-27Add traces and more debugging for SurfaceSyncGroup. Chavi Weingarten
Test: perfetto and logs Bug: 263340863 Change-Id: I16f42e2323625ae6b9209215b6a95f958bae6835
2022-07-25Refactor SurfaceSyncer to use SurfaceSyncGroups instead of syncId chaviw
There's no need for SurfaceSyncer to store the SyncSets and only return a syncId. The callers can instead own the SyncGroups and call methods directly on them. This makes the code more readable and cleans up Syncer since you can directly call methods instead of piping through an outer method. Test: SurfaceSyncGroupContinuousTest Test: SurfaceSyncGroupTest Change-Id: I82976e26e10e20d2752e6be24a45069a6a64e849 Bug: 237804605
2022-03-02Changed setSyncTransaction to syncNextTransaction with callback logic. Tianhao Yao
Modified SurfaceView and ViewRootImpl to provide callbacks when syncing a transaction instead of sending transactions. This will ensure a clear ownership of the transaction object since it will be provided in the callback when BBQ adds a buffer into the transaction. Modified JNI to add compatibility for native functions. Test: Manual testing from go/wm-smoke. Test: BLASTBufferQueueTest Bug: 210714235. Change-Id: I1f872d6b2846b0d64d5b33b8866d0b2ec7126c8c
2022-02-25Add SurfaceSyncer class chaviw
Add Syncer class that allows callers to add desired syncs into a set and wait for them to all complete before getting a callback. The purpose of the Syncer is to be an accounting mechanism so each sync implementation doesn't need to handle it themselves. The Syncer class is used the following way. 1. SurfaceSyncer#setupSync is called 2. addToSync is called for every SyncTarget object that wants to be included in the sync. If the addSync is called for a View or SurfaceView it needs to be called on the UI thread. When addToSync is called, it's guaranteed that any UI updates that were requested before addToSync but after the last frame drew, will be included in the sync. 3. SurfaceSyncer#markSyncReady should be called when all the SyncTargets have been added to the SyncSet. Now the SyncSet is closed and no more SyncTargets can be added to it. 4. When all SyncTargets are complete, the final merged Transaction will either be applied or sent back to the caller. The following is what happens within the SyncSet 1. Each SyncableTarget will get an onReadyToSync callback that contains a SyncBufferCallback. 2. Each SyncableTarget needs to invoke SyncBufferCallback#onBufferReady. This makes sure the SyncSet knows when the SyncTarget is complete, allowing the SyncSet to get the Transaction that contains the buffer. 3. When the final FrameCallback finishes for the SyncSet, the syncRequestComplete Consumer will be invoked with the transaction that contains all information requested in the sync. This could include buffers and geometry changes. The buffer update will include the UI changes that were requested for the View. Test: SurfaceSyncerTest Test: SurfaceSyncerContinuousTest Bug: 200284684 Change-Id: Iab87bff8a0483581e57803724eae88f0a3d96c8e