summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorVishnu Nair <vishnun@google.com>2021-04-12 18:31:52 -0700
committerVishnu Nair <vishnun@google.com>2021-04-12 18:31:52 -0700
commitcbd40e683ffb9edbe2c59eea9ef804d16fc1f46e (patch)
tree75abc4271faf71c32d4c5cddb6dd0118004aa019 /core/java
parent9ad3b820bef9de56d1e07f9857bddaeaf2df768a (diff)
Only clear SurfaceControl.Transaction when parcelling as a return value
Fix this by have writeToParcel respect PARCELABLE_WRITE_RETURN_VALUE. Fixes: b/185178151 Test: go/wm-smoke Change-Id: Ic146d1bbb9a68be6c4f4fea10c65f81b1b36d760
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/view/SurfaceControl.java22
-rw-r--r--core/java/android/view/ViewRootImpl.java5
2 files changed, 24 insertions, 3 deletions
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index 85a4f2035901..e7b31aa8daf0 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -104,6 +104,7 @@ public final class SurfaceControl implements Parcelable {
private static native void nativeApplyTransaction(long transactionObj, boolean sync);
private static native void nativeMergeTransaction(long transactionObj,
long otherTransactionObj);
+ private static native void nativeClearTransaction(long transactionObj);
private static native void nativeSetAnimationTransaction(long transactionObj);
private static native void nativeSetEarlyWakeupStart(long transactionObj);
private static native void nativeSetEarlyWakeupEnd(long transactionObj);
@@ -2604,6 +2605,19 @@ public final class SurfaceControl implements Parcelable {
}
/**
+ * Clear the transaction object, without applying it.
+ *
+ * @hide
+ */
+ public void clear() {
+ mResizedSurfaces.clear();
+ mReparentedSurfaces.clear();
+ if (mNativeObject != 0) {
+ nativeClearTransaction(mNativeObject);
+ }
+ }
+
+ /**
* Release the native transaction object, without applying it.
*/
@Override
@@ -3428,10 +3442,14 @@ public final class SurfaceControl implements Parcelable {
public void writeToParcel(@NonNull Parcel dest, @WriteFlags int flags) {
if (mNativeObject == 0) {
dest.writeInt(0);
- } else {
- dest.writeInt(1);
+ return;
}
+
+ dest.writeInt(1);
nativeWriteTransactionToParcel(mNativeObject, dest);
+ if ((flags & Parcelable.PARCELABLE_WRITE_RETURN_VALUE) != 0) {
+ nativeClearTransaction(mNativeObject);
+ }
}
private void readFromParcel(Parcel in) {
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index e2cf9624e1a5..b12e464d8dae 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -3901,7 +3901,10 @@ public final class ViewRootImpl implements ViewParent,
mDrawsNeededToReport = 0;
mWindowSession.finishDrawing(mWindow, mSurfaceChangedTransaction);
} catch (RemoteException e) {
- // Have fun!
+ Log.e(mTag, "Unable to report draw finished", e);
+ mSurfaceChangedTransaction.apply();
+ } finally {
+ mSurfaceChangedTransaction.clear();
}
}