diff options
| author | TreeHugger Robot <treehugger-gerrit@google.com> | 2020-02-12 10:02:29 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2020-02-12 10:02:29 +0000 |
| commit | 806bb8bb38eed20361d69b4e980ee4453ae58e54 (patch) | |
| tree | 4d1773fd138ad669542e64befc0be76fb9399732 /core/java/android | |
| parent | d3c418aa09f4b7cce6f2755bbb4d0ac0cbdd5115 (diff) | |
| parent | 7eb2bed2246b6cdf849ce7b4bdb27b7e75283aed (diff) | |
Merge "Apply Insets animation when hw acceleration unavailable"
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/view/InsetsController.java | 9 | ||||
| -rw-r--r-- | core/java/android/view/SyncRtSurfaceTransactionApplier.java | 29 |
2 files changed, 29 insertions, 9 deletions
diff --git a/core/java/android/view/InsetsController.java b/core/java/android/view/InsetsController.java index 15be364c3e1c..25480683c8a8 100644 --- a/core/java/android/view/InsetsController.java +++ b/core/java/android/view/InsetsController.java @@ -700,7 +700,14 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation } mApplier = new SyncRtSurfaceTransactionApplier(mViewRoot.mView); } - mApplier.scheduleApply(params); + if (mViewRoot.mView.isHardwareAccelerated()) { + mApplier.scheduleApply(params); + } else { + // Window doesn't support hardware acceleration, no synchronization for now. + // TODO(b/149342281): use mViewRoot.mSurface.getNextFrameNumber() to sync on every + // frame instead. + mApplier.applyParams(new Transaction(), -1 /* frame */, params); + } } void notifyControlRevoked(InsetsSourceConsumer consumer) { diff --git a/core/java/android/view/SyncRtSurfaceTransactionApplier.java b/core/java/android/view/SyncRtSurfaceTransactionApplier.java index abe44f45aba5..15252b11d5ac 100644 --- a/core/java/android/view/SyncRtSurfaceTransactionApplier.java +++ b/core/java/android/view/SyncRtSurfaceTransactionApplier.java @@ -65,20 +65,33 @@ public class SyncRtSurfaceTransactionApplier { return; } Transaction t = new Transaction(); - for (int i = params.length - 1; i >= 0; i--) { - SurfaceParams surfaceParams = params[i]; - SurfaceControl surface = surfaceParams.surface; - t.deferTransactionUntil(surface, mTargetSc, frame); - applyParams(t, surfaceParams, mTmpFloat9); - } - t.setEarlyWakeup(); - t.apply(); + applyParams(t, frame, params); }); // Make sure a frame gets scheduled. mTargetViewRootImpl.getView().invalidate(); } + /** + * Applies surface parameters on the next frame. + * @param t transaction to apply all parameters in. + * @param frame frame to synchronize to. Set -1 when sync is not required. + * @param params The surface parameters to apply. DO NOT MODIFY the list after passing into + * this method to avoid synchronization issues. + */ + void applyParams(Transaction t, long frame, final SurfaceParams... params) { + for (int i = params.length - 1; i >= 0; i--) { + SurfaceParams surfaceParams = params[i]; + SurfaceControl surface = surfaceParams.surface; + if (frame > 0) { + t.deferTransactionUntil(surface, mTargetSc, frame); + } + applyParams(t, surfaceParams, mTmpFloat9); + } + t.setEarlyWakeup(); + t.apply(); + } + public static void applyParams(Transaction t, SurfaceParams params, float[] tmpFloat9) { if ((params.flags & FLAG_MATRIX) != 0) { t.setMatrix(params.surface, params.matrix, tmpFloat9); |
