From 6df10854a418179a907dc971ffd8587d9bbed2bf Mon Sep 17 00:00:00 2001 From: Chris Li Date: Sun, 4 Feb 2024 17:29:18 +0800 Subject: Add debug log for executeTransaction error. Bug: 322171786 Bug: 260873529 Test: pass existing tests Change-Id: I3f85bb2b92f218b62a951b84565edaf4afd19d33 --- .../app/servertransaction/ClientTransaction.java | 27 ++++++++++++++++++++++ .../app/servertransaction/TransactionExecutor.java | 4 ++++ .../android/server/wm/ClientLifecycleManager.java | 6 ++++- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/core/java/android/app/servertransaction/ClientTransaction.java b/core/java/android/app/servertransaction/ClientTransaction.java index 5e5526802fe9..6357a20f592b 100644 --- a/core/java/android/app/servertransaction/ClientTransaction.java +++ b/core/java/android/app/servertransaction/ClientTransaction.java @@ -298,6 +298,33 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem { return result; } + @Override + public String toString() { + final StringBuilder sb = new StringBuilder(); + sb.append("ClientTransaction{"); + if (mTransactionItems != null) { + // #addTransactionItem + sb.append("\n transactionItems=["); + final int size = mTransactionItems.size(); + for (int i = 0; i < size; i++) { + sb.append("\n ").append(mTransactionItems.get(i)); + } + sb.append("\n ]"); + } else { + // #addCallback + sb.append("\n callbacks=["); + final int size = mActivityCallbacks != null ? mActivityCallbacks.size() : 0; + for (int i = 0; i < size; i++) { + sb.append("\n ").append(mActivityCallbacks.get(i)); + } + sb.append("\n ]"); + // #setLifecycleStateRequest + sb.append("\n stateRequest=").append(mLifecycleStateRequest); + } + sb.append("\n}"); + return sb.toString(); + } + /** Dump transaction items callback items and final lifecycle state request. */ void dump(@NonNull String prefix, @NonNull PrintWriter pw, @NonNull ClientTransactionHandler transactionHandler) { diff --git a/core/java/android/app/servertransaction/TransactionExecutor.java b/core/java/android/app/servertransaction/TransactionExecutor.java index ba940770898a..406e00a84710 100644 --- a/core/java/android/app/servertransaction/TransactionExecutor.java +++ b/core/java/android/app/servertransaction/TransactionExecutor.java @@ -97,6 +97,10 @@ public class TransactionExecutor { executeCallbacks(transaction); executeLifecycleState(transaction); } + } catch (Exception e) { + Slog.e(TAG, "Failed to execute the transaction: " + + transactionToString(transaction, mTransactionHandler)); + throw e; } finally { Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); } diff --git a/services/core/java/com/android/server/wm/ClientLifecycleManager.java b/services/core/java/com/android/server/wm/ClientLifecycleManager.java index c7df83a9ccf9..e84026cf4155 100644 --- a/services/core/java/com/android/server/wm/ClientLifecycleManager.java +++ b/services/core/java/com/android/server/wm/ClientLifecycleManager.java @@ -64,6 +64,10 @@ class ClientLifecycleManager { final IApplicationThread client = transaction.getClient(); try { transaction.schedule(); + } catch (RemoteException e) { + Slog.w(TAG, "Failed to deliver transaction for " + client + + "\ntransaction=" + transaction); + throw e; } finally { if (!(client instanceof Binder)) { // If client is not an instance of Binder - it's a remote call and at this point it @@ -157,7 +161,7 @@ class ClientLifecycleManager { try { scheduleTransaction(transaction); } catch (RemoteException e) { - Slog.e(TAG, "Failed to deliver transaction for " + transaction.getClient()); + Slog.e(TAG, "Failed to deliver pending transaction", e); } } mPendingTransactions.clear(); -- cgit v1.2.3-59-g8ed1b