19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage com.android.server.am; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19c8230519728b14065effd3b7d4eca273ff86160cDianne Hackbornimport android.util.ArraySet; 2089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackbornimport android.util.EventLog; 2189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackbornimport android.util.Slog; 22d2932243e3313b59e7538641731aa98852bc5ac7Dianne Hackbornimport com.android.internal.app.ProcessStats; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport com.android.internal.os.BatteryStatsImpl; 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.ActivityManager; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.Dialog; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.IApplicationThread; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.app.IInstrumentationWatcher; 2980943d8daa6ab31ab5c486d57aea406aa0730d58Svetoslav Ganovimport android.app.IUiAutomationConnection; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.ComponentName; 31c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackbornimport android.content.Context; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.pm.ApplicationInfo; 33e2515eebf42c763c0a2d9f873a153711778cfc17Dianne Hackbornimport android.content.res.CompatibilityInfo; 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Bundle; 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.IBinder; 36a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackbornimport android.os.Process; 371ebccf531d1049853b3b0630035434619682c016Dianne Hackbornimport android.os.SystemClock; 38f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackbornimport android.os.UserHandle; 39390517be2d60dd6e6264150c190c372d89bb331aDianne Hackbornimport android.util.ArrayMap; 401655be46d2b7d45f071a6a1411ac8bd41c749c21Dianne Hackbornimport android.util.PrintWriterPrinter; 411ebccf531d1049853b3b0630035434619682c016Dianne Hackbornimport android.util.TimeUtils; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.PrintWriter; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.ArrayList; 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Full information about a particular process that 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * is currently running. 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 50be4e6aaa0252dd7da28b7aa85beba982538efa46Dianne Hackbornfinal class ProcessRecord { 512cd3fb5aa71cd32cd67ddfaafaca8f85a7ac13c6Adam Lesinski private final BatteryStatsImpl mBatteryStats; // where to collect runtime statistics 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final ApplicationInfo info; // all about the first app in the process 53a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn final boolean isolated; // true if this is a special isolated process 54a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn final int uid; // uid of process; may be different from 'info' if isolated 55a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn final int userId; // user of process. 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String processName; // name of the process 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // List of packages running in the process 58f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn final ArrayMap<String, ProcessStats.ProcessStateHolder> pkgList 59f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn = new ArrayMap<String, ProcessStats.ProcessStateHolder>(); 60fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn ArraySet<String> pkgDeps; // additional packages we have a dependency on 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IApplicationThread thread; // the actual proc... may be null only if 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 'persistent' is true (in which case we 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // are in the process of launching the app) 64be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn ProcessStats.ProcessState baseProcessTracker; 65099bc627c463d9941e23e480f25a78a154429c55Dianne Hackborn BatteryStatsImpl.Uid.Proc curProcBatteryStats; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int pid; // The process of this application; 0 if none 67b3d4cb369e37b1b7e85832cc035226dc7cc8f380Dianne Hackborn int[] gids; // The gids this process was launched with 68b3d4cb369e37b1b7e85832cc035226dc7cc8f380Dianne Hackborn String requiredAbi; // The ABI this process was launched with 69b3d4cb369e37b1b7e85832cc035226dc7cc8f380Dianne Hackborn String instructionSet; // The instruction set this process was launched with 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean starting; // True if the process is being started 71dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn long lastActivityTime; // For managing the LRU list 72f1cca18ae460b66242988a8a6204c4a42b6fa1c1Dianne Hackborn long lastPssTime; // Last time we retrieved PSS data 73f1cca18ae460b66242988a8a6204c4a42b6fa1c1Dianne Hackborn long nextPssTime; // Next time we want to request PSS data 74f1cca18ae460b66242988a8a6204c4a42b6fa1c1Dianne Hackborn long lastStateTime; // Last time setProcState changed 7535f72be50b8a2d11bce591dcdac5dc3fa336dac0Dianne Hackborn long initialIdlePss; // Initial memory pss of process for idle maintenance. 7635f72be50b8a2d11bce591dcdac5dc3fa336dac0Dianne Hackborn long lastPss; // Last computed memory pss. 773bc8f78d7a3d23a67c06221cc41292d04a2fd439Dianne Hackborn long lastCachedPss; // Last computed pss when in cached state. 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int maxAdj; // Maximum OOM adjustment for this process 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int curRawAdj; // Current OOM unlimited adjustment for this process 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int setRawAdj; // Last set OOM unlimited adjustment for this process 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int curAdj; // Current OOM adjustment for this process 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int setAdj; // Last set OOM adjustment for this process 8306de2ea752171f52a4e6e6872cb3a0689e591dcbDianne Hackborn int curSchedGroup; // Currently desired scheduling class 8406de2ea752171f52a4e6e6872cb3a0689e591dcbDianne Hackborn int setSchedGroup; // Last set to background scheduling class 85ce86ba86df61de8b34b226a4eb6c23ec33e866e0Dianne Hackborn int trimMemoryLevel; // Last selected memory trimming level 86a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn int curProcState = -1; // Currently computed process state: ActivityManager.PROCESS_STATE_* 87a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn int repProcState = -1; // Last reported process state 88c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn int setProcState = -1; // Last set process state in process tracker 89f1cca18ae460b66242988a8a6204c4a42b6fa1c1Dianne Hackborn int pssProcState = -1; // The proc state we are currently requesting pss for 90e02c88af7935c72fb90a478375e61e4a94465587Dianne Hackborn boolean serviceb; // Process currently is on the service B list 91cbd9a52f256087426feb19ac6e51eff772e81375Dianne Hackborn boolean serviceHighRam; // We are forcing to service B list due to its RAM use 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean setIsForeground; // Running foreground UI when last set? 9335f72be50b8a2d11bce591dcdac5dc3fa336dac0Dianne Hackborn boolean notCachedSinceIdle; // Has this process not been in a cached state since last idle? 94b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn boolean hasClientActivities; // Are there any client services with activities? 952286cdc0cab77e61b75e6fe9a45b91f6e57cd46dDianne Hackborn boolean hasStartedServices; // Are there any started services running in this process? 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean foregroundServices; // Running any services that are foreground? 97d5cdd597b895a48ffa9a8e39f8a2504cd9b905c4Jeff Sharkey boolean foregroundActivities; // Running any activities that are foreground? 98684bf34ee8acc41931fac23762b13e14a22011dbDianne Hackborn boolean repForegroundActivities; // Last reported foreground activities. 99c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn boolean systemNoUi; // This is a system process, but not currently showing UI. 100f0754f5ba7a45b517cffcb3c2c96f2a32aeac06dDianne Hackborn boolean hasShownUi; // Has UI been shown in this process since it was started? 101c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn boolean pendingUiClean; // Want to clean up resources from showing UI? 102c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn boolean hasAboveClient; // Bound using BIND_ABOVE_CLIENT, so want to be lower 103f0f94d129b6eb3c48624e915898d86d4f2de59ffDianne Hackborn boolean treatLikeActivity; // Bound using BIND_TREAT_LIKE_ACTIVITY 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean bad; // True if disabled in the bad process list 10535f72be50b8a2d11bce591dcdac5dc3fa336dac0Dianne Hackborn boolean killedByAm; // True when proc has been killed by activity manager, not for RAM 106d412563922f46feb4d3c3ba1500f34bddd21d73cDianne Hackborn boolean killed; // True once we know the process has been killed 107c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn boolean procStateChanged; // Keep track of whether we changed 'setAdj'. 1089357b11a798b804b69907f93437229cac1d82468Dianne Hackborn String waitingToKill; // Process is waiting to be killed when in the bg, and reason 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IBinder forcingToForeground;// Token that is forcing this process to be foreground 110906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn int adjSeq; // Sequence id for identifying oom_adj assignment cycles 111906497c574d45d8dfd295b16dece0d0bc32c0895Dianne Hackborn int lruSeq; // Sequence id for identifying LRU update cycles 1128ea5e1d79eb1f05ee7628b0d45ea8fc8eea5330dDianne Hackborn CompatibilityInfo compat; // last used compatibility mode 1131b64e0d8657463c0f7ce9b068a16a522cdfe7d28Dianne Hackborn IBinder.DeathRecipient deathRecipient; // Who is watching for the death. 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComponentName instrumentationClass;// class installed to instrument app 1151655be46d2b7d45f071a6a1411ac8bd41c749c21Dianne Hackborn ApplicationInfo instrumentationInfo; // the application being instrumented 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String instrumentationProfileFile; // where to save profiling 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IInstrumentationWatcher instrumentationWatcher; // who is waiting 11880943d8daa6ab31ab5c486d57aea406aa0730d58Svetoslav Ganov IUiAutomationConnection instrumentationUiAutomationConnection; // Connection to use the UI introspection APIs. 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bundle instrumentationArguments;// as given to us 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComponentName instrumentationResultClass;// copy of instrumentationClass 1213f9dd287b99340efaaa257759e71a8f81b2ed113Jeff Brown boolean usingWrapper; // Set to true when process was launched with a wrapper attached 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project BroadcastRecord curReceiver;// receiver currently running in the app 1239adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn long lastWakeTime; // How long proc held wake lock at last check 124287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn long lastCpuTime; // How long proc has run CPU at last check 125287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn long curCpuTime; // How long proc has run CPU most recently 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long lastRequestedGc; // When we last asked the app to do a gc 127fd12af4e768fec852c4c5dfee3b9bd7403b4b347Dianne Hackborn long lastLowMemory; // When we last told the app that memory is low 128fd12af4e768fec852c4c5dfee3b9bd7403b4b347Dianne Hackborn boolean reportLowMemory; // Set to true when waiting to report low mem 129dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn boolean empty; // Is this an empty background process? 130be4e6aaa0252dd7da28b7aa85beba982538efa46Dianne Hackborn boolean cached; // Is this a cached process? 131de42bb61ad0e4947a38bdedfba6a20b5292025c3Dianne Hackborn String adjType; // Debugging: primary thing impacting oom_adj. 132dd9b82c283815747b75fe4434c65e4b6c9c9b54fDianne Hackborn int adjTypeCode; // Debugging: adj code to report to app. 133de42bb61ad0e4947a38bdedfba6a20b5292025c3Dianne Hackborn Object adjSource; // Debugging: option dependent object. 134fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn int adjSourceProcState; // Debugging: proc state of adjSource's process. 135de42bb61ad0e4947a38bdedfba6a20b5292025c3Dianne Hackborn Object adjTarget; // Debugging: target component impacting oom_adj. 136810c052d9b117217152c2a609ccec056a2a61d1ePrimiano Tucci Runnable crashHandler; // Optional local handler to be invoked in the process crash. 137810c052d9b117217152c2a609ccec056a2a61d1ePrimiano Tucci 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // contains HistoryRecord objects 13901e4cfc47d0a2c7e7ab383d2fb23224ec52c0301Dianne Hackborn final ArrayList<ActivityRecord> activities = new ArrayList<ActivityRecord>(); 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // all ServiceRecord running in this process 141c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn final ArraySet<ServiceRecord> services = new ArraySet<ServiceRecord>(); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // services that are currently executing code (need to remain foreground). 143c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn final ArraySet<ServiceRecord> executingServices 144c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn = new ArraySet<ServiceRecord>(); 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // All ConnectionRecord this process holds 146c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn final ArraySet<ConnectionRecord> connections 147c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn = new ArraySet<ConnectionRecord>(); 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // all IIntentReceivers that are registered from this process. 149c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn final ArraySet<ReceiverList> receivers = new ArraySet<ReceiverList>(); 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // class (String) -> ContentProviderRecord 151390517be2d60dd6e6264150c190c372d89bb331aDianne Hackborn final ArrayMap<String, ContentProviderRecord> pubProviders 152390517be2d60dd6e6264150c190c372d89bb331aDianne Hackborn = new ArrayMap<String, ContentProviderRecord>(); 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // All ContentProviderRecord process is using 1546ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn final ArrayList<ContentProviderConnection> conProviders 1556ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn = new ArrayList<ContentProviderConnection>(); 156bf36ee2b0c49241e073da14ee1e1a08b8550f3b9Dianne Hackborn 157bf36ee2b0c49241e073da14ee1e1a08b8550f3b9Dianne Hackborn boolean execServicesFg; // do we need to be executing services in the foreground? 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean persistent; // always keep this application running? 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean crashing; // are we in the process of crashing? 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Dialog crashDialog; // dialog being displayed due to crash. 16158d380d2af8079075e4773a3e5ca6c2820760e3dChristopher Tate boolean forceCrashReport; // suppress normal auto-dismiss of crash dialog & report UI? 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean notResponding; // does the app have a not responding dialog? 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Dialog anrDialog; // dialog being displayed due to app not resp. 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean removed; // has app package been removed from device? 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean debugging; // was app launched for debugging? 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean waitedForDebugger; // has process show wait for debugger dialog? 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Dialog waitDialog; // current wait for debugger dialog 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 169dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn String shortStringName; // caching of toShortString() result. 170f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn String stringName; // caching of toString() result. 171f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // These reports are generated & stored when an app gets into an error condition. 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // They will be "null" when all is OK. 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ActivityManager.ProcessErrorStateInfo crashingReport; 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ActivityManager.ProcessErrorStateInfo notRespondingReport; 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 177f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski // Who will be notified of the error. This is usually an activity in the 178f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski // app that installed the package. 179f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski ComponentName errorReportReceiver; 180f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void dump(PrintWriter pw, String prefix) { 1821ebccf531d1049853b3b0630035434619682c016Dianne Hackborn final long now = SystemClock.uptimeMillis(); 1831ebccf531d1049853b3b0630035434619682c016Dianne Hackborn 184a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn pw.print(prefix); pw.print("user #"); pw.print(userId); 185a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn pw.print(" uid="); pw.print(info.uid); 186a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn if (uid != info.uid) { 187a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn pw.print(" ISOLATED uid="); pw.print(uid); 188a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn } 189b3d4cb369e37b1b7e85832cc035226dc7cc8f380Dianne Hackborn pw.print(" gids={"); 190b3d4cb369e37b1b7e85832cc035226dc7cc8f380Dianne Hackborn if (gids != null) { 191b3d4cb369e37b1b7e85832cc035226dc7cc8f380Dianne Hackborn for (int gi=0; gi<gids.length; gi++) { 192b3d4cb369e37b1b7e85832cc035226dc7cc8f380Dianne Hackborn if (gi != 0) pw.print(", "); 193b3d4cb369e37b1b7e85832cc035226dc7cc8f380Dianne Hackborn pw.print(gids[gi]); 194b3d4cb369e37b1b7e85832cc035226dc7cc8f380Dianne Hackborn 195b3d4cb369e37b1b7e85832cc035226dc7cc8f380Dianne Hackborn } 196b3d4cb369e37b1b7e85832cc035226dc7cc8f380Dianne Hackborn } 197b3d4cb369e37b1b7e85832cc035226dc7cc8f380Dianne Hackborn pw.println("}"); 198b3d4cb369e37b1b7e85832cc035226dc7cc8f380Dianne Hackborn pw.print(prefix); pw.print("requiredAbi="); pw.print(requiredAbi); 199b3d4cb369e37b1b7e85832cc035226dc7cc8f380Dianne Hackborn pw.print(" instructionSet="); pw.println(instructionSet); 200f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn if (info.className != null) { 201f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(prefix); pw.print("class="); pw.println(info.className); 202f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn } 203f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn if (info.manageSpaceActivityName != null) { 204f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(prefix); pw.print("manageSpaceActivityName="); 205f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.println(info.manageSpaceActivityName); 206f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn } 207f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(prefix); pw.print("dir="); pw.print(info.sourceDir); 208f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(" publicDir="); pw.print(info.publicSourceDir); 209f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(" data="); pw.println(info.dataDir); 210cfc837f7fa43362b5049f648fe1bfdf5a010cc1cDianne Hackborn pw.print(prefix); pw.print("packageList={"); 211cfc837f7fa43362b5049f648fe1bfdf5a010cc1cDianne Hackborn for (int i=0; i<pkgList.size(); i++) { 212cfc837f7fa43362b5049f648fe1bfdf5a010cc1cDianne Hackborn if (i > 0) pw.print(", "); 213cfc837f7fa43362b5049f648fe1bfdf5a010cc1cDianne Hackborn pw.print(pkgList.keyAt(i)); 214cfc837f7fa43362b5049f648fe1bfdf5a010cc1cDianne Hackborn } 215cfc837f7fa43362b5049f648fe1bfdf5a010cc1cDianne Hackborn pw.println("}"); 216fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn if (pkgDeps != null) { 217fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn pw.print(prefix); pw.print("packageDependencies={"); 218fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn for (int i=0; i<pkgDeps.size(); i++) { 219fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn if (i > 0) pw.print(", "); 220fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn pw.print(pkgDeps.valueAt(i)); 221fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn } 222fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn pw.println("}"); 223fee756ff91ab4d8f0e09ddb050d22d88ebb66ae7Dianne Hackborn } 2248ea5e1d79eb1f05ee7628b0d45ea8fc8eea5330dDianne Hackborn pw.print(prefix); pw.print("compat="); pw.println(compat); 225f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn if (instrumentationClass != null || instrumentationProfileFile != null 226f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn || instrumentationArguments != null) { 227f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(prefix); pw.print("instrumentationClass="); 228f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(instrumentationClass); 229f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(" instrumentationProfileFile="); 230f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.println(instrumentationProfileFile); 231f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(prefix); pw.print("instrumentationArguments="); 232f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.println(instrumentationArguments); 2331655be46d2b7d45f071a6a1411ac8bd41c749c21Dianne Hackborn pw.print(prefix); pw.print("instrumentationInfo="); 2341655be46d2b7d45f071a6a1411ac8bd41c749c21Dianne Hackborn pw.println(instrumentationInfo); 2351655be46d2b7d45f071a6a1411ac8bd41c749c21Dianne Hackborn if (instrumentationInfo != null) { 2361655be46d2b7d45f071a6a1411ac8bd41c749c21Dianne Hackborn instrumentationInfo.dump(new PrintWriterPrinter(pw), prefix + " "); 2371655be46d2b7d45f071a6a1411ac8bd41c749c21Dianne Hackborn } 238f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn } 239b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn pw.print(prefix); pw.print("thread="); pw.println(thread); 240f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(prefix); pw.print("pid="); pw.print(pid); pw.print(" starting="); 241cfc837f7fa43362b5049f648fe1bfdf5a010cc1cDianne Hackborn pw.println(starting); 2421ebccf531d1049853b3b0630035434619682c016Dianne Hackborn pw.print(prefix); pw.print("lastActivityTime="); 2431ebccf531d1049853b3b0630035434619682c016Dianne Hackborn TimeUtils.formatDuration(lastActivityTime, now, pw); 2443bc8f78d7a3d23a67c06221cc41292d04a2fd439Dianne Hackborn pw.print(" lastPssTime="); 2453bc8f78d7a3d23a67c06221cc41292d04a2fd439Dianne Hackborn TimeUtils.formatDuration(lastPssTime, now, pw); 2463bc8f78d7a3d23a67c06221cc41292d04a2fd439Dianne Hackborn pw.print(" nextPssTime="); 2473bc8f78d7a3d23a67c06221cc41292d04a2fd439Dianne Hackborn TimeUtils.formatDuration(nextPssTime, now, pw); 2483bc8f78d7a3d23a67c06221cc41292d04a2fd439Dianne Hackborn pw.println(); 2493bc8f78d7a3d23a67c06221cc41292d04a2fd439Dianne Hackborn pw.print(prefix); pw.print("adjSeq="); pw.print(adjSeq); 2503bc8f78d7a3d23a67c06221cc41292d04a2fd439Dianne Hackborn pw.print(" lruSeq="); pw.print(lruSeq); 2513bc8f78d7a3d23a67c06221cc41292d04a2fd439Dianne Hackborn pw.print(" lastPss="); pw.print(lastPss); 2523bc8f78d7a3d23a67c06221cc41292d04a2fd439Dianne Hackborn pw.print(" lastCachedPss="); pw.println(lastCachedPss); 253fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn pw.print(prefix); pw.print("cached="); pw.print(cached); 254dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn pw.print(" empty="); pw.println(empty); 255cbd9a52f256087426feb19ac6e51eff772e81375Dianne Hackborn if (serviceb) { 256cbd9a52f256087426feb19ac6e51eff772e81375Dianne Hackborn pw.print(prefix); pw.print("serviceb="); pw.print(serviceb); 257cbd9a52f256087426feb19ac6e51eff772e81375Dianne Hackborn pw.print(" serviceHighRam="); pw.println(serviceHighRam); 258cbd9a52f256087426feb19ac6e51eff772e81375Dianne Hackborn } 25935f72be50b8a2d11bce591dcdac5dc3fa336dac0Dianne Hackborn if (notCachedSinceIdle) { 26035f72be50b8a2d11bce591dcdac5dc3fa336dac0Dianne Hackborn pw.print(prefix); pw.print("notCachedSinceIdle="); pw.print(notCachedSinceIdle); 2613bc8f78d7a3d23a67c06221cc41292d04a2fd439Dianne Hackborn pw.print(" initialIdlePss="); pw.println(initialIdlePss); 26235f72be50b8a2d11bce591dcdac5dc3fa336dac0Dianne Hackborn } 263f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(prefix); pw.print("oom: max="); pw.print(maxAdj); 264f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(" curRaw="); pw.print(curRawAdj); 265f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(" setRaw="); pw.print(setRawAdj); 266f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(" cur="); pw.print(curAdj); 267f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(" set="); pw.println(setAdj); 26806de2ea752171f52a4e6e6872cb3a0689e591dcbDianne Hackborn pw.print(prefix); pw.print("curSchedGroup="); pw.print(curSchedGroup); 269ce86ba86df61de8b34b226a4eb6c23ec33e866e0Dianne Hackborn pw.print(" setSchedGroup="); pw.print(setSchedGroup); 270c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn pw.print(" systemNoUi="); pw.print(systemNoUi); 271ce86ba86df61de8b34b226a4eb6c23ec33e866e0Dianne Hackborn pw.print(" trimMemoryLevel="); pw.println(trimMemoryLevel); 272a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn pw.print(prefix); pw.print("curProcState="); pw.print(curProcState); 273c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn pw.print(" repProcState="); pw.print(repProcState); 274f1cca18ae460b66242988a8a6204c4a42b6fa1c1Dianne Hackborn pw.print(" pssProcState="); pw.print(pssProcState); 275f1cca18ae460b66242988a8a6204c4a42b6fa1c1Dianne Hackborn pw.print(" setProcState="); pw.print(setProcState); 276f1cca18ae460b66242988a8a6204c4a42b6fa1c1Dianne Hackborn pw.print(" lastStateTime="); 277f1cca18ae460b66242988a8a6204c4a42b6fa1c1Dianne Hackborn TimeUtils.formatDuration(lastStateTime, now, pw); 278f1cca18ae460b66242988a8a6204c4a42b6fa1c1Dianne Hackborn pw.println(); 279f0f94d129b6eb3c48624e915898d86d4f2de59ffDianne Hackborn if (hasShownUi || pendingUiClean || hasAboveClient || treatLikeActivity) { 280b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn pw.print(prefix); pw.print("hasShownUi="); pw.print(hasShownUi); 281b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn pw.print(" pendingUiClean="); pw.print(pendingUiClean); 282f0f94d129b6eb3c48624e915898d86d4f2de59ffDianne Hackborn pw.print(" hasAboveClient="); pw.print(hasAboveClient); 283f0f94d129b6eb3c48624e915898d86d4f2de59ffDianne Hackborn pw.print(" treatLikeActivity="); pw.println(treatLikeActivity); 284b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn } 285b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn if (setIsForeground || foregroundServices || forcingToForeground != null) { 286b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn pw.print(prefix); pw.print("setIsForeground="); pw.print(setIsForeground); 287b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn pw.print(" foregroundServices="); pw.print(foregroundServices); 288b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn pw.print(" forcingToForeground="); pw.println(forcingToForeground); 289b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn } 290b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn if (persistent || removed) { 291b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn pw.print(prefix); pw.print("persistent="); pw.print(persistent); 292b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn pw.print(" removed="); pw.println(removed); 293b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn } 294684bf34ee8acc41931fac23762b13e14a22011dbDianne Hackborn if (hasClientActivities || foregroundActivities || repForegroundActivities) { 295db92608de9b4acccee1e3232264c9830ad300c4fDianne Hackborn pw.print(prefix); pw.print("hasClientActivities="); pw.print(hasClientActivities); 296684bf34ee8acc41931fac23762b13e14a22011dbDianne Hackborn pw.print(" foregroundActivities="); pw.print(foregroundActivities); 297684bf34ee8acc41931fac23762b13e14a22011dbDianne Hackborn pw.print(" (rep="); pw.print(repForegroundActivities); pw.println(")"); 298b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn } 2992286cdc0cab77e61b75e6fe9a45b91f6e57cd46dDianne Hackborn if (hasStartedServices) { 3002286cdc0cab77e61b75e6fe9a45b91f6e57cd46dDianne Hackborn pw.print(prefix); pw.print("hasStartedServices="); pw.println(hasStartedServices); 3012286cdc0cab77e61b75e6fe9a45b91f6e57cd46dDianne Hackborn } 302fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn if (setProcState >= ActivityManager.PROCESS_STATE_SERVICE) { 303287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn long wtime; 3042cd3fb5aa71cd32cd67ddfaafaca8f85a7ac13c6Adam Lesinski synchronized (mBatteryStats) { 3052cd3fb5aa71cd32cd67ddfaafaca8f85a7ac13c6Adam Lesinski wtime = mBatteryStats.getProcessWakeTime(info.uid, 306287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn pid, SystemClock.elapsedRealtime()); 307287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn } 308287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn pw.print(prefix); pw.print("lastWakeTime="); pw.print(lastWakeTime); 309b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn pw.print(" timeUsed="); 310fdb1956ff71ff57fcdaafaaeb7f42c19de3d7c2fDianne Hackborn TimeUtils.formatDuration(wtime-lastWakeTime, pw); pw.println(""); 311287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn pw.print(prefix); pw.print("lastCpuTime="); pw.print(lastCpuTime); 312b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn pw.print(" timeUsed="); 313287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn TimeUtils.formatDuration(curCpuTime-lastCpuTime, pw); pw.println(""); 314287952c35e148811c106bc0f5036eabf20f71562Dianne Hackborn } 3150d903a84d04d241a648ec429e3a0e82c712677fdDianne Hackborn pw.print(prefix); pw.print("lastRequestedGc="); 3161ebccf531d1049853b3b0630035434619682c016Dianne Hackborn TimeUtils.formatDuration(lastRequestedGc, now, pw); 3171ebccf531d1049853b3b0630035434619682c016Dianne Hackborn pw.print(" lastLowMemory="); 3181ebccf531d1049853b3b0630035434619682c016Dianne Hackborn TimeUtils.formatDuration(lastLowMemory, now, pw); 3199adb9c3b10991ef315c270993f4155709c8a232dDianne Hackborn pw.print(" reportLowMemory="); pw.println(reportLowMemory); 320d412563922f46feb4d3c3ba1500f34bddd21d73cDianne Hackborn if (killed || killedByAm || waitingToKill != null) { 321d412563922f46feb4d3c3ba1500f34bddd21d73cDianne Hackborn pw.print(prefix); pw.print("killed="); pw.print(killed); 322d412563922f46feb4d3c3ba1500f34bddd21d73cDianne Hackborn pw.print(" killedByAm="); pw.print(killedByAm); 3230c5001d776d56bae02a5cc2663286a125d99bc5eDianne Hackborn pw.print(" waitingToKill="); pw.println(waitingToKill); 324149427cd903f2100e3cc39bda41b831cd68bc553Dianne Hackborn } 325f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn if (debugging || crashing || crashDialog != null || notResponding 326f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn || anrDialog != null || bad) { 327f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(prefix); pw.print("debugging="); pw.print(debugging); 328f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(" crashing="); pw.print(crashing); 329f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(" "); pw.print(crashDialog); 330f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(" notResponding="); pw.print(notResponding); 331f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pw.print(" " ); pw.print(anrDialog); 332f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.print(" bad="); pw.print(bad); 333f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski 334f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski // crashing or notResponding is always set before errorReportReceiver 335f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski if (errorReportReceiver != null) { 336f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.print(" errorReportReceiver="); 337f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.print(errorReportReceiver.flattenToShortString()); 338f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski } 339f5b9c72022f574417862e064cc0fdd8ea2d846dcJacek Surazski pw.println(); 340f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn } 341f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn if (activities.size() > 0) { 3426ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn pw.print(prefix); pw.println("Activities:"); 3436ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn for (int i=0; i<activities.size(); i++) { 3446ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn pw.print(prefix); pw.print(" - "); pw.println(activities.get(i)); 3456ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn } 346f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn } 347f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn if (services.size() > 0) { 3486ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn pw.print(prefix); pw.println("Services:"); 349c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn for (int i=0; i<services.size(); i++) { 350c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn pw.print(prefix); pw.print(" - "); pw.println(services.valueAt(i)); 3516ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn } 352f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn } 353f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn if (executingServices.size() > 0) { 354bf36ee2b0c49241e073da14ee1e1a08b8550f3b9Dianne Hackborn pw.print(prefix); pw.print("Executing Services (fg="); 355bf36ee2b0c49241e073da14ee1e1a08b8550f3b9Dianne Hackborn pw.print(execServicesFg); pw.println(")"); 356c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn for (int i=0; i<executingServices.size(); i++) { 357c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn pw.print(prefix); pw.print(" - "); pw.println(executingServices.valueAt(i)); 3586ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn } 359f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn } 360f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn if (connections.size() > 0) { 3616ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn pw.print(prefix); pw.println("Connections:"); 362c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn for (int i=0; i<connections.size(); i++) { 363c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn pw.print(prefix); pw.print(" - "); pw.println(connections.valueAt(i)); 3646ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn } 365f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn } 366f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn if (pubProviders.size() > 0) { 3676ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn pw.print(prefix); pw.println("Published Providers:"); 368390517be2d60dd6e6264150c190c372d89bb331aDianne Hackborn for (int i=0; i<pubProviders.size(); i++) { 369390517be2d60dd6e6264150c190c372d89bb331aDianne Hackborn pw.print(prefix); pw.print(" - "); pw.println(pubProviders.keyAt(i)); 370390517be2d60dd6e6264150c190c372d89bb331aDianne Hackborn pw.print(prefix); pw.print(" -> "); pw.println(pubProviders.valueAt(i)); 3716ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn } 372f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn } 373f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn if (conProviders.size() > 0) { 3746ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn pw.print(prefix); pw.println("Connected Providers:"); 3756ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn for (int i=0; i<conProviders.size(); i++) { 3766ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn pw.print(prefix); pw.print(" - "); pw.println(conProviders.get(i).toShortString()); 3776ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn } 378f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn } 379b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn if (curReceiver != null) { 380b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn pw.print(prefix); pw.print("curReceiver="); pw.println(curReceiver); 381b12e1354f25f04e9c9a71da76c6fca858b7d39d0Dianne Hackborn } 382f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn if (receivers.size() > 0) { 3836ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn pw.print(prefix); pw.println("Receivers:"); 384c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn for (int i=0; i<receivers.size(); i++) { 385c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn pw.print(prefix); pw.print(" - "); pw.println(receivers.valueAt(i)); 3866ae8d1821822296df0606c9cd1c46708cc21cb58Dianne Hackborn } 387f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn } 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3902cd3fb5aa71cd32cd67ddfaafaca8f85a7ac13c6Adam Lesinski ProcessRecord(BatteryStatsImpl _batteryStats, ApplicationInfo _info, 391be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn String _processName, int _uid) { 3922cd3fb5aa71cd32cd67ddfaafaca8f85a7ac13c6Adam Lesinski mBatteryStats = _batteryStats; 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project info = _info; 394a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn isolated = _info.uid != _uid; 395a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn uid = _uid; 396f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn userId = UserHandle.getUserId(_uid); 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project processName = _processName; 398f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn pkgList.put(_info.packageName, new ProcessStats.ProcessStateHolder(_info.versionCode)); 399c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn maxAdj = ProcessList.UNKNOWN_ADJ; 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project curRawAdj = setRawAdj = -100; 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project curAdj = setAdj = -100; 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project persistent = false; 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project removed = false; 404f1cca18ae460b66242988a8a6204c4a42b6fa1c1Dianne Hackborn lastStateTime = lastPssTime = nextPssTime = SystemClock.uptimeMillis(); 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 407f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn public void setPid(int _pid) { 408f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn pid = _pid; 409dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn shortStringName = null; 410f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn stringName = null; 411f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn } 412be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn 413be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn public void makeActive(IApplicationThread _thread, ProcessStatsService tracker) { 414be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn if (thread == null) { 415be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn final ProcessStats.ProcessState origBase = baseProcessTracker; 416be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn if (origBase != null) { 417be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn origBase.setState(ProcessStats.STATE_NOTHING, 418be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn tracker.getMemFactorLocked(), SystemClock.uptimeMillis(), pkgList); 419be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn origBase.makeInactive(); 420be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn } 421be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn baseProcessTracker = tracker.getProcessStateLocked(info.packageName, info.uid, 4228472e6189cd4e0520c047bdb28457abc728b373fDianne Hackborn info.versionCode, processName); 423be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn baseProcessTracker.makeActive(); 424be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn for (int i=0; i<pkgList.size(); i++) { 425f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn ProcessStats.ProcessStateHolder holder = pkgList.valueAt(i); 426f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn if (holder.state != null && holder.state != origBase) { 427f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn holder.state.makeInactive(); 428be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn } 429f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn holder.state = tracker.getProcessStateLocked(pkgList.keyAt(i), info.uid, 4308472e6189cd4e0520c047bdb28457abc728b373fDianne Hackborn info.versionCode, processName); 431f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn if (holder.state != baseProcessTracker) { 432f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn holder.state.makeActive(); 433be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn } 434be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn } 435be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn } 436be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn thread = _thread; 437be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn } 438be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn 439be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn public void makeInactive(ProcessStatsService tracker) { 44053459a7020dbcd036e2d3418e35ebb96fadc29e3Dianne Hackborn thread = null; 44153459a7020dbcd036e2d3418e35ebb96fadc29e3Dianne Hackborn final ProcessStats.ProcessState origBase = baseProcessTracker; 44253459a7020dbcd036e2d3418e35ebb96fadc29e3Dianne Hackborn if (origBase != null) { 443be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn if (origBase != null) { 444be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn origBase.setState(ProcessStats.STATE_NOTHING, 445be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn tracker.getMemFactorLocked(), SystemClock.uptimeMillis(), pkgList); 446be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn origBase.makeInactive(); 447be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn } 448be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn baseProcessTracker = null; 449be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn for (int i=0; i<pkgList.size(); i++) { 450f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn ProcessStats.ProcessStateHolder holder = pkgList.valueAt(i); 451f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn if (holder.state != null && holder.state != origBase) { 452f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn holder.state.makeInactive(); 453be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn } 454f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn holder.state = null; 455be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn } 456be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn } 457be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn } 458be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * This method returns true if any of the activities within the process record are interesting 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * to the user. See HistoryRecord.isInterestingToUserLocked() 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public boolean isInterestingToUserLocked() { 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final int size = activities.size(); 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0 ; i < size ; i++) { 46601e4cfc47d0a2c7e7ab383d2fb23224ec52c0301Dianne Hackborn ActivityRecord r = activities.get(i); 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (r.isInterestingToUserLocked()) { 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void stopFreezingAllLocked() { 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int i = activities.size(); 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project while (i > 0) { 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project i--; 478860755faa6bdd3c2aeae49c05b87b5bc080ae60cDianne Hackborn activities.get(i).stopFreezingScreenLocked(true); 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4821b64e0d8657463c0f7ce9b068a16a522cdfe7d28Dianne Hackborn public void unlinkDeathRecipient() { 4831b64e0d8657463c0f7ce9b068a16a522cdfe7d28Dianne Hackborn if (deathRecipient != null && thread != null) { 4841b64e0d8657463c0f7ce9b068a16a522cdfe7d28Dianne Hackborn thread.asBinder().unlinkToDeath(deathRecipient, 0); 4851b64e0d8657463c0f7ce9b068a16a522cdfe7d28Dianne Hackborn } 4861b64e0d8657463c0f7ce9b068a16a522cdfe7d28Dianne Hackborn deathRecipient = null; 4871b64e0d8657463c0f7ce9b068a16a522cdfe7d28Dianne Hackborn } 4881b64e0d8657463c0f7ce9b068a16a522cdfe7d28Dianne Hackborn 489c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn void updateHasAboveClientLocked() { 490c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn hasAboveClient = false; 491c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn for (int i=connections.size()-1; i>=0; i--) { 492c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn ConnectionRecord cr = connections.valueAt(i); 493c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn if ((cr.flags&Context.BIND_ABOVE_CLIENT) != 0) { 494c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn hasAboveClient = true; 495c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn break; 496c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn } 497c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn } 498c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn } 499c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn 500c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn int modifyRawOomAdj(int adj) { 501c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn if (hasAboveClient) { 502c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn // If this process has bound to any services with BIND_ABOVE_CLIENT, 503c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn // then we need to drop its adjustment to be lower than the service's 504c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn // in order to honor the request. We want to drop it by one adjustment 505c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn // level... but there is special meaning applied to various levels so 506c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn // we will skip some of them. 507c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn if (adj < ProcessList.FOREGROUND_APP_ADJ) { 508c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn // System process will not get dropped, ever 509c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn } else if (adj < ProcessList.VISIBLE_APP_ADJ) { 510c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn adj = ProcessList.VISIBLE_APP_ADJ; 511c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn } else if (adj < ProcessList.PERCEPTIBLE_APP_ADJ) { 512c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn adj = ProcessList.PERCEPTIBLE_APP_ADJ; 513c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn } else if (adj < ProcessList.CACHED_APP_MIN_ADJ) { 514c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn adj = ProcessList.CACHED_APP_MIN_ADJ; 515c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn } else if (adj < ProcessList.CACHED_APP_MAX_ADJ) { 516c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn adj++; 517c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 518c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 519c8230519728b14065effd3b7d4eca273ff86160cDianne Hackborn return adj; 520c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn } 521c68c913d357e2955d4bd7ca52829071e531c7825Dianne Hackborn 52289ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn void kill(String reason, boolean noisy) { 52389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn if (!killedByAm) { 52489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn if (noisy) { 52589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn Slog.i(ActivityManagerService.TAG, "Killing " + toShortString() + " (adj " + setAdj 52689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn + "): " + reason); 52789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 52889ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn EventLog.writeEvent(EventLogTags.AM_KILL, userId, pid, processName, setAdj, reason); 52989ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn Process.killProcessQuiet(pid); 53089ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn Process.killProcessGroup(info.uid, pid); 53189ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn if (!persistent) { 532d412563922f46feb4d3c3ba1500f34bddd21d73cDianne Hackborn killed = true; 53389ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn killedByAm = true; 53489ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 53589ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 53689ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn } 53789ad456ea49cb62615ebdcac83a2515743bbe5faDianne Hackborn 538dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn public String toShortString() { 539dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn if (shortStringName != null) { 540dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn return shortStringName; 541f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn } 542f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn StringBuilder sb = new StringBuilder(128); 543dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn toShortString(sb); 544dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn return shortStringName = sb.toString(); 545dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn } 546dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn 547dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn void toShortString(StringBuilder sb) { 548f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn sb.append(pid); 549f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn sb.append(':'); 550f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn sb.append(processName); 551f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn sb.append('/'); 552a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn if (info.uid < Process.FIRST_APPLICATION_UID) { 553a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn sb.append(uid); 554a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn } else { 555a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn sb.append('u'); 556a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn sb.append(userId); 557a4cc205ee840a5374a96c9635dc5121d82a3eaf9Dianne Hackborn int appId = UserHandle.getAppId(info.uid); 558a4cc205ee840a5374a96c9635dc5121d82a3eaf9Dianne Hackborn if (appId >= Process.FIRST_APPLICATION_UID) { 559a4cc205ee840a5374a96c9635dc5121d82a3eaf9Dianne Hackborn sb.append('a'); 560a4cc205ee840a5374a96c9635dc5121d82a3eaf9Dianne Hackborn sb.append(appId - Process.FIRST_APPLICATION_UID); 561a4cc205ee840a5374a96c9635dc5121d82a3eaf9Dianne Hackborn } else { 562a4cc205ee840a5374a96c9635dc5121d82a3eaf9Dianne Hackborn sb.append('s'); 563a4cc205ee840a5374a96c9635dc5121d82a3eaf9Dianne Hackborn sb.append(appId); 564a4cc205ee840a5374a96c9635dc5121d82a3eaf9Dianne Hackborn } 565a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn if (uid != info.uid) { 566a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn sb.append('i'); 567f02b60aa4f367516f40cf3d60fffae0c6fe3e1b8Dianne Hackborn sb.append(UserHandle.getAppId(uid) - Process.FIRST_ISOLATED_UID); 568a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn } 569a0c283eac33dd2da72235751bbfa4f2d9898d5eaDianne Hackborn } 570dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn } 571dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn 572dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn public String toString() { 573dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn if (stringName != null) { 574dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn return stringName; 575dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn } 576dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn StringBuilder sb = new StringBuilder(128); 577dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn sb.append("ProcessRecord{"); 578ce86ba86df61de8b34b226a4eb6c23ec33e866e0Dianne Hackborn sb.append(Integer.toHexString(System.identityHashCode(this))); 579ce86ba86df61de8b34b226a4eb6c23ec33e866e0Dianne Hackborn sb.append(' '); 580dd71fc8baeee0d09008d0fa67d6bf3d23cf21baaDianne Hackborn toShortString(sb); 581f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn sb.append('}'); 582f210d6b75e2c0fe60b90c074ff9f615c1137f23eDianne Hackborn return stringName = sb.toString(); 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5849210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn 5859210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn public String makeAdjReason() { 5869210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn if (adjSource != null || adjTarget != null) { 5878e69257a9c7e9c1781e1f53d8856358ada38921dDianne Hackborn StringBuilder sb = new StringBuilder(128); 5889210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn sb.append(' '); 5899210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn if (adjTarget instanceof ComponentName) { 5909210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn sb.append(((ComponentName)adjTarget).flattenToShortString()); 5919210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn } else if (adjTarget != null) { 5929210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn sb.append(adjTarget.toString()); 5939210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn } else { 5949210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn sb.append("{null}"); 5959210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn } 5969210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn sb.append("<="); 5979210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn if (adjSource instanceof ProcessRecord) { 5989210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn sb.append("Proc{"); 5999210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn sb.append(((ProcessRecord)adjSource).toShortString()); 6009210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn sb.append("}"); 6019210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn } else if (adjSource != null) { 6029210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn sb.append(adjSource.toString()); 6039210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn } else { 6049210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn sb.append("{null}"); 6059210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn } 6068e69257a9c7e9c1781e1f53d8856358ada38921dDianne Hackborn return sb.toString(); 6079210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn } 6088e69257a9c7e9c1781e1f53d8856358ada38921dDianne Hackborn return null; 6099210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn } 6109210bc85545f31973c957b5179e6a82d05f473c6Dianne Hackborn 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Return true if package has been added false if not 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 614f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn public boolean addPackage(String pkg, int versionCode, ProcessStatsService tracker) { 61578a369c90f61981c9d0ddd5fcbc77202bfbe74f6Dianne Hackborn if (!pkgList.containsKey(pkg)) { 6163251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn ProcessStats.ProcessStateHolder holder = new ProcessStats.ProcessStateHolder( 6173251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn versionCode); 61853459a7020dbcd036e2d3418e35ebb96fadc29e3Dianne Hackborn if (baseProcessTracker != null) { 619f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn holder.state = tracker.getProcessStateLocked( 620f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn pkg, info.uid, versionCode, processName); 621f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn pkgList.put(pkg, holder); 622f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn if (holder.state != baseProcessTracker) { 623f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn holder.state.makeActive(); 62453459a7020dbcd036e2d3418e35ebb96fadc29e3Dianne Hackborn } 62553459a7020dbcd036e2d3418e35ebb96fadc29e3Dianne Hackborn } else { 6263251b9075246841a7b1ddecf10859b1abd858f33Dianne Hackborn pkgList.put(pkg, holder); 62753459a7020dbcd036e2d3418e35ebb96fadc29e3Dianne Hackborn } 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 63278a369c90f61981c9d0ddd5fcbc77202bfbe74f6Dianne Hackborn 6332286cdc0cab77e61b75e6fe9a45b91f6e57cd46dDianne Hackborn public int getSetAdjWithServices() { 63420cdcee47d10986969e7e2a53a40a6ecabae3827Dianne Hackborn if (setAdj >= ProcessList.CACHED_APP_MIN_ADJ) { 63520cdcee47d10986969e7e2a53a40a6ecabae3827Dianne Hackborn if (hasStartedServices) { 63620cdcee47d10986969e7e2a53a40a6ecabae3827Dianne Hackborn return ProcessList.SERVICE_B_ADJ; 63720cdcee47d10986969e7e2a53a40a6ecabae3827Dianne Hackborn } 6382286cdc0cab77e61b75e6fe9a45b91f6e57cd46dDianne Hackborn } 6392286cdc0cab77e61b75e6fe9a45b91f6e57cd46dDianne Hackborn return setAdj; 6402286cdc0cab77e61b75e6fe9a45b91f6e57cd46dDianne Hackborn } 6412286cdc0cab77e61b75e6fe9a45b91f6e57cd46dDianne Hackborn 642a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn public void forceProcessStateUpTo(int newState) { 643a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn if (repProcState > newState) { 644a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn curProcState = repProcState = newState; 645a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn } 646a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn } 647a413dc06b2193442a2d956571b829aeb5fb97862Dianne Hackborn 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /* 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Delete all packages from list except the package indicated in info 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 651d2932243e3313b59e7538641731aa98852bc5ac7Dianne Hackborn public void resetPackageList(ProcessStatsService tracker) { 652be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn final int N = pkgList.size(); 653e56c2c3f059b24c968a3f28f701b6b6cf5883fd9Dianne Hackborn if (baseProcessTracker != null) { 654e56c2c3f059b24c968a3f28f701b6b6cf5883fd9Dianne Hackborn long now = SystemClock.uptimeMillis(); 655e56c2c3f059b24c968a3f28f701b6b6cf5883fd9Dianne Hackborn baseProcessTracker.setState(ProcessStats.STATE_NOTHING, 656e56c2c3f059b24c968a3f28f701b6b6cf5883fd9Dianne Hackborn tracker.getMemFactorLocked(), now, pkgList); 657e56c2c3f059b24c968a3f28f701b6b6cf5883fd9Dianne Hackborn if (N != 1) { 658e56c2c3f059b24c968a3f28f701b6b6cf5883fd9Dianne Hackborn for (int i=0; i<N; i++) { 659f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn ProcessStats.ProcessStateHolder holder = pkgList.valueAt(i); 660f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn if (holder.state != null && holder.state != baseProcessTracker) { 661f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn holder.state.makeInactive(); 662e56c2c3f059b24c968a3f28f701b6b6cf5883fd9Dianne Hackborn } 663be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn 664e56c2c3f059b24c968a3f28f701b6b6cf5883fd9Dianne Hackborn } 665e56c2c3f059b24c968a3f28f701b6b6cf5883fd9Dianne Hackborn pkgList.clear(); 666e56c2c3f059b24c968a3f28f701b6b6cf5883fd9Dianne Hackborn ProcessStats.ProcessState ps = tracker.getProcessStateLocked( 6678472e6189cd4e0520c047bdb28457abc728b373fDianne Hackborn info.packageName, info.uid, info.versionCode, processName); 668f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn ProcessStats.ProcessStateHolder holder = new ProcessStats.ProcessStateHolder( 669f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn info.versionCode); 670f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn holder.state = ps; 671f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn pkgList.put(info.packageName, holder); 67253459a7020dbcd036e2d3418e35ebb96fadc29e3Dianne Hackborn if (ps != baseProcessTracker) { 673e56c2c3f059b24c968a3f28f701b6b6cf5883fd9Dianne Hackborn ps.makeActive(); 674e56c2c3f059b24c968a3f28f701b6b6cf5883fd9Dianne Hackborn } 675be4c1d74a758f40de25e796a991ccfd1fe356857Dianne Hackborn } 676e56c2c3f059b24c968a3f28f701b6b6cf5883fd9Dianne Hackborn } else if (N != 1) { 677cfc837f7fa43362b5049f648fe1bfdf5a010cc1cDianne Hackborn pkgList.clear(); 678f7097a5b697fedb6976774e55a51471405a23c0eDianne Hackborn pkgList.put(info.packageName, new ProcessStats.ProcessStateHolder(info.versionCode)); 67978a369c90f61981c9d0ddd5fcbc77202bfbe74f6Dianne Hackborn } 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public String[] getPackageList() { 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int size = pkgList.size(); 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (size == 0) { 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 6869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String list[] = new String[size]; 68878a369c90f61981c9d0ddd5fcbc77202bfbe74f6Dianne Hackborn for (int i=0; i<pkgList.size(); i++) { 68978a369c90f61981c9d0ddd5fcbc77202bfbe74f6Dianne Hackborn list[i] = pkgList.keyAt(i); 69078a369c90f61981c9d0ddd5fcbc77202bfbe74f6Dianne Hackborn } 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return list; 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 694