diff options
6 files changed, 152 insertions, 55 deletions
diff --git a/core/java/android/app/KeyguardManager.java b/core/java/android/app/KeyguardManager.java index 2d554031ab48..c072feb5b46e 100644 --- a/core/java/android/app/KeyguardManager.java +++ b/core/java/android/app/KeyguardManager.java @@ -679,10 +679,11 @@ public class KeyguardManager { * <p> * Specifically, this returns {@code true} if at least one of the following is true: * <ul> - * <li>The {@link Context}'s user has a secure lock screen. A full user has a secure lock - * screen if its lock screen is set to PIN, pattern, or password, as opposed to swipe or none. - * A profile that uses a unified challenge is considered to have a secure lock screen if and - * only if its parent user has a secure lock screen.</li> + * <li>The {@link Context}'s user has a secure lock screen. A full user or a profile that uses + * a separate challenge has a secure lock screen if its lock screen is set to PIN, pattern, or + * password, as opposed to swipe or none. A profile that uses a unified challenge is + * considered to have a secure lock screen if and only if its parent user has a secure lock + * screen.</li> * <li>At least one SIM card is currently locked and requires a PIN.</li> * </ul> * <p> @@ -729,8 +730,15 @@ public class KeyguardManager { * <p> * For a user that is not the current user but can be switched to (usually this means "another * full user"), and that has a PIN, pattern, or password, the device is always considered - * locked. For a profile with a unified challenge, the device is considered locked if and only - * if the device is locked for the parent user. + * locked. + * <p> + * For a profile with a unified challenge, the device locked state is the same as that of the + * parent user. + * <p> + * For a profile with a separate challenge, the device becomes unlocked when the profile's PIN, + * pattern, password, or biometric is verified. It becomes locked when the parent user becomes + * locked, the screen turns off, the device reboots, the device policy controller locks the + * profile, or the timeout set by the device policy controller expires. * * @return {@code true} if the device is currently locked for the user * @see #isKeyguardLocked() @@ -757,9 +765,10 @@ public class KeyguardManager { * Returns whether the user has a secure lock screen. * <p> * This returns {@code true} if the {@link Context}'s user has a secure lock screen. A full user - * has a secure lock screen if its lock screen is set to PIN, pattern, or password, as opposed - * to swipe or none. A profile that uses a unified challenge is considered to have a secure lock - * screen if and only if its parent user has a secure lock screen. + * or a profile that uses a separate challenge has a secure lock screen if its lock screen is + * set to PIN, pattern, or password, as opposed to swipe or none. A profile that uses a unified + * challenge is considered to have a secure lock screen if and only if its parent user has a + * secure lock screen. * <p> * This method does not consider whether the lock screen is currently showing or not. * <p> diff --git a/core/java/com/android/internal/net/TEST_MAPPING b/core/java/com/android/internal/net/TEST_MAPPING new file mode 100644 index 000000000000..971ad36eecba --- /dev/null +++ b/core/java/com/android/internal/net/TEST_MAPPING @@ -0,0 +1,12 @@ +{ + "postsubmit": [ + { + "name": "FrameworksNetTests", + "options": [ + { + "exclude-annotation": "com.android.testutils.SkipPresubmit" + } + ] + } + ] +} diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index c0da30d0e153..6c840a593370 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -1690,19 +1690,23 @@ public class ActivityManagerService extends IActivityManager.Stub private static final int INDEX_NATIVE_PSS = 0; private static final int INDEX_NATIVE_SWAP_PSS = 1; private static final int INDEX_NATIVE_RSS = 2; - private static final int INDEX_DALVIK_PSS = 3; - private static final int INDEX_DALVIK_SWAP_PSS = 4; - private static final int INDEX_DALVIK_RSS = 5; - private static final int INDEX_OTHER_PSS = 6; - private static final int INDEX_OTHER_SWAP_PSS = 7; - private static final int INDEX_OTHER_RSS = 8; - private static final int INDEX_TOTAL_PSS = 9; - private static final int INDEX_TOTAL_SWAP_PSS = 10; - private static final int INDEX_TOTAL_RSS = 11; - private static final int INDEX_TOTAL_NATIVE_PSS = 12; - private static final int INDEX_TOTAL_MEMTRACK_GRAPHICS = 13; - private static final int INDEX_TOTAL_MEMTRACK_GL = 14; - private static final int INDEX_LAST = 15; + private static final int INDEX_NATIVE_PRIVATE_DIRTY = 3; + private static final int INDEX_DALVIK_PSS = 4; + private static final int INDEX_DALVIK_SWAP_PSS = 5; + private static final int INDEX_DALVIK_RSS = 6; + private static final int INDEX_DALVIK_PRIVATE_DIRTY = 7; + private static final int INDEX_OTHER_PSS = 8; + private static final int INDEX_OTHER_SWAP_PSS = 9; + private static final int INDEX_OTHER_RSS = 10; + private static final int INDEX_OTHER_PRIVATE_DIRTY = 11; + private static final int INDEX_TOTAL_PSS = 12; + private static final int INDEX_TOTAL_SWAP_PSS = 13; + private static final int INDEX_TOTAL_RSS = 14; + private static final int INDEX_TOTAL_PRIVATE_DIRTY = 15; + private static final int INDEX_TOTAL_NATIVE_PSS = 16; + private static final int INDEX_TOTAL_MEMTRACK_GRAPHICS = 17; + private static final int INDEX_TOTAL_MEMTRACK_GL = 18; + private static final int INDEX_LAST = 19; /** * Used to notify activity lifecycle events. @@ -11355,13 +11359,14 @@ public class ActivityManagerService extends IActivityManager.Stub final long pss; final long swapPss; final long mRss; + final long mPrivateDirty; final int id; // pid final int userId; final boolean hasActivities; ArrayList<MemItem> subitems; - MemItem(String label, String shortLabel, long pss, long swapPss, long rss, int id, - @UserIdInt int userId, + MemItem(String label, String shortLabel, long pss, long swapPss, long rss, + long privateDirty, int id, @UserIdInt int userId, boolean hasActivities) { this.isProc = true; this.label = label; @@ -11369,18 +11374,21 @@ public class ActivityManagerService extends IActivityManager.Stub this.pss = pss; this.swapPss = swapPss; this.mRss = rss; + this.mPrivateDirty = privateDirty; this.id = id; this.userId = userId; this.hasActivities = hasActivities; } - MemItem(String label, String shortLabel, long pss, long swapPss, long rss, int id) { + MemItem(String label, String shortLabel, long pss, long swapPss, long rss, + long privateDirty, int id) { this.isProc = false; this.label = label; this.shortLabel = shortLabel; this.pss = pss; this.swapPss = swapPss; this.mRss = rss; + this.mPrivateDirty = privateDirty; this.id = id; this.userId = UserHandle.USER_SYSTEM; this.hasActivities = false; @@ -11405,7 +11413,7 @@ public class ActivityManagerService extends IActivityManager.Stub static final void dumpMemItems(PrintWriter pw, String prefix, String tag, ArrayList<MemItem> items, boolean sort, boolean isCompact, boolean dumpPss, - boolean dumpSwapPss) { + boolean dumpSwapPss, boolean dumpPrivateDirty) { if (sort && !isCompact) { sortMemItems(items, dumpPss); } @@ -11413,14 +11421,18 @@ public class ActivityManagerService extends IActivityManager.Stub for (int i=0; i<items.size(); i++) { MemItem mi = items.get(i); if (!isCompact) { - if (dumpPss && dumpSwapPss) { - pw.printf("%s%s: %-60s (%s in swap)\n", prefix, stringifyKBSize(mi.pss), - mi.label, stringifyKBSize(mi.swapPss)); - } else { - pw.printf("%s%s: %s%s\n", prefix, stringifyKBSize(dumpPss ? mi.pss : mi.mRss), + pw.printf("%s%s: %s%s\n", prefix, stringifyKBSize(dumpPss ? mi.pss : mi.mRss), mi.label, mi.userId != UserHandle.USER_SYSTEM ? " (user " + mi.userId + ")" : ""); + if (dumpPss && dumpSwapPss) { + pw.printf("(%s in swap%s", stringifyKBSize(mi.swapPss), + dumpPrivateDirty ? ", " : ")"); } + if (dumpPrivateDirty) { + pw.printf("%s%s private dirty)", dumpSwapPss ? "" : "(", + stringifyKBSize(mi.mPrivateDirty)); + } + pw.printf("\n"); } else if (mi.isProc) { pw.print("proc,"); pw.print(tag); pw.print(","); pw.print(mi.shortLabel); pw.print(","); pw.print(mi.id); pw.print(","); @@ -11434,7 +11446,7 @@ public class ActivityManagerService extends IActivityManager.Stub } if (mi.subitems != null) { dumpMemItems(pw, prefix + " ", mi.shortLabel, mi.subitems, - true, isCompact, dumpPss, dumpSwapPss); + true, isCompact, dumpPss, dumpSwapPss, dumpPrivateDirty); } } } @@ -11602,6 +11614,7 @@ public class ActivityManagerService extends IActivityManager.Stub boolean isCheckinRequest; boolean dumpSwapPss; boolean dumpProto; + boolean mDumpPrivateDirty; } @NeverCompile // Avoid size overhead of debugging code. @@ -11620,6 +11633,7 @@ public class ActivityManagerService extends IActivityManager.Stub opts.isCheckinRequest = false; opts.dumpSwapPss = false; opts.dumpProto = asProto; + opts.mDumpPrivateDirty = false; int opti = 0; while (opti < args.length) { @@ -11642,6 +11656,8 @@ public class ActivityManagerService extends IActivityManager.Stub opts.dumpSummaryOnly = true; } else if ("-S".equals(opt)) { opts.dumpSwapPss = true; + } else if ("-p".equals(opt)) { + opts.mDumpPrivateDirty = true; } else if ("--unreachable".equals(opt)) { opts.dumpUnreachable = true; } else if ("--oom".equals(opt)) { @@ -11662,6 +11678,7 @@ public class ActivityManagerService extends IActivityManager.Stub pw.println(" -c: dump in a compact machine-parseable representation."); pw.println(" -s: dump only summary of application memory usage."); pw.println(" -S: dump also SwapPss."); + pw.println(" -p: dump also private dirty memory usage."); pw.println(" --oom: only show processes organized by oom adj."); pw.println(" --local: only collect details locally, don't call process."); pw.println(" --package: interpret process arg as package, dumping all"); @@ -11780,14 +11797,18 @@ public class ActivityManagerService extends IActivityManager.Stub EmptyArray.LONG; long[] dalvikSubitemRss = opts.dumpDalvik ? new long[Debug.MemoryInfo.NUM_DVK_STATS] : EmptyArray.LONG; + long[] dalvikSubitemPrivateDirty = opts.dumpDalvik + ? new long[Debug.MemoryInfo.NUM_DVK_STATS] : EmptyArray.LONG; long[] miscPss = new long[Debug.MemoryInfo.NUM_OTHER_STATS]; long[] miscSwapPss = new long[Debug.MemoryInfo.NUM_OTHER_STATS]; long[] miscRss = new long[Debug.MemoryInfo.NUM_OTHER_STATS]; + long[] miscPrivateDirty = new long[Debug.MemoryInfo.NUM_OTHER_STATS]; long[] memtrackTmp = new long[4]; long oomPss[] = new long[DUMP_MEM_OOM_LABEL.length]; long oomSwapPss[] = new long[DUMP_MEM_OOM_LABEL.length]; long[] oomRss = new long[DUMP_MEM_OOM_LABEL.length]; + long[] oomPrivateDirty = new long[DUMP_MEM_OOM_LABEL.length]; ArrayList<MemItem>[] oomProcs = (ArrayList<MemItem>[]) new ArrayList[DUMP_MEM_OOM_LABEL.length]; @@ -11883,6 +11904,7 @@ public class ActivityManagerService extends IActivityManager.Stub final long myTotalUss = mi.getTotalUss(); final long myTotalRss = mi.getTotalRss(); final long myTotalSwapPss = mi.getTotalSwappedOutPss(); + final long myTotalPrivateDirty = mi.getTotalPrivateDirty(); synchronized (mProcLock) { if (r.getThread() != null && oomAdj == r.mState.getSetAdjWithServices()) { @@ -11896,29 +11918,36 @@ public class ActivityManagerService extends IActivityManager.Stub ss[INDEX_TOTAL_PSS] += myTotalPss; ss[INDEX_TOTAL_SWAP_PSS] += myTotalSwapPss; ss[INDEX_TOTAL_RSS] += myTotalRss; + ss[INDEX_TOTAL_PRIVATE_DIRTY] += myTotalPrivateDirty; ss[INDEX_TOTAL_MEMTRACK_GRAPHICS] += memtrackGraphics; ss[INDEX_TOTAL_MEMTRACK_GL] += memtrackGl; MemItem pssItem = new MemItem(r.processName + " (pid " + pid + (hasActivities ? " / activities)" : ")"), r.processName, myTotalPss, - myTotalSwapPss, myTotalRss, pid, r.userId, hasActivities); + myTotalSwapPss, myTotalRss, myTotalPrivateDirty, + pid, r.userId, hasActivities); procMems.add(pssItem); procMemsMap.put(pid, pssItem); ss[INDEX_NATIVE_PSS] += mi.nativePss; ss[INDEX_NATIVE_SWAP_PSS] += mi.nativeSwappedOutPss; ss[INDEX_NATIVE_RSS] += mi.nativeRss; + ss[INDEX_NATIVE_PRIVATE_DIRTY] += mi.nativePrivateDirty; ss[INDEX_DALVIK_PSS] += mi.dalvikPss; ss[INDEX_DALVIK_SWAP_PSS] += mi.dalvikSwappedOutPss; ss[INDEX_DALVIK_RSS] += mi.dalvikRss; + ss[INDEX_DALVIK_PRIVATE_DIRTY] += mi.dalvikPrivateDirty; for (int j=0; j<dalvikSubitemPss.length; j++) { dalvikSubitemPss[j] += mi.getOtherPss(Debug.MemoryInfo.NUM_OTHER_STATS + j); dalvikSubitemSwapPss[j] += mi.getOtherSwappedOutPss(Debug.MemoryInfo.NUM_OTHER_STATS + j); + dalvikSubitemPrivateDirty[j] += + mi.getOtherPrivateDirty(Debug.MemoryInfo.NUM_OTHER_STATS + j); dalvikSubitemRss[j] += mi.getOtherRss(Debug.MemoryInfo.NUM_OTHER_STATS + j); } ss[INDEX_OTHER_PSS] += mi.otherPss; ss[INDEX_OTHER_RSS] += mi.otherRss; ss[INDEX_OTHER_SWAP_PSS] += mi.otherSwappedOutPss; + ss[INDEX_OTHER_PRIVATE_DIRTY] += mi.otherPrivateDirty; for (int j=0; j<Debug.MemoryInfo.NUM_OTHER_STATS; j++) { long mem = mi.getOtherPss(j); miscPss[j] += mem; @@ -11926,6 +11955,9 @@ public class ActivityManagerService extends IActivityManager.Stub mem = mi.getOtherSwappedOutPss(j); miscSwapPss[j] += mem; ss[INDEX_OTHER_SWAP_PSS] -= mem; + mem = mi.getOtherPrivateDirty(j); + miscPrivateDirty[j] += mem; + ss[INDEX_OTHER_PRIVATE_DIRTY] -= mem; mem = mi.getOtherRss(j); miscRss[j] += mem; ss[INDEX_OTHER_RSS] -= mem; @@ -11942,6 +11974,7 @@ public class ActivityManagerService extends IActivityManager.Stub && oomAdj < DUMP_MEM_OOM_ADJ[oomIndex + 1])) { oomPss[oomIndex] += myTotalPss; oomSwapPss[oomIndex] += myTotalSwapPss; + oomPrivateDirty[oomIndex] += myTotalPrivateDirty; if (oomProcs[oomIndex] == null) { oomProcs[oomIndex] = new ArrayList<MemItem>(); } @@ -11988,6 +12021,7 @@ public class ActivityManagerService extends IActivityManager.Stub final long myTotalPss = info.getTotalPss(); final long myTotalSwapPss = info.getTotalSwappedOutPss(); final long myTotalRss = info.getTotalRss(); + final long myTotalPrivateDirty = info.getTotalPrivateDirty(); ss[INDEX_TOTAL_PSS] += myTotalPss; ss[INDEX_TOTAL_SWAP_PSS] += myTotalSwapPss; ss[INDEX_TOTAL_RSS] += myTotalRss; @@ -11997,15 +12031,17 @@ public class ActivityManagerService extends IActivityManager.Stub MemItem pssItem = new MemItem(st.name + " (pid " + st.pid + ")", st.name, myTotalPss, info.getSummaryTotalSwapPss(), myTotalRss, - st.pid, UserHandle.getUserId(st.uid), false); + myTotalPrivateDirty, st.pid, UserHandle.getUserId(st.uid), false); procMems.add(pssItem); ss[INDEX_NATIVE_PSS] += info.nativePss; ss[INDEX_NATIVE_SWAP_PSS] += info.nativeSwappedOutPss; ss[INDEX_NATIVE_RSS] += info.nativeRss; + ss[INDEX_NATIVE_PRIVATE_DIRTY] += info.nativePrivateDirty; ss[INDEX_DALVIK_PSS] += info.dalvikPss; ss[INDEX_DALVIK_SWAP_PSS] += info.dalvikSwappedOutPss; ss[INDEX_DALVIK_RSS] += info.dalvikRss; + ss[INDEX_DALVIK_PRIVATE_DIRTY] += info.dalvikPrivateDirty; for (int j = 0; j < dalvikSubitemPss.length; j++) { dalvikSubitemPss[j] += info.getOtherPss( Debug.MemoryInfo.NUM_OTHER_STATS + j); @@ -12013,10 +12049,13 @@ public class ActivityManagerService extends IActivityManager.Stub info.getOtherSwappedOutPss(Debug.MemoryInfo.NUM_OTHER_STATS + j); dalvikSubitemRss[j] += info.getOtherRss(Debug.MemoryInfo.NUM_OTHER_STATS + j); + dalvikSubitemPrivateDirty[j] += + info.getOtherPrivateDirty(Debug.MemoryInfo.NUM_OTHER_STATS + j); } ss[INDEX_OTHER_PSS] += info.otherPss; ss[INDEX_OTHER_SWAP_PSS] += info.otherSwappedOutPss; ss[INDEX_OTHER_RSS] += info.otherRss; + ss[INDEX_OTHER_PRIVATE_DIRTY] += info.otherPrivateDirty; for (int j = 0; j < Debug.MemoryInfo.NUM_OTHER_STATS; j++) { long mem = info.getOtherPss(j); miscPss[j] += mem; @@ -12027,6 +12066,9 @@ public class ActivityManagerService extends IActivityManager.Stub mem = info.getOtherRss(j); miscRss[j] += mem; ss[INDEX_OTHER_RSS] -= mem; + mem = info.getOtherPrivateDirty(j); + miscPrivateDirty[j] += mem; + ss[INDEX_OTHER_PRIVATE_DIRTY] -= mem; } oomPss[0] += myTotalPss; oomSwapPss[0] += myTotalSwapPss; @@ -12035,21 +12077,26 @@ public class ActivityManagerService extends IActivityManager.Stub } oomProcs[0].add(pssItem); oomRss[0] += myTotalRss; + oomPrivateDirty[0] += myTotalPrivateDirty; } }); ArrayList<MemItem> catMems = new ArrayList<MemItem>(); catMems.add(new MemItem("Native", "Native", - ss[INDEX_NATIVE_PSS], ss[INDEX_NATIVE_SWAP_PSS], ss[INDEX_NATIVE_RSS], -1)); + ss[INDEX_NATIVE_PSS], ss[INDEX_NATIVE_SWAP_PSS], + ss[INDEX_NATIVE_RSS], ss[INDEX_NATIVE_PRIVATE_DIRTY], -1)); final int dalvikId = -2; catMems.add(new MemItem("Dalvik", "Dalvik", ss[INDEX_DALVIK_PSS], - ss[INDEX_DALVIK_SWAP_PSS], ss[INDEX_DALVIK_RSS], dalvikId)); + ss[INDEX_DALVIK_SWAP_PSS], ss[INDEX_DALVIK_RSS], + ss[INDEX_DALVIK_PRIVATE_DIRTY], dalvikId)); catMems.add(new MemItem("Unknown", "Unknown", ss[INDEX_OTHER_PSS], - ss[INDEX_OTHER_SWAP_PSS], ss[INDEX_OTHER_RSS], -3)); + ss[INDEX_OTHER_SWAP_PSS], ss[INDEX_OTHER_RSS], + ss[INDEX_OTHER_PRIVATE_DIRTY], -3)); for (int j=0; j<Debug.MemoryInfo.NUM_OTHER_STATS; j++) { String label = Debug.MemoryInfo.getOtherLabel(j); - catMems.add(new MemItem(label, label, miscPss[j], miscSwapPss[j], miscRss[j], j)); + catMems.add(new MemItem(label, label, miscPss[j], miscSwapPss[j], miscRss[j], + miscPrivateDirty[j], j)); } if (dalvikSubitemPss.length > 0) { // Add dalvik subitems. @@ -12075,7 +12122,8 @@ public class ActivityManagerService extends IActivityManager.Stub final String name = Debug.MemoryInfo.getOtherLabel( Debug.MemoryInfo.NUM_OTHER_STATS + j); memItem.subitems.add(new MemItem(name, name, dalvikSubitemPss[j], - dalvikSubitemSwapPss[j], dalvikSubitemRss[j], j)); + dalvikSubitemSwapPss[j], dalvikSubitemRss[j], + dalvikSubitemPrivateDirty[j], j)); } } } @@ -12086,7 +12134,7 @@ public class ActivityManagerService extends IActivityManager.Stub String label = opts.isCompact ? DUMP_MEM_OOM_COMPACT_LABEL[j] : DUMP_MEM_OOM_LABEL[j]; MemItem item = new MemItem(label, label, oomPss[j], oomSwapPss[j], oomRss[j], - DUMP_MEM_OOM_ADJ[j]); + oomPrivateDirty[j], DUMP_MEM_OOM_ADJ[j]); item.subitems = oomProcs[j]; oomMems.add(item); } @@ -12097,33 +12145,34 @@ public class ActivityManagerService extends IActivityManager.Stub if (!brief && !opts.oomOnly && !opts.isCompact) { pw.println(); pw.println("Total RSS by process:"); - dumpMemItems(pw, " ", "proc", procMems, true, opts.isCompact, false, false); + dumpMemItems(pw, " ", "proc", procMems, true, opts.isCompact, false, false, false); pw.println(); } if (!opts.isCompact) { pw.println("Total RSS by OOM adjustment:"); } - dumpMemItems(pw, " ", "oom", oomMems, false, opts.isCompact, false, false); + dumpMemItems(pw, " ", "oom", oomMems, false, opts.isCompact, false, false, false); if (!brief && !opts.oomOnly) { PrintWriter out = categoryPw != null ? categoryPw : pw; if (!opts.isCompact) { out.println(); out.println("Total RSS by category:"); } - dumpMemItems(out, " ", "cat", catMems, true, opts.isCompact, false, false); + dumpMemItems(out, " ", "cat", catMems, true, opts.isCompact, false, false, false); } opts.dumpSwapPss = opts.dumpSwapPss && hasSwapPss && ss[INDEX_TOTAL_SWAP_PSS] != 0; if (!brief && !opts.oomOnly && !opts.isCompact) { pw.println(); pw.println("Total PSS by process:"); dumpMemItems(pw, " ", "proc", procMems, true, opts.isCompact, true, - opts.dumpSwapPss); + opts.dumpSwapPss, opts.mDumpPrivateDirty); pw.println(); } if (!opts.isCompact) { pw.println("Total PSS by OOM adjustment:"); } - dumpMemItems(pw, " ", "oom", oomMems, false, opts.isCompact, true, opts.dumpSwapPss); + dumpMemItems(pw, " ", "oom", oomMems, false, opts.isCompact, true, opts.dumpSwapPss, + opts.mDumpPrivateDirty); if (!brief && !opts.oomOnly) { PrintWriter out = categoryPw != null ? categoryPw : pw; if (!opts.isCompact) { @@ -12131,7 +12180,7 @@ public class ActivityManagerService extends IActivityManager.Stub out.println("Total PSS by category:"); } dumpMemItems(out, " ", "cat", catMems, true, opts.isCompact, true, - opts.dumpSwapPss); + opts.dumpSwapPss, opts.mDumpPrivateDirty); } if (!opts.isCompact) { pw.println(); @@ -12533,7 +12582,7 @@ public class ActivityManagerService extends IActivityManager.Stub ss[INDEX_TOTAL_RSS] += myTotalRss; MemItem pssItem = new MemItem(r.processName + " (pid " + pid + (hasActivities ? " / activities)" : ")"), r.processName, myTotalPss, - myTotalSwapPss, myTotalRss, pid, r.userId, hasActivities); + myTotalSwapPss, myTotalRss, 0, pid, r.userId, hasActivities); procMems.add(pssItem); procMemsMap.put(pid, pssItem); @@ -12620,7 +12669,7 @@ public class ActivityManagerService extends IActivityManager.Stub ss[INDEX_TOTAL_NATIVE_PSS] += myTotalPss; MemItem pssItem = new MemItem(st.name + " (pid " + st.pid + ")", - st.name, myTotalPss, info.getSummaryTotalSwapPss(), myTotalRss, + st.name, myTotalPss, info.getSummaryTotalSwapPss(), myTotalRss, 0, st.pid, UserHandle.getUserId(st.uid), false); procMems.add(pssItem); @@ -12665,15 +12714,16 @@ public class ActivityManagerService extends IActivityManager.Stub ArrayList<MemItem> catMems = new ArrayList<MemItem>(); catMems.add(new MemItem("Native", "Native", ss[INDEX_NATIVE_PSS], - ss[INDEX_NATIVE_SWAP_PSS], ss[INDEX_NATIVE_RSS], -1)); + ss[INDEX_NATIVE_SWAP_PSS], ss[INDEX_NATIVE_RSS], 0, -1)); final int dalvikId = -2; catMems.add(new MemItem("Dalvik", "Dalvik", ss[INDEX_DALVIK_PSS], - ss[INDEX_DALVIK_SWAP_PSS], ss[INDEX_DALVIK_RSS], dalvikId)); + ss[INDEX_DALVIK_SWAP_PSS], ss[INDEX_DALVIK_RSS], 0, dalvikId)); catMems.add(new MemItem("Unknown", "Unknown", ss[INDEX_OTHER_PSS], - ss[INDEX_OTHER_SWAP_PSS], ss[INDEX_OTHER_RSS], -3)); + ss[INDEX_OTHER_SWAP_PSS], ss[INDEX_OTHER_RSS], 0, -3)); for (int j=0; j<Debug.MemoryInfo.NUM_OTHER_STATS; j++) { String label = Debug.MemoryInfo.getOtherLabel(j); - catMems.add(new MemItem(label, label, miscPss[j], miscSwapPss[j], miscRss[j], j)); + catMems.add(new MemItem(label, label, miscPss[j], miscSwapPss[j], + miscRss[j], 0, j)); } if (dalvikSubitemPss.length > 0) { // Add dalvik subitems. @@ -12699,7 +12749,7 @@ public class ActivityManagerService extends IActivityManager.Stub final String name = Debug.MemoryInfo.getOtherLabel( Debug.MemoryInfo.NUM_OTHER_STATS + j); memItem.subitems.add(new MemItem(name, name, dalvikSubitemPss[j], - dalvikSubitemSwapPss[j], dalvikSubitemRss[j], j)); + dalvikSubitemSwapPss[j], dalvikSubitemRss[j], 0, j)); } } } @@ -12709,7 +12759,7 @@ public class ActivityManagerService extends IActivityManager.Stub if (oomPss[j] != 0) { String label = opts.isCompact ? DUMP_MEM_OOM_COMPACT_LABEL[j] : DUMP_MEM_OOM_LABEL[j]; - MemItem item = new MemItem(label, label, oomPss[j], oomSwapPss[j], oomRss[j], + MemItem item = new MemItem(label, label, oomPss[j], oomSwapPss[j], oomRss[j], 0, DUMP_MEM_OOM_ADJ[j]); item.subitems = oomProcs[j]; oomMems.add(item); diff --git a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java index 7d0d5a73f093..ec6b5ea41339 100644 --- a/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java +++ b/services/core/java/com/android/server/hdmi/HdmiCecLocalDevice.java @@ -559,7 +559,9 @@ abstract class HdmiCecLocalDevice extends HdmiLocalDevice { HdmiDeviceInfo cecDeviceInfo = mService.getHdmiCecNetwork().getCecDeviceInfo(address); // If no non-default display name is available for the device, request the devices OSD name. - if (cecDeviceInfo != null && cecDeviceInfo.getDisplayName().equals( + // On TV devices, the OSD name is queried in NewDeviceAction instead. + if (!mService.isTvDevice() && cecDeviceInfo != null + && cecDeviceInfo.getDisplayName().equals( HdmiUtils.getDefaultDeviceName(address))) { mService.sendCecCommand( HdmiCecMessageBuilder.buildGiveOsdNameCommand( diff --git a/services/core/java/com/android/server/inputmethod/OWNERS b/services/core/java/com/android/server/inputmethod/OWNERS index 6e5eb5631112..aa638aa49fb3 100644 --- a/services/core/java/com/android/server/inputmethod/OWNERS +++ b/services/core/java/com/android/server/inputmethod/OWNERS @@ -3,6 +3,8 @@ set noparent roosa@google.com yukawa@google.com tarandeep@google.com +fstern@google.com +cosminbaies@google.com ogunwale@google.com #{LAST_RESORT_SUGGESTION} jjaggi@google.com #{LAST_RESORT_SUGGESTION} diff --git a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java index d52b7ea38725..6a2800949dd0 100644 --- a/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java +++ b/services/tests/servicestests/src/com/android/server/hdmi/HdmiCecLocalDeviceTvTest.java @@ -27,6 +27,8 @@ import static com.android.server.hdmi.HdmiControlService.INITIATED_BY_ENABLE_CEC import static com.google.common.truth.Truth.assertThat; +import static junit.framework.Assert.assertEquals; + import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; @@ -1648,4 +1650,24 @@ public class HdmiCecLocalDeviceTvTest { assertThat(mHdmiControlService.isSystemAudioActivated()).isTrue(); } + + @Test + public void newDeviceConnectedIfOnlyOneGiveOsdNameSent() { + mHdmiControlService.getHdmiCecNetwork().clearDeviceList(); + assertThat(mHdmiControlService.getHdmiCecNetwork().getDeviceInfoList(false)) + .isEmpty(); + HdmiCecMessage reportPhysicalAddress = + HdmiCecMessageBuilder.buildReportPhysicalAddressCommand( + ADDR_PLAYBACK_2, 0x1000, HdmiDeviceInfo.DEVICE_PLAYBACK); + HdmiCecMessage giveOsdName = HdmiCecMessageBuilder.buildGiveOsdNameCommand( + ADDR_TV, ADDR_PLAYBACK_2); + mNativeWrapper.onCecMessage(reportPhysicalAddress); + mTestLooper.dispatchAll(); + + // Wait until HdmiCecNetwork or NewDeviceAction is in progress + mTestLooper.moveTimeForward(HdmiConfig.TIMEOUT_MS); + + // TV should only send <Give Osd Name> once + assertEquals(1, Collections.frequency(mNativeWrapper.getResultMessages(), giveOsdName)); + } } |