Close Transactions explicitly
Ensure one-shot, scheduled Transactions are closed after application. While individual Transaction instances aren't all that heavy, this avoids unnecessary GC pressure and churn. Bug: 216159702 Test: atest WmTests SystemUITests FrameworksCoreTests Change-Id: Iec053dd8163fb9b300fd1e9eb9f1472a0d0dd782
This commit is contained in:
@@ -98,6 +98,13 @@ public class InsetsSourceConsumer {
|
||||
*/
|
||||
private boolean mIsAnimationPending;
|
||||
|
||||
/**
|
||||
* @param type The {@link InternalInsetsType} of the consumed insets.
|
||||
* @param state The current {@link InsetsState} of the consumed insets.
|
||||
* @param transactionSupplier The source of new {@link Transaction} instances. The supplier
|
||||
* must provide *new* instances, which will be explicitly closed by this class.
|
||||
* @param controller The {@link InsetsController} to use for insets interaction.
|
||||
*/
|
||||
public InsetsSourceConsumer(@InternalInsetsType int type, InsetsState state,
|
||||
Supplier<Transaction> transactionSupplier, InsetsController controller) {
|
||||
mType = type;
|
||||
@@ -390,16 +397,17 @@ public class InsetsSourceConsumer {
|
||||
return;
|
||||
}
|
||||
|
||||
final Transaction t = mTransactionSupplier.get();
|
||||
if (DEBUG) Log.d(TAG, "applyRequestedVisibilityToControl: " + mRequestedVisible);
|
||||
if (mRequestedVisible) {
|
||||
t.show(mSourceControl.getLeash());
|
||||
} else {
|
||||
t.hide(mSourceControl.getLeash());
|
||||
try (Transaction t = mTransactionSupplier.get()) {
|
||||
if (DEBUG) Log.d(TAG, "applyRequestedVisibilityToControl: " + mRequestedVisible);
|
||||
if (mRequestedVisible) {
|
||||
t.show(mSourceControl.getLeash());
|
||||
} else {
|
||||
t.hide(mSourceControl.getLeash());
|
||||
}
|
||||
// Ensure the alpha value is aligned with the actual requested visibility.
|
||||
t.setAlpha(mSourceControl.getLeash(), mRequestedVisible ? 1 : 0);
|
||||
t.apply();
|
||||
}
|
||||
// Ensure the alpha value is aligned with the actual requested visibility.
|
||||
t.setAlpha(mSourceControl.getLeash(), mRequestedVisible ? 1 : 0);
|
||||
t.apply();
|
||||
onPerceptible(mRequestedVisible);
|
||||
}
|
||||
|
||||
|
||||
@@ -65,10 +65,12 @@ public class SyncRtSurfaceTransactionApplier {
|
||||
applyParams(t, params);
|
||||
|
||||
mTargetViewRootImpl.registerRtFrameCallback(frame -> {
|
||||
if (mTargetSc == null || !mTargetSc.isValid()) {
|
||||
return;
|
||||
if (mTargetSc != null && mTargetSc.isValid()) {
|
||||
applyTransaction(t, frame);
|
||||
}
|
||||
applyTransaction(t, frame);
|
||||
// The transaction was either dropped, successfully applied, or merged with a future
|
||||
// transaction, so we can safely release its resources.
|
||||
t.close();
|
||||
});
|
||||
|
||||
// Make sure a frame gets scheduled.
|
||||
|
||||
@@ -4175,7 +4175,7 @@ public final class ViewRootImpl implements ViewParent,
|
||||
+ " didProduceBuffer=" + didProduceBuffer);
|
||||
}
|
||||
|
||||
Transaction tmpTransaction = new Transaction();
|
||||
final Transaction tmpTransaction = new Transaction();
|
||||
tmpTransaction.merge(mRtBLASTSyncTransaction);
|
||||
|
||||
// If frame wasn't drawn, clear out the next transaction so it doesn't affect the next
|
||||
@@ -4206,6 +4206,7 @@ public final class ViewRootImpl implements ViewParent,
|
||||
blastSyncConsumer.accept(mSurfaceChangedTransaction);
|
||||
}
|
||||
}
|
||||
tmpTransaction.close();
|
||||
|
||||
if (reportNextDraw) {
|
||||
pendingDrawFinished();
|
||||
|
||||
Reference in New Issue
Block a user