Merge "Apply Insets animation when hw acceleration unavailable"

This commit is contained in:
TreeHugger Robot
2020-02-12 10:02:29 +00:00
committed by Android (Google) Code Review
2 changed files with 29 additions and 9 deletions

View File

@@ -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) {

View File

@@ -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);