diff options
author | Bryce Lee <brycelee@google.com> | 2017-06-23 14:53:02 -0700 |
---|---|---|
committer | Bryce Lee <brycelee@google.com> | 2017-06-23 16:40:56 -0700 |
commit | 7e84086387cba189bb0c20f9ed17784840a2904a (patch) | |
tree | bb164a811e9c24793c4cf70ba37267e0157e1a89 | |
parent | 9b734011910cdddb6455bd35bab1f099ecfab417 (diff) | |
download | base-7e84086387cba189bb0c20f9ed17784840a2904a.tar.gz |
Add ActivityInfo logging.
This changelist adds additional logging around the ActivityInfo used
during startActivity to trace down when the userid changes.
Bug: 38121026
Test: manual
Change-Id: I162f4772845bc2cae585b7e4b027f3cce33439f4
-rw-r--r-- | services/core/java/com/android/server/am/ActivityStarter.java | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index a145435976fa..902353e8a3f1 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.os.UserManager; 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.io.PrintWriter; 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 @@ class ActivityStarter { 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 @@ class ActivityStarter { mUsingVr2dDisplay = false; } + + int startActivityLocked(IApplicationThread caller, Intent intent, Intent ephemeralIntent, String resolvedType, ActivityInfo aInfo, ResolveInfo rInfo, IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, @@ -261,6 +293,8 @@ class ActivityStarter { 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 @@ class ActivityStarter { 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 @@ class ActivityStarter { 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 @@ class ActivityStarter { 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 @@ class ActivityStarter { 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); } |