From 1d0d514dac43857f4475648a331eeccd481aa4db Mon Sep 17 00:00:00 2001 From: Bryce Lee Date: Thu, 12 Apr 2018 10:35:07 -0700 Subject: [PATCH] Remove temporary logging. This changelist reverts the following CLs that added temporary logging: d946f86f124fca87c757100e49ba7d5b206c8a44 a33c13df134ee3618c72e70a69433a27b934702f e7b2f6920bcb4a989da4798a72fcc61d0572dd60 Fixes: 71506345 Test: presubmit Change-Id: Icfc016a752e5ac2bfb1537be67cda1c4ea3e6442 --- core/java/android/app/ActivityThread.java | 58 ------------------- .../android/app/ClientTransactionHandler.java | 8 --- .../ActivityLifecycleItem.java | 40 +------------ .../servertransaction/ClientTransaction.java | 9 --- .../DestroyActivityItem.java | 4 +- .../servertransaction/PauseActivityItem.java | 2 - .../servertransaction/ResumeActivityItem.java | 2 - .../servertransaction/StopActivityItem.java | 2 - .../TransactionExecutor.java | 20 ------- .../server/am/ActivityManagerDebugConfig.java | 2 +- .../com/android/server/am/ActivityRecord.java | 53 +---------------- .../com/android/server/am/ActivityStack.java | 14 ++--- .../server/am/ActivityStackSupervisor.java | 6 +- 13 files changed, 11 insertions(+), 209 deletions(-) diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 82c3383dc16a3..eba74716b1a9b 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -173,7 +173,6 @@ import java.net.InetAddress; import java.text.DateFormat; import java.util.ArrayList; import java.util.Arrays; -import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; @@ -223,9 +222,6 @@ public final class ActivityThread extends ClientTransactionHandler { // Whether to invoke an activity callback after delivering new configuration. private static final boolean REPORT_TO_ACTIVITY = true; - // Maximum number of recent tokens to maintain for debugging purposes - private static final int MAX_DESTROYED_ACTIVITIES = 10; - /** * Denotes an invalid sequence number corresponding to a process state change. */ @@ -258,8 +254,6 @@ public final class ActivityThread extends ClientTransactionHandler { final H mH = new H(); final Executor mExecutor = new HandlerExecutor(mH); final ArrayMap mActivities = new ArrayMap<>(); - final ArrayList mRecentDestroyedActivities = new ArrayList<>(); - // List of new activities (via ActivityRecord.nextIdle) that should // be reported when next we idle. ActivityClientRecord mNewActivities = null; @@ -341,26 +335,6 @@ public final class ActivityThread extends ClientTransactionHandler { } } - /** - * TODO(b/71506345): Remove this once bug is resolved. - */ - private static final class DestroyedActivityInfo { - private final Integer mToken; - private final String mReason; - private final long mTime; - - DestroyedActivityInfo(Integer token, String reason) { - mToken = token; - mReason = reason; - mTime = System.currentTimeMillis(); - } - - void dump(PrintWriter pw, String prefix) { - pw.println(prefix + "[token:" + mToken + " | time:" + mTime + " | reason:" + mReason - + "]"); - } - } - // The lock of mProviderMap protects the following variables. final ArrayMap mProviderMap = new ArrayMap(); @@ -2195,32 +2169,6 @@ public final class ActivityThread extends ClientTransactionHandler { pw.println(String.format(format, objs)); } - @Override - public void dump(PrintWriter pw, String prefix) { - pw.println(prefix + "Activities:"); - - if (!mActivities.isEmpty()) { - final Iterator> activitiesIterator = - mActivities.entrySet().iterator(); - - while (activitiesIterator.hasNext()) { - final ArrayMap.Entry entry = - activitiesIterator.next(); - pw.println(prefix + " [token:" + entry.getKey().hashCode() + " record:" - + entry.getValue().toString() + "]"); - } - } - - if (!mRecentDestroyedActivities.isEmpty()) { - pw.println(prefix + "Recent destroyed activities:"); - for (int i = 0, size = mRecentDestroyedActivities.size(); i < size; i++) { - final DestroyedActivityInfo info = mRecentDestroyedActivities.get(i); - pw.print(prefix); - info.dump(pw, " "); - } - } - } - public static void dumpMemInfoTable(PrintWriter pw, Debug.MemoryInfo memInfo, boolean checkin, boolean dumpFullInfo, boolean dumpDalvik, boolean dumpSummaryOnly, int pid, String processName, @@ -4473,12 +4421,6 @@ public final class ActivityThread extends ClientTransactionHandler { r.setState(ON_DESTROY); } mActivities.remove(token); - mRecentDestroyedActivities.add(0, new DestroyedActivityInfo(token.hashCode(), reason)); - - final int recentDestroyedActivitiesSize = mRecentDestroyedActivities.size(); - if (recentDestroyedActivitiesSize > MAX_DESTROYED_ACTIVITIES) { - mRecentDestroyedActivities.remove(recentDestroyedActivitiesSize - 1); - } StrictMode.decrementExpectedActivityCount(activityClass); return r; } diff --git a/core/java/android/app/ClientTransactionHandler.java b/core/java/android/app/ClientTransactionHandler.java index 0639b00045c4e..e26d989f09efb 100644 --- a/core/java/android/app/ClientTransactionHandler.java +++ b/core/java/android/app/ClientTransactionHandler.java @@ -27,7 +27,6 @@ import android.util.MergedConfiguration; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.content.ReferrerIntent; -import java.io.PrintWriter; import java.util.List; /** @@ -192,11 +191,4 @@ public abstract class ClientTransactionHandler { * Used to check if we should report relaunch to WM. * */ public abstract void reportRelaunch(IBinder token, PendingTransactionActions pendingActions); - - /** - * Debugging output. - * @param pw {@link PrintWriter} to write logs to. - * @param prefix Prefix to prepend to output. - */ - public abstract void dump(PrintWriter pw, String prefix); } diff --git a/core/java/android/app/servertransaction/ActivityLifecycleItem.java b/core/java/android/app/servertransaction/ActivityLifecycleItem.java index 7f8c50cd4ce5d..c9193a9578e70 100644 --- a/core/java/android/app/servertransaction/ActivityLifecycleItem.java +++ b/core/java/android/app/servertransaction/ActivityLifecycleItem.java @@ -17,9 +17,7 @@ package android.app.servertransaction; import android.annotation.IntDef; -import android.os.Parcel; -import java.io.PrintWriter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -28,7 +26,6 @@ import java.lang.annotation.RetentionPolicy; * @hide */ public abstract class ActivityLifecycleItem extends ClientTransactionItem { - private String mDescription; @IntDef(prefix = { "UNDEFINED", "PRE_", "ON_" }, value = { UNDEFINED, @@ -57,43 +54,8 @@ public abstract class ActivityLifecycleItem extends ClientTransactionItem { @LifecycleState public abstract int getTargetState(); - - protected ActivityLifecycleItem() { - } - - protected ActivityLifecycleItem(Parcel in) { - mDescription = in.readString(); - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeString(mDescription); - } - - /** - * Sets a description that can be retrieved later for debugging purposes. - * @param description Description to set. - * @return The {@link ActivityLifecycleItem}. - */ - public ActivityLifecycleItem setDescription(String description) { - mDescription = description; - return this; - } - - /** - * Retrieves description if set through {@link #setDescription(String)}. - */ - public String getDescription() { - return mDescription; - } - - void dump(PrintWriter pw, String prefix) { - pw.println(prefix + "target state:" + getTargetState()); - pw.println(prefix + "description: " + mDescription); - } - + /** Called by subclasses to make sure base implementation is cleaned up */ @Override public void recycle() { - setDescription(null); } } diff --git a/core/java/android/app/servertransaction/ClientTransaction.java b/core/java/android/app/servertransaction/ClientTransaction.java index fc078798f6b97..08ad2f0557746 100644 --- a/core/java/android/app/servertransaction/ClientTransaction.java +++ b/core/java/android/app/servertransaction/ClientTransaction.java @@ -26,7 +26,6 @@ import android.os.RemoteException; import com.android.internal.annotations.VisibleForTesting; -import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -238,12 +237,4 @@ public class ClientTransaction implements Parcelable, ObjectPoolItem { result = 31 * result + Objects.hashCode(mLifecycleStateRequest); return result; } - - void dump(PrintWriter pw, String prefix) { - pw.println(prefix + "mActivityToken:" + mActivityToken.hashCode()); - pw.println(prefix + "mLifecycleStateRequest:"); - if (mLifecycleStateRequest != null) { - mLifecycleStateRequest.dump(pw, prefix + " "); - } - } } diff --git a/core/java/android/app/servertransaction/DestroyActivityItem.java b/core/java/android/app/servertransaction/DestroyActivityItem.java index 0edcf1884f013..b443166d151cc 100644 --- a/core/java/android/app/servertransaction/DestroyActivityItem.java +++ b/core/java/android/app/servertransaction/DestroyActivityItem.java @@ -37,7 +37,7 @@ public class DestroyActivityItem extends ActivityLifecycleItem { PendingTransactionActions pendingActions) { Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "activityDestroy"); client.handleDestroyActivity(token, mFinished, mConfigChanges, - false /* getNonConfigInstance */, getDescription()); + false /* getNonConfigInstance */, "DestroyActivityItem"); Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER); } @@ -77,14 +77,12 @@ public class DestroyActivityItem extends ActivityLifecycleItem { /** Write to Parcel. */ @Override public void writeToParcel(Parcel dest, int flags) { - super.writeToParcel(dest, flags); dest.writeBoolean(mFinished); dest.writeInt(mConfigChanges); } /** Read from Parcel. */ private DestroyActivityItem(Parcel in) { - super(in); mFinished = in.readBoolean(); mConfigChanges = in.readInt(); } diff --git a/core/java/android/app/servertransaction/PauseActivityItem.java b/core/java/android/app/servertransaction/PauseActivityItem.java index 65e429126ac22..0c1eab56ec309 100644 --- a/core/java/android/app/servertransaction/PauseActivityItem.java +++ b/core/java/android/app/servertransaction/PauseActivityItem.java @@ -115,7 +115,6 @@ public class PauseActivityItem extends ActivityLifecycleItem { /** Write to Parcel. */ @Override public void writeToParcel(Parcel dest, int flags) { - super.writeToParcel(dest, flags); dest.writeBoolean(mFinished); dest.writeBoolean(mUserLeaving); dest.writeInt(mConfigChanges); @@ -124,7 +123,6 @@ public class PauseActivityItem extends ActivityLifecycleItem { /** Read from Parcel. */ private PauseActivityItem(Parcel in) { - super(in); mFinished = in.readBoolean(); mUserLeaving = in.readBoolean(); mConfigChanges = in.readInt(); diff --git a/core/java/android/app/servertransaction/ResumeActivityItem.java b/core/java/android/app/servertransaction/ResumeActivityItem.java index d16bc97cbc875..909eec751d657 100644 --- a/core/java/android/app/servertransaction/ResumeActivityItem.java +++ b/core/java/android/app/servertransaction/ResumeActivityItem.java @@ -115,7 +115,6 @@ public class ResumeActivityItem extends ActivityLifecycleItem { /** Write to Parcel. */ @Override public void writeToParcel(Parcel dest, int flags) { - super.writeToParcel(dest, flags); dest.writeInt(mProcState); dest.writeBoolean(mUpdateProcState); dest.writeBoolean(mIsForward); @@ -123,7 +122,6 @@ public class ResumeActivityItem extends ActivityLifecycleItem { /** Read from Parcel. */ private ResumeActivityItem(Parcel in) { - super(in); mProcState = in.readInt(); mUpdateProcState = in.readBoolean(); mIsForward = in.readBoolean(); diff --git a/core/java/android/app/servertransaction/StopActivityItem.java b/core/java/android/app/servertransaction/StopActivityItem.java index 8db38d36c57ea..87db2062a63d1 100644 --- a/core/java/android/app/servertransaction/StopActivityItem.java +++ b/core/java/android/app/servertransaction/StopActivityItem.java @@ -85,14 +85,12 @@ public class StopActivityItem extends ActivityLifecycleItem { /** Write to Parcel. */ @Override public void writeToParcel(Parcel dest, int flags) { - super.writeToParcel(dest, flags); dest.writeBoolean(mShowWindow); dest.writeInt(mConfigChanges); } /** Read from Parcel. */ private StopActivityItem(Parcel in) { - super(in); mShowWindow = in.readBoolean(); mConfigChanges = in.readInt(); } diff --git a/core/java/android/app/servertransaction/TransactionExecutor.java b/core/java/android/app/servertransaction/TransactionExecutor.java index 553c3ae15387a..5c803a5c95991 100644 --- a/core/java/android/app/servertransaction/TransactionExecutor.java +++ b/core/java/android/app/servertransaction/TransactionExecutor.java @@ -34,8 +34,6 @@ import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; -import java.io.PrintWriter; -import java.io.StringWriter; import java.util.List; /** @@ -135,20 +133,7 @@ public class TransactionExecutor { final IBinder token = transaction.getActivityToken(); final ActivityClientRecord r = mTransactionHandler.getActivityClient(token); - // TODO(b/71506345): Remove once root cause is found. if (r == null) { - final StringWriter stringWriter = new StringWriter(); - final PrintWriter pw = new PrintWriter(stringWriter); - final String prefix = " "; - - pw.println("Lifecycle transaction does not have valid ActivityClientRecord."); - pw.println("Transaction:"); - transaction.dump(pw, prefix); - pw.println("Executor:"); - dump(pw, prefix); - - Slog.w(TAG, stringWriter.toString()); - // Ignore requests for non-existent client records for now. return; } @@ -224,9 +209,4 @@ public class TransactionExecutor { private static void log(String message) { if (DEBUG_RESOLVER) Slog.d(TAG, message); } - - private void dump(PrintWriter pw, String prefix) { - pw.println(prefix + "mTransactionHandler:"); - mTransactionHandler.dump(pw, prefix + " "); - } } diff --git a/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java b/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java index 4901192adbcaf..0a7d3fdb59730 100644 --- a/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java +++ b/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java @@ -81,7 +81,7 @@ class ActivityManagerDebugConfig { static final boolean DEBUG_FOREGROUND_SERVICE = DEBUG_ALL || false; static final boolean DEBUG_SERVICE_EXECUTING = DEBUG_ALL || false; static final boolean DEBUG_STACK = DEBUG_ALL || false; - static final boolean DEBUG_STATES = DEBUG_ALL_ACTIVITIES || true; + static final boolean DEBUG_STATES = DEBUG_ALL_ACTIVITIES || false; static final boolean DEBUG_SWITCH = DEBUG_ALL || false; static final boolean DEBUG_TASKS = DEBUG_ALL || false; static final boolean DEBUG_TRANSITION = DEBUG_ALL || false; diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index f32717a3bea96..16c5969a91678 100644 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -229,8 +229,6 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo private static final String ATTR_COMPONENTSPECIFIED = "component_specified"; static final String ACTIVITY_ICON_SUFFIX = "_activity_icon_"; - private static final int MAX_STORED_STATE_TRANSITIONS = 5; - final ActivityManagerService service; // owner final IApplicationToken.Stub appToken; // window manager token AppWindowContainerController mWindowContainerController; @@ -368,28 +366,6 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo private final Configuration mTmpConfig = new Configuration(); private final Rect mTmpBounds = new Rect(); - private final ArrayList mRecentTransitions = new ArrayList<>(); - - // TODO(b/71506345): Remove once issue has been resolved. - private static class StateTransition { - final long time; - final ActivityState prev; - final ActivityState state; - final String reason; - - StateTransition(ActivityState prev, ActivityState state, String reason) { - time = System.currentTimeMillis(); - this.prev = prev; - this.state = state; - this.reason = reason; - } - - @Override - public String toString() { - return "[" + prev + "->" + state + ":" + reason + "@" + time + "]"; - } - } - private static String startingWindowStateToString(int state) { switch (state) { case STARTING_WINDOW_NOT_SHOWN: @@ -403,21 +379,6 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo } } - String getLifecycleDescription(String reason) { - StringBuilder transitionBuilder = new StringBuilder(); - - for (int i = 0, size = mRecentTransitions.size(); i < size; ++i) { - transitionBuilder.append(mRecentTransitions.get(i)); - if (i + 1 < size) { - transitionBuilder.append(","); - } - } - - return "name= " + this + ", component=" + intent.getComponent().flattenToShortString() - + ", package=" + packageName + ", state=" + mState + ", reason=" + reason - + ", time=" + System.currentTimeMillis() + " transitions=" + transitionBuilder; - } - void dump(PrintWriter pw, String prefix) { final long now = SystemClock.uptimeMillis(); pw.print(prefix); pw.print("packageName="); pw.print(packageName); @@ -1658,15 +1619,8 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo return; } - final ActivityState prev = mState; mState = state; - if (mRecentTransitions.size() == MAX_STORED_STATE_TRANSITIONS) { - mRecentTransitions.remove(0); - } - - mRecentTransitions.add(new StateTransition(prev, state, reason)); - final TaskRecord parent = getTask(); if (parent != null) { @@ -1770,15 +1724,13 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo if (isState(STOPPED, STOPPING) && stack.mTranslucentActivityWaiting == null && mStackSupervisor.getResumedActivityLocked() != this) { // Capture reason before state change - final String reason = getLifecycleDescription("makeVisibleIfNeeded"); // An activity must be in the {@link PAUSING} state for the system to validate // the move to {@link PAUSED}. setState(PAUSING, "makeVisibleIfNeeded"); service.getLifecycleManager().scheduleTransaction(app.thread, appToken, PauseActivityItem.obtain(finishing, false /* userLeaving */, - configChangeFlags, false /* dontReport */) - .setDescription(reason)); + configChangeFlags, false /* dontReport */)); } } catch (Exception e) { // Just skip on any failure; we'll make it visible when it next restarts. @@ -2737,8 +2689,7 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo if (andResume) { lifecycleItem = ResumeActivityItem.obtain(service.isNextTransitionForward()); } else { - lifecycleItem = PauseActivityItem.obtain() - .setDescription(getLifecycleDescription("relaunchActivityLocked")); + lifecycleItem = PauseActivityItem.obtain(); } final ClientTransaction transaction = ClientTransaction.obtain(app.thread, appToken); transaction.addCallback(callbackItem); diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index eb482c1b14e27..e54e6453b698a 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -1487,8 +1487,7 @@ class ActivityStack extends ConfigurationContai mService.getLifecycleManager().scheduleTransaction(prev.app.thread, prev.appToken, PauseActivityItem.obtain(prev.finishing, userLeaving, - prev.configChangeFlags, pauseImmediately).setDescription( - prev.getLifecycleDescription("startPausingLocked"))); + prev.configChangeFlags, pauseImmediately)); } catch (Exception e) { // Ignore exception, if process died other code will cleanup. Slog.w(TAG, "Exception thrown during pause", e); @@ -2694,9 +2693,7 @@ class ActivityStack extends ConfigurationContai next.clearOptionsLocked(); transaction.setLifecycleStateRequest( ResumeActivityItem.obtain(next.app.repProcState, - mService.isNextTransitionForward()) - .setDescription(next.getLifecycleDescription( - "resumeTopActivityInnerLocked"))); + mService.isNextTransitionForward())); mService.getLifecycleManager().scheduleTransaction(transaction); if (DEBUG_STATES) Slog.d(TAG_STATES, "resumeTopActivityLocked: Resumed " @@ -3480,8 +3477,7 @@ class ActivityStack extends ConfigurationContai EventLogTags.writeAmStopActivity( r.userId, System.identityHashCode(r), r.shortComponentName); mService.getLifecycleManager().scheduleTransaction(r.app.thread, r.appToken, - StopActivityItem.obtain(r.visible, r.configChangeFlags) - .setDescription(r.getLifecycleDescription("stopActivityLocked"))); + StopActivityItem.obtain(r.visible, r.configChangeFlags)); if (shouldSleepOrShutDownActivities()) { r.setSleeping(true); } @@ -4308,9 +4304,7 @@ class ActivityStack extends ConfigurationContai try { if (DEBUG_SWITCH) Slog.i(TAG_SWITCH, "Destroying: " + r); mService.getLifecycleManager().scheduleTransaction(r.app.thread, r.appToken, - DestroyActivityItem.obtain(r.finishing, r.configChangeFlags) - .setDescription( - r.getLifecycleDescription("destroyActivityLocked:" + reason))); + DestroyActivityItem.obtain(r.finishing, r.configChangeFlags)); } catch (Exception e) { // We can just ignore exceptions here... if the process // has crashed, our death notification will clean things diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index cbf30bdd0cbb4..0fb841ea37387 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -1466,11 +1466,9 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D // Set desired final state. final ActivityLifecycleItem lifecycleItem; if (andResume) { - lifecycleItem = ResumeActivityItem.obtain(mService.isNextTransitionForward()) - .setDescription(r.getLifecycleDescription("realStartActivityLocked")); + lifecycleItem = ResumeActivityItem.obtain(mService.isNextTransitionForward()); } else { - lifecycleItem = PauseActivityItem.obtain() - .setDescription(r.getLifecycleDescription("realStartActivityLocked")); + lifecycleItem = PauseActivityItem.obtain(); } clientTransaction.setLifecycleStateRequest(lifecycleItem);