summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chris Li <lihongyu@google.com> 2024-02-04 17:29:18 +0800
committer Chris Li <lihongyu@google.com> 2024-02-05 13:58:23 +0800
commit6df10854a418179a907dc971ffd8587d9bbed2bf (patch)
tree379c7484b460f2950a45905a58c9b53b83b58b49
parente27fe8371be9252633405a62d09710bd13ac1ca0 (diff)
Add debug log for executeTransaction error.
Bug: 322171786 Bug: 260873529 Test: pass existing tests Change-Id: I3f85bb2b92f218b62a951b84565edaf4afd19d33
-rw-r--r--core/java/android/app/servertransaction/ClientTransaction.java27
-rw-r--r--core/java/android/app/servertransaction/TransactionExecutor.java4
-rw-r--r--services/core/java/com/android/server/wm/ClientLifecycleManager.java6
3 files changed, 36 insertions, 1 deletions
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();