summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorTreeHugger Robot <treehugger-gerrit@google.com>2020-02-12 10:02:29 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-02-12 10:02:29 +0000
commit806bb8bb38eed20361d69b4e980ee4453ae58e54 (patch)
tree4d1773fd138ad669542e64befc0be76fb9399732 /core/java/android
parentd3c418aa09f4b7cce6f2755bbb4d0ac0cbdd5115 (diff)
parent7eb2bed2246b6cdf849ce7b4bdb27b7e75283aed (diff)
Merge "Apply Insets animation when hw acceleration unavailable"
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/view/InsetsController.java9
-rw-r--r--core/java/android/view/SyncRtSurfaceTransactionApplier.java29
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);