Merge "Added dumsys activity starter" into oc-dev

This commit is contained in:
TreeHugger Robot
2017-06-20 23:18:05 +00:00
committed by Android (Google) Code Review
6 changed files with 138 additions and 40 deletions

View File

@@ -4136,7 +4136,8 @@ public class ActivityManagerService extends IActivityManager.Stub
ri.activityInfo.packageName, ri.activityInfo.name));
mActivityStarter.startActivityLocked(null, intent, null /*ephemeralIntent*/,
null, ri.activityInfo, null /*rInfo*/, null, null, null, null, 0, 0, 0,
null, 0, 0, 0, null, false, false, null, null, null);
null, 0, 0, 0, null, false, false, null, null, null,
"startSetupActivity");
}
}
}
@@ -4475,8 +4476,9 @@ public class ActivityManagerService extends IActivityManager.Stub
container.checkEmbeddedAllowedInner(userId, intent, mimeType);
intent.addFlags(FORCE_NEW_TASK_FLAGS);
return mActivityStarter.startActivityMayWait(null, -1, null, intent, mimeType, null, null, null,
null, 0, 0, null, null, null, null, false, userId, container, null);
return mActivityStarter.startActivityMayWait(null, -1, null, intent, mimeType, null, null,
null, null, 0, 0, null, null, null, null, false, userId, container, null,
"startActivity");
}
@Override
@@ -4489,7 +4491,8 @@ public class ActivityManagerService extends IActivityManager.Stub
// TODO: Switch to user app stacks here.
return mActivityStarter.startActivityMayWait(caller, -1, callingPackage, intent,
resolvedType, null, null, resultTo, resultWho, requestCode, startFlags,
profilerInfo, null, null, bOptions, false, userId, null, null);
profilerInfo, null, null, bOptions, false, userId, null, null,
"startActivityAsUser");
}
@Override
@@ -4552,7 +4555,8 @@ public class ActivityManagerService extends IActivityManager.Stub
try {
int ret = mActivityStarter.startActivityMayWait(null, targetUid, targetPackage, intent,
resolvedType, null, null, resultTo, resultWho, requestCode, startFlags, null,
null, null, bOptions, ignoreTargetSecurity, userId, null, null);
null, null, bOptions, ignoreTargetSecurity, userId, null, null,
"startActivityAsCaller");
return ret;
} catch (SecurityException e) {
// XXX need to figure out how to propagate to original app.
@@ -4581,7 +4585,7 @@ public class ActivityManagerService extends IActivityManager.Stub
// TODO: Switch to user app stacks here.
mActivityStarter.startActivityMayWait(caller, -1, callingPackage, intent, resolvedType,
null, null, resultTo, resultWho, requestCode, startFlags, profilerInfo, res, null,
bOptions, false, userId, null, null);
bOptions, false, userId, null, null, "startActivityAndWait");
return res;
}
@@ -4595,7 +4599,7 @@ public class ActivityManagerService extends IActivityManager.Stub
// TODO: Switch to user app stacks here.
int ret = mActivityStarter.startActivityMayWait(caller, -1, callingPackage, intent,
resolvedType, null, null, resultTo, resultWho, requestCode, startFlags,
null, null, config, bOptions, false, userId, null, null);
null, null, config, bOptions, false, userId, null, null, "startActivityWithConfig");
return ret;
}
@@ -4652,7 +4656,7 @@ public class ActivityManagerService extends IActivityManager.Stub
// TODO: Switch to user app stacks here.
return mActivityStarter.startActivityMayWait(null, callingUid, callingPackage, intent,
resolvedType, session, interactor, null, null, 0, startFlags, profilerInfo, null,
null, bOptions, false, userId, null, null);
null, bOptions, false, userId, null, null, "startVoiceActivity");
}
@Override
@@ -4671,7 +4675,7 @@ public class ActivityManagerService extends IActivityManager.Stub
ALLOW_FULL_ONLY, "startAssistantActivity", null);
return mActivityStarter.startActivityMayWait(null, callingUid, callingPackage, intent,
resolvedType, null, null, null, null, 0, 0, null, null, null, bOptions, false,
userId, null, null);
userId, null, null, "startAssistantActivity");
}
@Override
@@ -4844,7 +4848,7 @@ public class ActivityManagerService extends IActivityManager.Stub
null /*ephemeralIntent*/, r.resolvedType, aInfo, null /*rInfo*/, null,
null, resultTo != null ? resultTo.appToken : null, resultWho, requestCode, -1,
r.launchedFromUid, r.launchedFromPackage, -1, r.launchedFromUid, 0, options,
false, false, null, null, null);
false, false, null, null, null, "startNextMatchingActivity");
Binder.restoreCallingIdentity(origId);
r.finishing = wasFinishing;
@@ -4876,7 +4880,7 @@ public class ActivityManagerService extends IActivityManager.Stub
final int startActivityInPackage(int uid, String callingPackage,
Intent intent, String resolvedType, IBinder resultTo,
String resultWho, int requestCode, int startFlags, Bundle bOptions, int userId,
IActivityContainer container, TaskRecord inTask) {
IActivityContainer container, TaskRecord inTask, String reason) {
userId = mUserController.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(),
userId, false, ALLOW_FULL_ONLY, "startActivityInPackage", null);
@@ -4884,7 +4888,7 @@ public class ActivityManagerService extends IActivityManager.Stub
// TODO: Switch to user app stacks here.
int ret = mActivityStarter.startActivityMayWait(null, uid, callingPackage, intent,
resolvedType, null, null, resultTo, resultWho, requestCode, startFlags,
null, null, null, bOptions, false, userId, container, inTask);
null, null, null, bOptions, false, userId, container, inTask, reason);
return ret;
}
@@ -4892,12 +4896,13 @@ public class ActivityManagerService extends IActivityManager.Stub
public final int startActivities(IApplicationThread caller, String callingPackage,
Intent[] intents, String[] resolvedTypes, IBinder resultTo, Bundle bOptions,
int userId) {
enforceNotIsolatedCaller("startActivities");
final String reason = "startActivities";
enforceNotIsolatedCaller(reason);
userId = mUserController.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(),
userId, false, ALLOW_FULL_ONLY, "startActivity", null);
userId, false, ALLOW_FULL_ONLY, reason, null);
// TODO: Switch to user app stacks here.
int ret = mActivityStarter.startActivities(caller, -1, callingPackage, intents,
resolvedTypes, resultTo, bOptions, userId);
resolvedTypes, resultTo, bOptions, userId, reason);
return ret;
}
@@ -4905,11 +4910,12 @@ public class ActivityManagerService extends IActivityManager.Stub
Intent[] intents, String[] resolvedTypes, IBinder resultTo,
Bundle bOptions, int userId) {
final String reason = "startActivityInPackage";
userId = mUserController.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(),
userId, false, ALLOW_FULL_ONLY, "startActivityInPackage", null);
userId, false, ALLOW_FULL_ONLY, reason, null);
// TODO: Switch to user app stacks here.
int ret = mActivityStarter.startActivities(null, uid, callingPackage, intents, resolvedTypes,
resultTo, bOptions, userId);
resultTo, bOptions, userId, reason);
return ret;
}
@@ -14941,6 +14947,10 @@ public class ActivityManagerService extends IActivityManager.Stub
synchronized (this) {
dumpLastANRLocked(pw);
}
} else if ("starter".equals(cmd)) {
synchronized (this) {
dumpActivityStarterLocked(pw);
}
} else if ("recents".equals(cmd) || "r".equals(cmd)) {
synchronized (this) {
dumpRecentsLocked(fd, pw, args, opti, true, dumpPackage);
@@ -15174,6 +15184,11 @@ public class ActivityManagerService extends IActivityManager.Stub
if (dumpAll) {
pw.println("-------------------------------------------------------------------------------");
}
dumpActivityStarterLocked(pw);
pw.println();
if (dumpAll) {
pw.println("-------------------------------------------------------------------------------");
}
dumpActivitiesLocked(fd, pw, args, opti, dumpAll, dumpClient, dumpPackage);
if (mAssociations.size() > 0) {
pw.println();
@@ -15239,6 +15254,11 @@ public class ActivityManagerService extends IActivityManager.Stub
if (dumpAll) {
pw.println("-------------------------------------------------------------------------------");
}
dumpActivityStarterLocked(pw);
pw.println();
if (dumpAll) {
pw.println("-------------------------------------------------------------------------------");
}
dumpActivitiesLocked(fd, pw, args, opti, dumpAll, dumpClient, dumpPackage);
if (mAssociations.size() > 0) {
pw.println();
@@ -15258,14 +15278,19 @@ public class ActivityManagerService extends IActivityManager.Stub
}
private void dumpLastANRLocked(PrintWriter pw) {
pw.println("ACTIVITY MANAGER ACTIVITIES (dumpsys activity lastanr)");
if (mLastANRState == null) {
pw.println("ACTIVITY MANAGER ACTIVITIES (dumpsys activity lastanr)");
pw.println(" <no ANR has occurred since boot>");
} else {
pw.println(mLastANRState);
}
}
private void dumpActivityStarterLocked(PrintWriter pw) {
pw.println("ACTIVITY MANAGER ACTIVITIES (dumpsys activity starter)");
mActivityStarter.dump(pw, "");
}
void dumpActivitiesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
int opti, boolean dumpAll, boolean dumpClient, String dumpPackage) {
dumpActivitiesLocked(fd, pw, args, opti, dumpAll, dumpClient, dumpPackage,
@@ -15292,7 +15317,6 @@ public class ActivityManagerService extends IActivityManager.Stub
if (needSep) {
pw.println();
}
needSep = true;
printedAnything = true;
mStackSupervisor.dump(pw, " ");
}
@@ -24015,17 +24039,13 @@ public class ActivityManagerService extends IActivityManager.Stub
if (reason != null) {
pw.println(" Reason: " + reason);
}
pw.println(" mLastHomeActivityStartResult: "
+ mActivityStarter.mLastHomeActivityStartResult);
final ActivityRecord r = mActivityStarter.mLastHomeActivityStartRecord[0];
if (r != null) {
pw.println(" mLastHomeActivityStartRecord:");
r.dump(pw, " ");
}
pw.println();
mActivityStarter.dump(pw, " ");
pw.println();
pw.println("-------------------------------------------------------------------------------");
dumpActivitiesLocked(null /* fd */, pw, null /* args */, 0 /* opti */,
true /* dumpAll */, false /* dumpClient */, null /* dumpPackage */,
"ACTIVITY MANAGER ACTIVITIES (dumpsys activity lastanr)");
"" /* header */);
pw.println();
pw.close();
@@ -24267,7 +24287,7 @@ public class ActivityManagerService extends IActivityManager.Stub
}
return mActivityStarter.startActivityMayWait(appThread, -1, callingPackage, intent,
resolvedType, null, null, null, null, 0, 0, null, null,
null, bOptions, false, callingUser, null, tr);
null, bOptions, false, callingUser, null, tr, "AppTaskImpl");
}
@Override

