Merge "Remove temporary logging." into pi-dev

This commit is contained in:
Bryce Lee
2018-04-16 17:36:45 +00:00
committed by Android (Google) Code Review
13 changed files with 11 additions and 209 deletions

View File

@@ -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<IBinder, ActivityClientRecord> mActivities = new ArrayMap<>();
final ArrayList<DestroyedActivityInfo> 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<ProviderKey, ProviderClientRecord> mProviderMap
= new ArrayMap<ProviderKey, ProviderClientRecord>();
@@ -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<Map.Entry<IBinder, ActivityClientRecord>> activitiesIterator =
mActivities.entrySet().iterator();
while (activitiesIterator.hasNext()) {
final ArrayMap.Entry<IBinder, ActivityClientRecord> 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;
}

View File

@@ -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);
}

View File

@@ -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);
}
}

View File

@@ -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 + " ");
}
}
}

View File

@@ -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();
}

View File

@@ -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();

View File

@@ -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();

View File

@@ -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();
}

View File

@@ -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 + " ");
}
}

View File

@@ -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;

View File

@@ -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<StateTransition> 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);

View File

@@ -1487,8 +1487,7 @@ class ActivityStack<T extends StackWindowController> 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<T extends StackWindowController> 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<T extends StackWindowController> 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<T extends StackWindowController> 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

View File

@@ -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);