Merge "InsetAnimationControlImpl: Copy SurfaceControl" into rvc-dev

This commit is contained in:
Rob Carr
2020-03-13 20:18:09 +00:00
committed by Android (Google) Code Review
5 changed files with 32 additions and 1 deletions

View File

@@ -56,4 +56,10 @@ public interface InsetsAnimationControlCallbacks {
* apply. * apply.
*/ */
void applySurfaceParams(SyncRtSurfaceTransactionApplier.SurfaceParams... params); void applySurfaceParams(SyncRtSurfaceTransactionApplier.SurfaceParams... params);
/**
* Post a message to release the Surface, guaranteed to happen after all
* previous calls to applySurfaceParams.
*/
void releaseSurfaceControlFromRt(SurfaceControl sc);
} }

View File

@@ -180,10 +180,19 @@ public class InsetsAnimationControlImpl implements WindowInsetsAnimationControll
mAnimation.setAlpha(mPendingAlpha); mAnimation.setAlpha(mPendingAlpha);
if (mFinished) { if (mFinished) {
mController.notifyFinished(this, mShownOnFinish); mController.notifyFinished(this, mShownOnFinish);
releaseLeashes();
} }
return mFinished; return mFinished;
} }
private void releaseLeashes() {
for (int i = mControls.size() - 1; i >= 0; i--) {
final InsetsSourceControl c = mControls.valueAt(i);
if (c == null) continue;
c.release(mController::releaseSurfaceControlFromRt);
}
}
@Override @Override
public void finish(boolean shown) { public void finish(boolean shown) {
if (mCancelled || mFinished) { if (mCancelled || mFinished) {
@@ -191,6 +200,7 @@ public class InsetsAnimationControlImpl implements WindowInsetsAnimationControll
} }
setInsetsAndAlpha(shown ? mShownInsets : mHiddenInsets, 1f /* alpha */, 1f /* fraction */); setInsetsAndAlpha(shown ? mShownInsets : mHiddenInsets, 1f /* alpha */, 1f /* fraction */);
mFinished = true; mFinished = true;
mShownOnFinish = shown; mShownOnFinish = shown;
} }
@@ -207,6 +217,8 @@ public class InsetsAnimationControlImpl implements WindowInsetsAnimationControll
} }
mCancelled = true; mCancelled = true;
mListener.onCancelled(); mListener.onCancelled();
releaseLeashes();
} }
public boolean isCancelled() { public boolean isCancelled() {

View File

@@ -75,6 +75,12 @@ public class InsetsAnimationThreadControlRunner implements InsetsAnimationContro
t.apply(); t.apply();
t.close(); t.close();
} }
@Override
public void releaseSurfaceControlFromRt(SurfaceControl sc) {
// Since we don't push the SurfaceParams to the RT we can release directly
sc.release();
}
}; };
@UiThread @UiThread

View File

@@ -704,7 +704,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
} }
final InsetsSourceControl control = consumer.getControl(); final InsetsSourceControl control = consumer.getControl();
if (control != null) { if (control != null) {
controls.put(consumer.getType(), control); controls.put(consumer.getType(), new InsetsSourceControl(control));
typesReady |= toPublicType(consumer.getType()); typesReady |= toPublicType(consumer.getType());
} else if (animationType == ANIMATION_TYPE_SHOW) { } else if (animationType == ANIMATION_TYPE_SHOW) {

View File

@@ -409,6 +409,13 @@ class InsetsPolicy {
t.close(); t.close();
} }
// Since we don't push applySurfaceParams to a Handler-queue we don't need
// to push release in this case.
@Override
public void releaseSurfaceControlFromRt(SurfaceControl sc) {
sc.release();
}
@Override @Override
public void startAnimation(InsetsAnimationControlImpl controller, public void startAnimation(InsetsAnimationControlImpl controller,
WindowInsetsAnimationControlListener listener, int types, WindowInsetsAnimationControlListener listener, int types,