Loading core/java/android/app/ActivityThread.java +5 −18 Original line number Diff line number Diff line Loading @@ -855,10 +855,6 @@ public final class ActivityThread { } } public void getMemoryInfo(Debug.MemoryInfo outInfo) { Debug.getMemoryInfo(outInfo); } public void dispatchPackageBroadcast(int cmd, String[] packages) { queueOrSendMessage(H.DISPATCH_PACKAGE_BROADCAST, packages, cmd); } Loading Loading @@ -895,30 +891,23 @@ public final class ActivityThread { } @Override public Debug.MemoryInfo dumpMemInfo(FileDescriptor fd, boolean checkin, public void dumpMemInfo(FileDescriptor fd, Debug.MemoryInfo mem, boolean checkin, boolean dumpInfo, boolean dumpDalvik, String[] args) { FileOutputStream fout = new FileOutputStream(fd); PrintWriter pw = new FastPrintWriter(fout); try { return dumpMemInfo(pw, checkin, dumpInfo, dumpDalvik); dumpMemInfo(pw, mem, checkin, dumpInfo, dumpDalvik); } finally { pw.flush(); } } private Debug.MemoryInfo dumpMemInfo(PrintWriter pw, boolean checkin, boolean dumpInfo, boolean dumpDalvik) { private void dumpMemInfo(PrintWriter pw, Debug.MemoryInfo memInfo, boolean checkin, boolean dumpInfo, boolean dumpDalvik) { long nativeMax = Debug.getNativeHeapSize() / 1024; long nativeAllocated = Debug.getNativeHeapAllocatedSize() / 1024; long nativeFree = Debug.getNativeHeapFreeSize() / 1024; Debug.MemoryInfo memInfo = new Debug.MemoryInfo(); Debug.getMemoryInfo(memInfo); if (!dumpInfo) { return memInfo; } Runtime runtime = Runtime.getRuntime(); long dalvikMax = runtime.totalMemory() / 1024; Loading Loading @@ -1043,7 +1032,7 @@ public final class ActivityThread { } pw.println(); return memInfo; return; } // otherwise, show human-readable format Loading Loading @@ -1168,8 +1157,6 @@ public final class ActivityThread { pw.println(" Asset Allocations"); pw.print(assetAlloc); } return memInfo; } @Override Loading core/java/android/app/ApplicationThreadNative.java +5 −29 Original line number Diff line number Diff line Loading @@ -450,16 +450,6 @@ public abstract class ApplicationThreadNative extends Binder return true; } case GET_MEMORY_INFO_TRANSACTION: { data.enforceInterface(IApplicationThread.descriptor); Debug.MemoryInfo mi = new Debug.MemoryInfo(); getMemoryInfo(mi); reply.writeNoException(); mi.writeToParcel(reply, 0); return true; } case DISPATCH_PACKAGE_BROADCAST_TRANSACTION: { data.enforceInterface(IApplicationThread.descriptor); Loading Loading @@ -530,14 +520,14 @@ public abstract class ApplicationThreadNative extends Binder { data.enforceInterface(IApplicationThread.descriptor); ParcelFileDescriptor fd = data.readFileDescriptor(); Debug.MemoryInfo mi = Debug.MemoryInfo.CREATOR.createFromParcel(data); boolean checkin = data.readInt() != 0; boolean dumpInfo = data.readInt() != 0; boolean dumpDalvik = data.readInt() != 0; String[] args = data.readStringArray(); Debug.MemoryInfo mi = null; if (fd != null) { try { mi = dumpMemInfo(fd.getFileDescriptor(), checkin, dumpInfo, dumpDalvik, args); dumpMemInfo(fd.getFileDescriptor(), mi, checkin, dumpInfo, dumpDalvik, args); } finally { try { fd.close(); Loading @@ -547,7 +537,6 @@ public abstract class ApplicationThreadNative extends Binder } } reply.writeNoException(); mi.writeToParcel(reply, 0); return true; } Loading Loading @@ -1108,17 +1097,6 @@ class ApplicationThreadProxy implements IApplicationThread { data.recycle(); } public void getMemoryInfo(Debug.MemoryInfo outInfo) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IApplicationThread.descriptor); mRemote.transact(GET_MEMORY_INFO_TRANSACTION, data, reply, 0); reply.readException(); outInfo.readFromParcel(reply); data.recycle(); reply.recycle(); } public void dispatchPackageBroadcast(int cmd, String[] packages) throws RemoteException { Parcel data = Parcel.obtain(); data.writeInterfaceToken(IApplicationThread.descriptor); Loading Loading @@ -1194,23 +1172,21 @@ class ApplicationThreadProxy implements IApplicationThread { IBinder.FLAG_ONEWAY); } public Debug.MemoryInfo dumpMemInfo(FileDescriptor fd, boolean checkin, boolean dumpInfo, boolean dumpDalvik, String[] args) throws RemoteException { public void dumpMemInfo(FileDescriptor fd, Debug.MemoryInfo mem, boolean checkin, boolean dumpInfo, boolean dumpDalvik, String[] args) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IApplicationThread.descriptor); data.writeFileDescriptor(fd); mem.writeToParcel(data, 0); data.writeInt(checkin ? 1 : 0); data.writeInt(dumpInfo ? 1 : 0); data.writeInt(dumpDalvik ? 1 : 0); data.writeStringArray(args); mRemote.transact(DUMP_MEM_INFO_TRANSACTION, data, reply, 0); reply.readException(); Debug.MemoryInfo info = new Debug.MemoryInfo(); info.readFromParcel(reply); data.recycle(); reply.recycle(); return info; } public void dumpGfxInfo(FileDescriptor fd, String[] args) throws RemoteException { Loading core/java/android/app/IApplicationThread.java +2 −3 Original line number Diff line number Diff line Loading @@ -118,7 +118,6 @@ public interface IApplicationThread extends IInterface { void dumpHeap(boolean managed, String path, ParcelFileDescriptor fd) throws RemoteException; void setSchedulingGroup(int group) throws RemoteException; void getMemoryInfo(Debug.MemoryInfo outInfo) throws RemoteException; static final int PACKAGE_REMOVED = 0; static final int EXTERNAL_STORAGE_UNAVAILABLE = 1; void dispatchPackageBroadcast(int cmd, String[] packages) throws RemoteException; Loading @@ -128,7 +127,7 @@ public interface IApplicationThread extends IInterface { void setCoreSettings(Bundle coreSettings) throws RemoteException; void updatePackageCompatibilityInfo(String pkg, CompatibilityInfo info) throws RemoteException; void scheduleTrimMemory(int level) throws RemoteException; Debug.MemoryInfo dumpMemInfo(FileDescriptor fd, boolean checkin, boolean dumpInfo, void dumpMemInfo(FileDescriptor fd, Debug.MemoryInfo mem, boolean checkin, boolean dumpInfo, boolean dumpDalvik, String[] args) throws RemoteException; void dumpGfxInfo(FileDescriptor fd, String[] args) throws RemoteException; void dumpDbInfo(FileDescriptor fd, String[] args) throws RemoteException; Loading Loading @@ -171,7 +170,7 @@ public interface IApplicationThread extends IInterface { int SET_SCHEDULING_GROUP_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+28; int SCHEDULE_CREATE_BACKUP_AGENT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+29; int SCHEDULE_DESTROY_BACKUP_AGENT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+30; int GET_MEMORY_INFO_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+31; int SCHEDULE_SUICIDE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+32; int DISPATCH_PACKAGE_BROADCAST_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+33; int SCHEDULE_CRASH_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+34; Loading core/java/com/android/internal/app/ProcessStats.java +88 −3 Original line number Diff line number Diff line Loading @@ -166,7 +166,7 @@ public final class ProcessStats implements Parcelable { static final String CSV_SEP = "\t"; // Current version of the parcel format. private static final int PARCEL_VERSION = 12; private static final int PARCEL_VERSION = 13; // In-memory Parcel magic number, used to detect attempts to unmarshall bad data private static final int MAGIC = 0x50535453; Loading Loading @@ -646,6 +646,13 @@ public final class ProcessStats implements Parcelable { pw.print(prefix); pw.print("Killed for excessive CPU use: "); pw.print(proc.mNumExcessiveCpu); pw.println(" times"); } if (proc.mNumCachedKill != 0) { pw.print(prefix); pw.print("Killed from cached state: "); pw.print(proc.mNumCachedKill); pw.print(" times from pss "); printSizeValue(pw, proc.mMinCachedKillPss * 1024); pw.print("-"); printSizeValue(pw, proc.mAvgCachedKillPss * 1024); pw.print("-"); printSizeValue(pw, proc.mMaxCachedKillPss * 1024); pw.println(); } } static void dumpStateHeadersCsv(PrintWriter pw, String sep, int[] screenStates, Loading Loading @@ -2033,7 +2040,8 @@ public final class ProcessStats implements Parcelable { dumpAllProcessPssCheckin(pw, proc); pw.println(); } if (proc.mNumExcessiveWake > 0 || proc.mNumExcessiveCpu > 0) { if (proc.mNumExcessiveWake > 0 || proc.mNumExcessiveCpu > 0 || proc.mNumCachedKill > 0) { pw.print("pkgkills,"); pw.print(pkgName); pw.print(","); Loading @@ -2044,6 +2052,14 @@ public final class ProcessStats implements Parcelable { pw.print(proc.mNumExcessiveWake); pw.print(","); pw.print(proc.mNumExcessiveCpu); pw.print(","); pw.print(proc.mNumCachedKill); pw.print(","); pw.print(proc.mMinCachedKillPss); pw.print(":"); pw.print(proc.mAvgCachedKillPss); pw.print(":"); pw.print(proc.mMaxCachedKillPss); pw.println(); } } Loading Loading @@ -2090,7 +2106,8 @@ public final class ProcessStats implements Parcelable { dumpAllProcessPssCheckin(pw, procState); pw.println(); } if (procState.mNumExcessiveWake > 0 || procState.mNumExcessiveCpu > 0) { if (procState.mNumExcessiveWake > 0 || procState.mNumExcessiveCpu > 0 || procState.mNumCachedKill > 0) { pw.print("kills,"); pw.print(procName); pw.print(","); Loading @@ -2099,6 +2116,14 @@ public final class ProcessStats implements Parcelable { pw.print(procState.mNumExcessiveWake); pw.print(","); pw.print(procState.mNumExcessiveCpu); pw.print(","); pw.print(procState.mNumCachedKill); pw.print(","); pw.print(procState.mMinCachedKillPss); pw.print(":"); pw.print(procState.mAvgCachedKillPss); pw.print(":"); pw.print(procState.mMaxCachedKillPss); pw.println(); } } Loading Loading @@ -2135,6 +2160,11 @@ public final class ProcessStats implements Parcelable { int mNumExcessiveWake; int mNumExcessiveCpu; int mNumCachedKill; long mMinCachedKillPss; long mAvgCachedKillPss; long mMaxCachedKillPss; boolean mMultiPackage; boolean mDead; Loading Loading @@ -2200,6 +2230,10 @@ public final class ProcessStats implements Parcelable { } pnew.mNumExcessiveWake = mNumExcessiveWake; pnew.mNumExcessiveCpu = mNumExcessiveCpu; pnew.mNumCachedKill = mNumCachedKill; pnew.mMinCachedKillPss = mMinCachedKillPss; pnew.mAvgCachedKillPss = mAvgCachedKillPss; pnew.mMaxCachedKillPss = mMaxCachedKillPss; pnew.mActive = mActive; pnew.mNumStartedServices = mNumStartedServices; return pnew; Loading @@ -2226,6 +2260,10 @@ public final class ProcessStats implements Parcelable { } mNumExcessiveWake += other.mNumExcessiveWake; mNumExcessiveCpu += other.mNumExcessiveCpu; if (other.mNumCachedKill > 0) { addCachedKill(other.mNumCachedKill, other.mMinCachedKillPss, other.mAvgCachedKillPss, other.mMaxCachedKillPss); } } void resetSafely(long now) { Loading @@ -2238,6 +2276,8 @@ public final class ProcessStats implements Parcelable { mPssTableSize = 0; mNumExcessiveWake = 0; mNumExcessiveCpu = 0; mNumCachedKill = 0; mMinCachedKillPss = mAvgCachedKillPss = mMaxCachedKillPss = 0; } void makeDead() { Loading Loading @@ -2268,6 +2308,12 @@ public final class ProcessStats implements Parcelable { } out.writeInt(mNumExcessiveWake); out.writeInt(mNumExcessiveCpu); out.writeInt(mNumCachedKill); if (mNumCachedKill > 0) { out.writeLong(mMinCachedKillPss); out.writeLong(mAvgCachedKillPss); out.writeLong(mMaxCachedKillPss); } } boolean readFromParcel(Parcel in, boolean fully) { Loading @@ -2289,6 +2335,14 @@ public final class ProcessStats implements Parcelable { mPssTableSize = mPssTable != null ? mPssTable.length : 0; mNumExcessiveWake = in.readInt(); mNumExcessiveCpu = in.readInt(); mNumCachedKill = in.readInt(); if (mNumCachedKill > 0) { mMinCachedKillPss = in.readLong(); mAvgCachedKillPss = in.readLong(); mMaxCachedKillPss = in.readLong(); } else { mMinCachedKillPss = mAvgCachedKillPss = mMaxCachedKillPss = 0; } return true; } Loading Loading @@ -2502,6 +2556,37 @@ public final class ProcessStats implements Parcelable { } } private void addCachedKill(int num, long minPss, long avgPss, long maxPss) { if (mNumCachedKill <= 0) { mNumCachedKill = num; mMinCachedKillPss = minPss; mAvgCachedKillPss = avgPss; mMaxCachedKillPss = maxPss; } else { if (minPss < mMinCachedKillPss) { mMinCachedKillPss = minPss; } if (maxPss > mMaxCachedKillPss) { mMaxCachedKillPss = maxPss; } mAvgCachedKillPss = (long)( ((mAvgCachedKillPss*(double)mNumCachedKill) + avgPss) / (mNumCachedKill+num) ); mNumCachedKill += num; } } public void reportCachedKill(ArrayMap<String, ProcessState> pkgList, long pss) { ensureNotDead(); mCommonProcess.addCachedKill(1, pss, pss, pss); if (!mCommonProcess.mMultiPackage) { return; } for (int ip=pkgList.size()-1; ip>=0; ip--) { pullFixedProc(pkgList, ip).addCachedKill(1, pss, pss, pss); } } ProcessState pullFixedProc(String pkgName) { if (mMultiPackage) { // The array map is still pointing to a common process state Loading services/java/com/android/server/AlarmManagerService.java +2 −1 Original line number Diff line number Diff line Loading @@ -470,7 +470,8 @@ class AlarmManagerService extends IAlarmManager.Stub { mTimeTickSender = PendingIntent.getBroadcastAsUser(context, 0, new Intent(Intent.ACTION_TIME_TICK).addFlags( Intent.FLAG_RECEIVER_REGISTERED_ONLY), 0, Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_FOREGROUND), 0, UserHandle.ALL); Intent intent = new Intent(Intent.ACTION_DATE_CHANGED); intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING); Loading Loading
core/java/android/app/ActivityThread.java +5 −18 Original line number Diff line number Diff line Loading @@ -855,10 +855,6 @@ public final class ActivityThread { } } public void getMemoryInfo(Debug.MemoryInfo outInfo) { Debug.getMemoryInfo(outInfo); } public void dispatchPackageBroadcast(int cmd, String[] packages) { queueOrSendMessage(H.DISPATCH_PACKAGE_BROADCAST, packages, cmd); } Loading Loading @@ -895,30 +891,23 @@ public final class ActivityThread { } @Override public Debug.MemoryInfo dumpMemInfo(FileDescriptor fd, boolean checkin, public void dumpMemInfo(FileDescriptor fd, Debug.MemoryInfo mem, boolean checkin, boolean dumpInfo, boolean dumpDalvik, String[] args) { FileOutputStream fout = new FileOutputStream(fd); PrintWriter pw = new FastPrintWriter(fout); try { return dumpMemInfo(pw, checkin, dumpInfo, dumpDalvik); dumpMemInfo(pw, mem, checkin, dumpInfo, dumpDalvik); } finally { pw.flush(); } } private Debug.MemoryInfo dumpMemInfo(PrintWriter pw, boolean checkin, boolean dumpInfo, boolean dumpDalvik) { private void dumpMemInfo(PrintWriter pw, Debug.MemoryInfo memInfo, boolean checkin, boolean dumpInfo, boolean dumpDalvik) { long nativeMax = Debug.getNativeHeapSize() / 1024; long nativeAllocated = Debug.getNativeHeapAllocatedSize() / 1024; long nativeFree = Debug.getNativeHeapFreeSize() / 1024; Debug.MemoryInfo memInfo = new Debug.MemoryInfo(); Debug.getMemoryInfo(memInfo); if (!dumpInfo) { return memInfo; } Runtime runtime = Runtime.getRuntime(); long dalvikMax = runtime.totalMemory() / 1024; Loading Loading @@ -1043,7 +1032,7 @@ public final class ActivityThread { } pw.println(); return memInfo; return; } // otherwise, show human-readable format Loading Loading @@ -1168,8 +1157,6 @@ public final class ActivityThread { pw.println(" Asset Allocations"); pw.print(assetAlloc); } return memInfo; } @Override Loading
core/java/android/app/ApplicationThreadNative.java +5 −29 Original line number Diff line number Diff line Loading @@ -450,16 +450,6 @@ public abstract class ApplicationThreadNative extends Binder return true; } case GET_MEMORY_INFO_TRANSACTION: { data.enforceInterface(IApplicationThread.descriptor); Debug.MemoryInfo mi = new Debug.MemoryInfo(); getMemoryInfo(mi); reply.writeNoException(); mi.writeToParcel(reply, 0); return true; } case DISPATCH_PACKAGE_BROADCAST_TRANSACTION: { data.enforceInterface(IApplicationThread.descriptor); Loading Loading @@ -530,14 +520,14 @@ public abstract class ApplicationThreadNative extends Binder { data.enforceInterface(IApplicationThread.descriptor); ParcelFileDescriptor fd = data.readFileDescriptor(); Debug.MemoryInfo mi = Debug.MemoryInfo.CREATOR.createFromParcel(data); boolean checkin = data.readInt() != 0; boolean dumpInfo = data.readInt() != 0; boolean dumpDalvik = data.readInt() != 0; String[] args = data.readStringArray(); Debug.MemoryInfo mi = null; if (fd != null) { try { mi = dumpMemInfo(fd.getFileDescriptor(), checkin, dumpInfo, dumpDalvik, args); dumpMemInfo(fd.getFileDescriptor(), mi, checkin, dumpInfo, dumpDalvik, args); } finally { try { fd.close(); Loading @@ -547,7 +537,6 @@ public abstract class ApplicationThreadNative extends Binder } } reply.writeNoException(); mi.writeToParcel(reply, 0); return true; } Loading Loading @@ -1108,17 +1097,6 @@ class ApplicationThreadProxy implements IApplicationThread { data.recycle(); } public void getMemoryInfo(Debug.MemoryInfo outInfo) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IApplicationThread.descriptor); mRemote.transact(GET_MEMORY_INFO_TRANSACTION, data, reply, 0); reply.readException(); outInfo.readFromParcel(reply); data.recycle(); reply.recycle(); } public void dispatchPackageBroadcast(int cmd, String[] packages) throws RemoteException { Parcel data = Parcel.obtain(); data.writeInterfaceToken(IApplicationThread.descriptor); Loading Loading @@ -1194,23 +1172,21 @@ class ApplicationThreadProxy implements IApplicationThread { IBinder.FLAG_ONEWAY); } public Debug.MemoryInfo dumpMemInfo(FileDescriptor fd, boolean checkin, boolean dumpInfo, boolean dumpDalvik, String[] args) throws RemoteException { public void dumpMemInfo(FileDescriptor fd, Debug.MemoryInfo mem, boolean checkin, boolean dumpInfo, boolean dumpDalvik, String[] args) throws RemoteException { Parcel data = Parcel.obtain(); Parcel reply = Parcel.obtain(); data.writeInterfaceToken(IApplicationThread.descriptor); data.writeFileDescriptor(fd); mem.writeToParcel(data, 0); data.writeInt(checkin ? 1 : 0); data.writeInt(dumpInfo ? 1 : 0); data.writeInt(dumpDalvik ? 1 : 0); data.writeStringArray(args); mRemote.transact(DUMP_MEM_INFO_TRANSACTION, data, reply, 0); reply.readException(); Debug.MemoryInfo info = new Debug.MemoryInfo(); info.readFromParcel(reply); data.recycle(); reply.recycle(); return info; } public void dumpGfxInfo(FileDescriptor fd, String[] args) throws RemoteException { Loading
core/java/android/app/IApplicationThread.java +2 −3 Original line number Diff line number Diff line Loading @@ -118,7 +118,6 @@ public interface IApplicationThread extends IInterface { void dumpHeap(boolean managed, String path, ParcelFileDescriptor fd) throws RemoteException; void setSchedulingGroup(int group) throws RemoteException; void getMemoryInfo(Debug.MemoryInfo outInfo) throws RemoteException; static final int PACKAGE_REMOVED = 0; static final int EXTERNAL_STORAGE_UNAVAILABLE = 1; void dispatchPackageBroadcast(int cmd, String[] packages) throws RemoteException; Loading @@ -128,7 +127,7 @@ public interface IApplicationThread extends IInterface { void setCoreSettings(Bundle coreSettings) throws RemoteException; void updatePackageCompatibilityInfo(String pkg, CompatibilityInfo info) throws RemoteException; void scheduleTrimMemory(int level) throws RemoteException; Debug.MemoryInfo dumpMemInfo(FileDescriptor fd, boolean checkin, boolean dumpInfo, void dumpMemInfo(FileDescriptor fd, Debug.MemoryInfo mem, boolean checkin, boolean dumpInfo, boolean dumpDalvik, String[] args) throws RemoteException; void dumpGfxInfo(FileDescriptor fd, String[] args) throws RemoteException; void dumpDbInfo(FileDescriptor fd, String[] args) throws RemoteException; Loading Loading @@ -171,7 +170,7 @@ public interface IApplicationThread extends IInterface { int SET_SCHEDULING_GROUP_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+28; int SCHEDULE_CREATE_BACKUP_AGENT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+29; int SCHEDULE_DESTROY_BACKUP_AGENT_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+30; int GET_MEMORY_INFO_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+31; int SCHEDULE_SUICIDE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+32; int DISPATCH_PACKAGE_BROADCAST_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+33; int SCHEDULE_CRASH_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+34; Loading
core/java/com/android/internal/app/ProcessStats.java +88 −3 Original line number Diff line number Diff line Loading @@ -166,7 +166,7 @@ public final class ProcessStats implements Parcelable { static final String CSV_SEP = "\t"; // Current version of the parcel format. private static final int PARCEL_VERSION = 12; private static final int PARCEL_VERSION = 13; // In-memory Parcel magic number, used to detect attempts to unmarshall bad data private static final int MAGIC = 0x50535453; Loading Loading @@ -646,6 +646,13 @@ public final class ProcessStats implements Parcelable { pw.print(prefix); pw.print("Killed for excessive CPU use: "); pw.print(proc.mNumExcessiveCpu); pw.println(" times"); } if (proc.mNumCachedKill != 0) { pw.print(prefix); pw.print("Killed from cached state: "); pw.print(proc.mNumCachedKill); pw.print(" times from pss "); printSizeValue(pw, proc.mMinCachedKillPss * 1024); pw.print("-"); printSizeValue(pw, proc.mAvgCachedKillPss * 1024); pw.print("-"); printSizeValue(pw, proc.mMaxCachedKillPss * 1024); pw.println(); } } static void dumpStateHeadersCsv(PrintWriter pw, String sep, int[] screenStates, Loading Loading @@ -2033,7 +2040,8 @@ public final class ProcessStats implements Parcelable { dumpAllProcessPssCheckin(pw, proc); pw.println(); } if (proc.mNumExcessiveWake > 0 || proc.mNumExcessiveCpu > 0) { if (proc.mNumExcessiveWake > 0 || proc.mNumExcessiveCpu > 0 || proc.mNumCachedKill > 0) { pw.print("pkgkills,"); pw.print(pkgName); pw.print(","); Loading @@ -2044,6 +2052,14 @@ public final class ProcessStats implements Parcelable { pw.print(proc.mNumExcessiveWake); pw.print(","); pw.print(proc.mNumExcessiveCpu); pw.print(","); pw.print(proc.mNumCachedKill); pw.print(","); pw.print(proc.mMinCachedKillPss); pw.print(":"); pw.print(proc.mAvgCachedKillPss); pw.print(":"); pw.print(proc.mMaxCachedKillPss); pw.println(); } } Loading Loading @@ -2090,7 +2106,8 @@ public final class ProcessStats implements Parcelable { dumpAllProcessPssCheckin(pw, procState); pw.println(); } if (procState.mNumExcessiveWake > 0 || procState.mNumExcessiveCpu > 0) { if (procState.mNumExcessiveWake > 0 || procState.mNumExcessiveCpu > 0 || procState.mNumCachedKill > 0) { pw.print("kills,"); pw.print(procName); pw.print(","); Loading @@ -2099,6 +2116,14 @@ public final class ProcessStats implements Parcelable { pw.print(procState.mNumExcessiveWake); pw.print(","); pw.print(procState.mNumExcessiveCpu); pw.print(","); pw.print(procState.mNumCachedKill); pw.print(","); pw.print(procState.mMinCachedKillPss); pw.print(":"); pw.print(procState.mAvgCachedKillPss); pw.print(":"); pw.print(procState.mMaxCachedKillPss); pw.println(); } } Loading Loading @@ -2135,6 +2160,11 @@ public final class ProcessStats implements Parcelable { int mNumExcessiveWake; int mNumExcessiveCpu; int mNumCachedKill; long mMinCachedKillPss; long mAvgCachedKillPss; long mMaxCachedKillPss; boolean mMultiPackage; boolean mDead; Loading Loading @@ -2200,6 +2230,10 @@ public final class ProcessStats implements Parcelable { } pnew.mNumExcessiveWake = mNumExcessiveWake; pnew.mNumExcessiveCpu = mNumExcessiveCpu; pnew.mNumCachedKill = mNumCachedKill; pnew.mMinCachedKillPss = mMinCachedKillPss; pnew.mAvgCachedKillPss = mAvgCachedKillPss; pnew.mMaxCachedKillPss = mMaxCachedKillPss; pnew.mActive = mActive; pnew.mNumStartedServices = mNumStartedServices; return pnew; Loading @@ -2226,6 +2260,10 @@ public final class ProcessStats implements Parcelable { } mNumExcessiveWake += other.mNumExcessiveWake; mNumExcessiveCpu += other.mNumExcessiveCpu; if (other.mNumCachedKill > 0) { addCachedKill(other.mNumCachedKill, other.mMinCachedKillPss, other.mAvgCachedKillPss, other.mMaxCachedKillPss); } } void resetSafely(long now) { Loading @@ -2238,6 +2276,8 @@ public final class ProcessStats implements Parcelable { mPssTableSize = 0; mNumExcessiveWake = 0; mNumExcessiveCpu = 0; mNumCachedKill = 0; mMinCachedKillPss = mAvgCachedKillPss = mMaxCachedKillPss = 0; } void makeDead() { Loading Loading @@ -2268,6 +2308,12 @@ public final class ProcessStats implements Parcelable { } out.writeInt(mNumExcessiveWake); out.writeInt(mNumExcessiveCpu); out.writeInt(mNumCachedKill); if (mNumCachedKill > 0) { out.writeLong(mMinCachedKillPss); out.writeLong(mAvgCachedKillPss); out.writeLong(mMaxCachedKillPss); } } boolean readFromParcel(Parcel in, boolean fully) { Loading @@ -2289,6 +2335,14 @@ public final class ProcessStats implements Parcelable { mPssTableSize = mPssTable != null ? mPssTable.length : 0; mNumExcessiveWake = in.readInt(); mNumExcessiveCpu = in.readInt(); mNumCachedKill = in.readInt(); if (mNumCachedKill > 0) { mMinCachedKillPss = in.readLong(); mAvgCachedKillPss = in.readLong(); mMaxCachedKillPss = in.readLong(); } else { mMinCachedKillPss = mAvgCachedKillPss = mMaxCachedKillPss = 0; } return true; } Loading Loading @@ -2502,6 +2556,37 @@ public final class ProcessStats implements Parcelable { } } private void addCachedKill(int num, long minPss, long avgPss, long maxPss) { if (mNumCachedKill <= 0) { mNumCachedKill = num; mMinCachedKillPss = minPss; mAvgCachedKillPss = avgPss; mMaxCachedKillPss = maxPss; } else { if (minPss < mMinCachedKillPss) { mMinCachedKillPss = minPss; } if (maxPss > mMaxCachedKillPss) { mMaxCachedKillPss = maxPss; } mAvgCachedKillPss = (long)( ((mAvgCachedKillPss*(double)mNumCachedKill) + avgPss) / (mNumCachedKill+num) ); mNumCachedKill += num; } } public void reportCachedKill(ArrayMap<String, ProcessState> pkgList, long pss) { ensureNotDead(); mCommonProcess.addCachedKill(1, pss, pss, pss); if (!mCommonProcess.mMultiPackage) { return; } for (int ip=pkgList.size()-1; ip>=0; ip--) { pullFixedProc(pkgList, ip).addCachedKill(1, pss, pss, pss); } } ProcessState pullFixedProc(String pkgName) { if (mMultiPackage) { // The array map is still pointing to a common process state Loading
services/java/com/android/server/AlarmManagerService.java +2 −1 Original line number Diff line number Diff line Loading @@ -470,7 +470,8 @@ class AlarmManagerService extends IAlarmManager.Stub { mTimeTickSender = PendingIntent.getBroadcastAsUser(context, 0, new Intent(Intent.ACTION_TIME_TICK).addFlags( Intent.FLAG_RECEIVER_REGISTERED_ONLY), 0, Intent.FLAG_RECEIVER_REGISTERED_ONLY | Intent.FLAG_RECEIVER_FOREGROUND), 0, UserHandle.ALL); Intent intent = new Intent(Intent.ACTION_DATE_CHANGED); intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING); Loading