Fix NPE in deferToPendingTransaction.

Just because a child window has a surface doesn't necessarily
mean the parent window will have a surface. destroySurfaceLocked()
only takes care of setting mAttachedHidden so the child surface
will be invisible, but it may not be destroyed until a later point.

Bug: 30813094
Change-Id: Idb1b03fd61a7537ebfe33bafc93f278c0e6751f4
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index e374ee9..351961a 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -2066,7 +2066,8 @@
         if (time > mDeferTransactionTime + PENDING_TRANSACTION_FINISH_WAIT_TIME) {
             mDeferTransactionTime = -1;
             mDeferTransactionUntilFrame = -1;
-        } else {
+        } else if (mWin.mAttachedWindow != null &&
+                mWin.mAttachedWindow.mWinAnimator.hasSurface()) {
             mSurfaceController.deferTransactionUntil(
                     mWin.mAttachedWindow.mWinAnimator.mSurfaceController.getHandle(),
                     mDeferTransactionUntilFrame);