Merge "Add ActivityInfo logging." into oc-dev
am: 4b6219dab3
Change-Id: I6b4ac6518fab138ffa3b218e9471149018fb1f34
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java
index a145435..902353e 100644
--- a/services/core/java/com/android/server/am/ActivityStarter.java
+++ b/services/core/java/com/android/server/am/ActivityStarter.java
@@ -117,6 +117,7 @@
import android.service.voice.IVoiceInteractionSession;
import android.text.TextUtils;
import android.util.EventLog;
+import android.util.Printer;
import android.util.Slog;
import com.android.internal.app.HeavyWeightSwitcherActivity;
@@ -129,6 +130,7 @@
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
+import java.util.List;
/**
* Controller for interpreting how and then launching activities.
@@ -246,6 +248,34 @@
mUsingVr2dDisplay = false;
}
+ // TODO(b/38121026): Remove once issue has been resolved.
+ private class ActivityInfoAssignment {
+ final ActivityInfo info;
+ final String description;
+ final long timestamp;
+
+ public ActivityInfoAssignment(ActivityInfo info, String description) {
+ timestamp = System.currentTimeMillis();
+ this.info = info;
+ this.description = description;
+ }
+
+ void dump(PrintWriter pw, String prefix) {
+ pw.println(prefix + " " + timestamp + ":" + description + ":" + describeInfo());
+ }
+
+ private String describeInfo() {
+ return "ActivityInfo[obj:" + info + " userId:"
+ + (info != null ? UserHandle.getUserId(info.applicationInfo.uid) : 0) + "]";
+ }
+ }
+
+ private List<ActivityInfoAssignment> mLastStartActivityInfoAssignments = new ArrayList<>();
+
+ private void addActivityInfoAssignment(ActivityInfo info, String description) {
+ mLastStartActivityInfoAssignments.add(new ActivityInfoAssignment(info, description));
+ }
+
ActivityStarter(ActivityManagerService service, ActivityStackSupervisor supervisor) {
mService = service;
mSupervisor = supervisor;
@@ -253,6 +283,8 @@
mUsingVr2dDisplay = false;
}
+
+
int startActivityLocked(IApplicationThread caller, Intent intent, Intent ephemeralIntent,
String resolvedType, ActivityInfo aInfo, ResolveInfo rInfo,
IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,
@@ -261,6 +293,8 @@
ActivityOptions options, boolean ignoreTargetSecurity, boolean componentSpecified,
ActivityRecord[] outActivity, ActivityStackSupervisor.ActivityContainer container,
TaskRecord inTask, String reason) {
+ mLastStartActivityInfoAssignments.clear();
+ addActivityInfoAssignment(aInfo, "startActivityLocked::initial");
if (TextUtils.isEmpty(reason)) {
throw new IllegalArgumentException("Need to specify a reason.");
@@ -452,6 +486,7 @@
intent = mInterceptor.mIntent;
rInfo = mInterceptor.mRInfo;
aInfo = mInterceptor.mAInfo;
+ addActivityInfoAssignment(aInfo, "startActivity::mInterceptor.mAInfo");
resolvedType = mInterceptor.mResolvedType;
inTask = mInterceptor.mInTask;
callingPid = mInterceptor.mCallingPid;
@@ -498,6 +533,7 @@
rInfo = mSupervisor.resolveIntent(intent, resolvedType, userId);
aInfo = mSupervisor.resolveActivity(intent, rInfo, startFlags,
null /*profilerInfo*/);
+ addActivityInfoAssignment(aInfo, "startActivity::isPermissionReviewRequired");
if (DEBUG_PERMISSIONS_REVIEW) {
Slog.i(TAG, "START u" + userId + " {" + intent.toShortString(true, true,
@@ -522,12 +558,14 @@
callingPid = realCallingPid;
aInfo = mSupervisor.resolveActivity(intent, rInfo, startFlags, null /*profilerInfo*/);
+ addActivityInfoAssignment(aInfo, "startActivity::auxiliaryInfo != null");
}
ActivityRecord r = new ActivityRecord(mService, callerApp, callingPid, callingUid,
callingPackage, intent, resolvedType, aInfo, mService.getGlobalConfiguration(),
resultRecord, resultWho, requestCode, componentSpecified, voiceSession != null,
mSupervisor, container, options, sourceRecord);
+ addActivityInfoAssignment(aInfo, "startActivity:: value used to create new activity");
if (outActivity != null) {
outActivity[0] = r;
}
@@ -2328,6 +2366,16 @@
pw.println(prefix + "mStartActivity:");
mStartActivity.dump(pw, prefix + " ");
}
+
+ if (!mLastStartActivityInfoAssignments.isEmpty()) {
+ pw.println(prefix + "mLastStartActivityInfoAssignments:");
+ for (ActivityInfoAssignment assignment : mLastStartActivityInfoAssignments) {
+ assignment.dump(pw, prefix);
+ /*pw.println(prefix + prefix + assignment.description + "@" + p
+ + ":" + assignment.info);*/
+ }
+ }
+
if (mIntent != null) {
pw.println(prefix + "mIntent=" + mIntent);
}