View File

@@ -3920,7 +3920,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
destIntent, null /*ephemeralIntent*/, null, aInfo, null /*rInfo*/, null,
null, parent.appToken, null, 0, -1, parent.launchedFromUid,
parent.launchedFromPackage, -1, parent.launchedFromUid, 0, null,
false, true, null, null, null);
false, true, null, null, null, "navigateUpTo");
foundParentInTask = res == ActivityManager.START_SUCCESS;
} catch (RemoteException e) {
foundParentInTask = false;

View File

@@ -5180,7 +5180,7 @@ public class ActivityStackSupervisor extends ConfigurationContainer implements D
intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY);
userId = task.userId;
int result = mService.startActivityInPackage(callingUid, callingPackage, intent, null,
null, null, 0, 0, bOptions, userId, null, task);
null, null, 0, 0, bOptions, userId, null, task, "startActivityFromRecents");
if (launchStackId == DOCKED_STACK_ID) {
setResizingDuringAnimation(task);
}

View File

@@ -115,6 +115,7 @@ import android.os.SystemClock;
import android.os.UserHandle;
import android.os.UserManager;
import android.service.voice.IVoiceInteractionSession;
import android.text.TextUtils;
import android.util.EventLog;
import android.util.Slog;
@@ -124,7 +125,10 @@ import com.android.server.am.ActivityStackSupervisor.PendingActivityLaunch;
import com.android.server.pm.InstantAppResolver;
import com.android.server.wm.WindowManagerService;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.util.ArrayList;
import java.util.Date;
/**
* Controller for interpreting how and then launching activities.
@@ -189,9 +193,17 @@ class ActivityStarter {
private boolean mUsingVr2dDisplay;
// Last home activity record we attempted to start
final ActivityRecord[] mLastHomeActivityStartRecord = new ActivityRecord[1];
private final ActivityRecord[] mLastHomeActivityStartRecord = new ActivityRecord[1];
// The result of the last home activity we attempted to start.
int mLastHomeActivityStartResult;
private int mLastHomeActivityStartResult;
// Last activity record we attempted to start
private final ActivityRecord[] mLastStartActivityRecord = new ActivityRecord[1];
// The result of the last activity we attempted to start.
private int mLastStartActivityResult;
// Time in milli seconds we attempted to start the last activity.
private long mLastStartActivityTimeMs;
// The reason we were trying to start the last activity
private String mLastStartReason;
private void reset() {
mStartActivity = null;
@@ -241,7 +253,37 @@ class ActivityStarter {
mUsingVr2dDisplay = false;
}
final int startActivityLocked(IApplicationThread caller, Intent intent, Intent ephemeralIntent,
int startActivityLocked(IApplicationThread caller, Intent intent, Intent ephemeralIntent,
String resolvedType, ActivityInfo aInfo, ResolveInfo rInfo,
IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,
IBinder resultTo, String resultWho, int requestCode, int callingPid, int callingUid,
String callingPackage, int realCallingPid, int realCallingUid, int startFlags,
ActivityOptions options, boolean ignoreTargetSecurity, boolean componentSpecified,
ActivityRecord[] outActivity, ActivityStackSupervisor.ActivityContainer container,
TaskRecord inTask, String reason) {
if (TextUtils.isEmpty(reason)) {
throw new IllegalArgumentException("Need to specify a reason.");
}
mLastStartReason = reason;
mLastStartActivityTimeMs = System.currentTimeMillis();
mLastStartActivityRecord[0] = null;
mLastStartActivityResult = startActivity(caller, intent, ephemeralIntent, resolvedType,
aInfo, rInfo, voiceSession, voiceInteractor, resultTo, resultWho, requestCode,
callingPid, callingUid, callingPackage, realCallingPid, realCallingUid, startFlags,
options, ignoreTargetSecurity, componentSpecified, mLastStartActivityRecord,
container, inTask);
if (outActivity != null) {
// mLastStartActivityRecord[0] is set in the call to startActivity above.
outActivity[0] = mLastStartActivityRecord[0];
}
return mLastStartActivityResult;
}
/** DO NOT call this method directly. Use {@link #startActivityLocked} instead. */
private int startActivity(IApplicationThread caller, Intent intent, Intent ephemeralIntent,
String resolvedType, ActivityInfo aInfo, ResolveInfo rInfo,
IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor,
IBinder resultTo, String resultWho, int requestCode, int callingPid, int callingUid,
@@ -604,7 +646,7 @@ class ActivityStarter {
null /*callingPackage*/, 0 /*realCallingPid*/, 0 /*realCallingUid*/,
0 /*startFlags*/, null /*options*/, false /*ignoreTargetSecurity*/,
false /*componentSpecified*/, mLastHomeActivityStartRecord /*outActivity*/,
null /*container*/, null /*inTask*/);
null /*container*/, null /*inTask*/, "startHomeActivity: " + reason);
if (mSupervisor.inResumeTopActivity) {
// If we are in resume section already, home activity will be initialized, but not
// resumed (to avoid recursive resume) and will stay that way until something pokes it
@@ -629,7 +671,7 @@ class ActivityStarter {
IBinder resultTo, String resultWho, int requestCode, int startFlags,
ProfilerInfo profilerInfo, WaitResult outResult,
Configuration globalConfig, Bundle bOptions, boolean ignoreTargetSecurity, int userId,
IActivityContainer iContainer, TaskRecord inTask) {
IActivityContainer iContainer, TaskRecord inTask, String reason) {
// Refuse possible leaked file descriptors
if (intent != null && intent.hasFileDescriptors()) {
throw new IllegalArgumentException("File descriptors passed in Intent");
@@ -784,7 +826,7 @@ class ActivityStarter {
resultTo, resultWho, requestCode, callingPid,
callingUid, callingPackage, realCallingPid, realCallingUid, startFlags,
options, ignoreTargetSecurity, componentSpecified, outRecord, container,
inTask);
inTask, reason);
Binder.restoreCallingIdentity(origId);
@@ -847,7 +889,7 @@ class ActivityStarter {
final int startActivities(IApplicationThread caller, int callingUid, String callingPackage,
Intent[] intents, String[] resolvedTypes, IBinder resultTo,
Bundle bOptions, int userId) {
Bundle bOptions, int userId, String reason) {
if (intents == null) {
throw new NullPointerException("intents is null");
}
@@ -909,7 +951,7 @@ class ActivityStarter {
resolvedTypes[i], aInfo, null /*rInfo*/, null, null, resultTo, null, -1,
callingPid, callingUid, callingPackage,
realCallingPid, realCallingUid, 0,
options, false, componentSpecified, outActivity, null, null);
options, false, componentSpecified, outActivity, null, null, reason);
if (res < 0) {
return res;
}
@@ -2261,4 +2303,40 @@ class ActivityStarter {
}
return didSomething;
}
void dump(PrintWriter pw, String prefix) {
pw.println(prefix + "ActivityStarter:");
prefix = prefix + " ";
pw.println(prefix + "mLastStartReason=" + mLastStartReason);
pw.println(prefix + "mLastStartActivityTimeMs="
+ DateFormat.getDateTimeInstance().format(new Date(mLastStartActivityTimeMs)));
pw.println(prefix + "mLastStartActivityResult=" + mLastStartActivityResult);
ActivityRecord r = mLastStartActivityRecord[0];
if (r != null) {
pw.println(prefix + "mLastStartActivityRecord:");
r.dump(pw, prefix + " ");
}
pw.println(prefix + "mLastHomeActivityStartResult=" + mLastHomeActivityStartResult);
r = mLastHomeActivityStartRecord[0];
if (r != null) {
pw.println(prefix + "mLastHomeActivityStartRecord:");
r.dump(pw, prefix + " ");
}
if (mStartActivity != null) {
pw.println(prefix + "mStartActivity:");
mStartActivity.dump(pw, prefix + " ");
}
if (mIntent != null) {
pw.println(prefix + "mIntent=" + mIntent);
}
if (mOptions != null) {
pw.println(prefix + "mOptions=" + mOptions);
}
pw.println(prefix + "mLaunchSingleTop=" + mLaunchSingleTop
+ " mLaunchSingleInstance=" + mLaunchSingleInstance
+ " mLaunchSingleTask=" + mLaunchSingleTask
+ " mLaunchFlags=0x" + Integer.toHexString(mLaunchFlags)
+ " mDoResume=" + mDoResume + " mAddingToTask=" + mAddingToTask);
}
}

View File

@@ -411,7 +411,7 @@ class AppErrors {
task.mCallingPackage, task.intent,
null, null, null, 0, 0,
ActivityOptions.makeBasic().toBundle(),
task.userId, null, null);
task.userId, null, null, "AppErrors");
}
}
}

View File

@@ -346,7 +346,7 @@ final class PendingIntentRecord extends IIntentSender.Stub {
} else {
owner.startActivityInPackage(uid, key.packageName, finalIntent,
resolvedType, resultTo, resultWho, requestCode, 0,
options, userId, container, null);
options, userId, container, null, "PendingIntentRecord");
}
} catch (RuntimeException e) {
Slog.w(TAG, "Unable to send startActivity intent", e);