Commit Graph

1024 Commits

Author SHA1 Message Date
Dianne Hackborn
8585d688f8 Fix issue #9913990: Background processes are being added to...
...the *end* of the process LRU listB

Change-Id: I75c9477b81e10c4e517fd836304467fb3f7ed85e
2013-07-18 15:41:02 -07:00
Dianne Hackborn
cdae0f3c60 Merge "Switch proc stats to use new process state constants." 2013-07-16 18:15:09 +00:00
Rom Lemarchand
0a880d0402 Merge "Increase swappiness of processes when memcgroups are enabled" 2013-07-16 02:32:13 +00:00
Dianne Hackborn
c823051972 Switch proc stats to use new process state constants.
These new constants are a better mapping to the kind of
information that procstats is wanting to collect about
processes.  In doing this, the process states are tweaked
to have a bit more information that we care about for
procstats.

This changes the format of the data printed by procstats,
so the checkin version is bumped to 2.  The structure is
the same, however the codes for process states have all
changed.  The new codes are, in order of precedence:

p -- persistent system process.
t -- top activity; actually any visible activity.
f -- important foreground process (ime, wallpaper, etc).
b -- important background process
u -- performing backup operation.
w -- heavy-weight process (currently not used).
s -- background process running a service.
r -- process running a receiver.
h -- process hosting home/launcher app when not on top.
l -- process hosting the last app the user was in.
a -- cached process hosting a previous activity.
c -- cached process hosting a client activity.
e -- cached process that is empty.

In addition, we are now collecting uss along with pss
data for each process, so the pss checkin entries now
have three new values at the end of the min/avg/max uss
values of that process.

With this switch to using process state constants more
fundamentally, I realized that they could actually be
used by the core oom adj code to make it a lot cleaner.
So that change has been made, that code has changed quite
radically, and lost a lot of its secondary states and flags
that it used to use in its computation, now relying on
primarily the oom_adj and proc state values for the process.

This also cleaned up a few problems -- for example for
purposes of determing the memory level of the device, if a
long-running service dropped into the cached oom_adj level,
it would start being counted as a cached process and thus
make us think that the memory state is better than it is.
Now we do this based on the proc state, which always stays
as a service regardless of what is happening like this, giving
as a more consistent view of the memory state of the device.

Making proc state a more fundamentally part of the oom adj
computation means that the values can also be more carefully
tuned in semantic meaning so the value assigned to a process
doesn't tend to change unless the semantics of the process
has really significantly changed.

For example, a process will be assigned the service state
regardless of whether that services is executing operations
in the foreground, running normally, or has been dropped to
the lru list for pruning.  The top state is used for everything
related to activities visible to the user: when actually on
top, visible but not on top, currently pausing, etc.

There is a new Context.BIND_SHOWING_UI added for when system
services bind to apps, to explicitly indicate that the app
is showing UI for the system.  This gives us a better metric
to determine when it is showing UI, and thus when it needs
to do a memory trim when it is no longer in that state.  Without
this, services could get in bad states of continually trimming.

Finally, more HashSet containers have been changed to ArraySet,
reducing the temporary iterators created for iterating over
them.

Change-Id: I1724113f42abe7862e8aecb6faae5a7620245e89
2013-07-15 16:21:35 -07:00
Rom Lemarchand
5534ba91ac Increase swappiness of processes when memcgroups are enabled
When memcgroups are enabled, migrate heavier and lower priority processes
to the sw memcgroup.

Change-Id: Iba07a723037a599736ef23dea16a30a26634428a
2013-07-15 13:19:27 -07:00
Dianne Hackborn
a413dc06b2 Add new proc state constants and delivery.
The activity manager now keeps a new "process state" for
each process, indicating the general execution and memory
state of the process.  This closely follows the out-of-memory
adjustment and scheduling class that it currently tracks,
but roles these together (plus a little more info) into one
more semantically meaningful number.

This value is reported to each process as it changes, so they
can do things like tune the Dalvik garbage collector to match
the current process state.

I think I should also switch to this for process states.  It
will give is more meaningful divisions of time for each process.

Also fix a problem in the activity stack where the previous
process was not being set correctly when moving between
activity stacks.

Change-Id: I598b1667dc46547f8fadae304e210c352cc9d41f
2013-07-12 18:14:46 -07:00
Dianne Hackborn
9865ef1ba5 Merge "Add -c option to meminfo to dump a compact form." 2013-07-11 02:03:33 +00:00
Dianne Hackborn
20cdcee47d Add -c option to meminfo to dump a compact form.
Also fix a bug in FastPrintWriter where println(long) was
not printing the newline.

Change-Id: Idcb4eaab0c1ec4b992032b5e36478ef11a6533d9
2013-07-10 18:47:04 -07:00
Craig Mautner
fb20eb48aa Merge "Add convertToTranslucent to API." 2013-07-10 21:52:28 +00:00
Craig Mautner
5eda9b3301 Add convertToTranslucent to API.
Rename convertToOpaque to convertFromTranslucent. Add the
counterpart to Activity.convertFromTranslucent() for returning from
opaque to a translucent Activity. The caller should wait until
TranslucentConversionListener.onTranslucentConversionComplete() is
called before actually changing the background to translucent.

Change-Id: Id04b026bcc4dd8bad9a33a7af126e1bb28fb9c03
2013-07-09 14:50:12 -07:00
Dianne Hackborn
a4cc205ee8 More procstats work.
The historical data is now a more central part of the stats.
When a checkin happens, the data is not deleted, just marked
as checked in so we can continue to access it.

The default procstats dump is now a new "summary" mode that
shows a more useful set of data for all of the running processes.
By default the current and all committed states are shown; you
use "--current" to only show the current.  Use "--details" to
get the previous more detailed data (which now includes detailed
process data like the per-package data).

Also tweaked uid printing to be a little more compact.

Change-Id: I5414ea7c07134ebd5dc83f6f7b9f6e30151eda85
2013-07-08 18:06:24 -07:00
Craig Mautner
785a22188f Merge "Move mLaunchingActivity from stack to supervisor." 2013-07-08 18:46:05 +00:00
Craig Mautner
7ea5bd497f Move mLaunchingActivity from stack to supervisor.
There did not need to be one launching wakelock for each stack.
Moving it to the stack supervisor makes the logic much simpler
and fixes bug 9693439.

Change-Id: I5c9ae856540170a4d66fedb74becb6959c44dd8f
2013-07-05 15:27:08 -07:00
Dianne Hackborn
169c8038dd Improve how procstats history/checkins are managed.
We now keep a small set of historic procstats data.  Each
time you reboot a new set of data is created; each day a
new set of data is created.  At most 5 sets of historic data
are kept at a time.  Each checkin only prints any existing
historic data (and deletes it); checkins do not include the
current data, to keep the checkin data less noisy.

This requires a bunch of re-arranging of the way state is
maintained to allow the multiple files, and loading and
processing state from old files.  Also fixed some problems
with writing/reading state.

The checkin format has been tweaked.  There is a new "period"
line that tells you (1) the date/time stamp of the data,
(2) the device realtime data collection started, (3) the
device realtime data collection finished.  The difference
between the last two give you the real time duration for
which the data was collected.

Also, the third field of pkgproc and pkgsvc-*  can now be
abbreviated: if it is the same as the package name, it is
empty; if it is a suffix fo the package name it starts with
'.'.

Change-Id: I422875fccb627d95df7e36c183ac90056f273d83
2013-07-03 15:47:09 -07:00
Dianne Hackborn
2286cdc0ca Misc memory stuff.
- New Activity.reportFullyDrawn() method that applicatins can call
  when they know they are fully drawn, allowing us to have better
  app launch time info.  This data is also included in usage stats.
- Added total and free memory data "dumpsys meminfo".
- Tuned the moderate memory levels to be more aggressive about
  considering the device getting low on RAM, and thus starting
  to prune RAM from processes.
- Fixed issues in processstats when reading old data as well as
  resetting and other various fixes.

Change-Id: I20efe7451afb4edfa1aeec448328ba601c24d869
2013-07-02 11:21:04 -07:00
Dianne Hackborn
0d71de27b0 Fix issue #9611000: Random run-time restarts
Change-Id: I776f5e2434b81063780adf247fbd6db7f90c79c2
2013-07-01 11:40:46 -07:00
Dianne Hackborn
904a857d5a More work on procstats: save/restore state, fixes.
We now persistent the current procstats to storage
to keep them across boots.  Still need to do division
and pruning across days; right now they will just keep
collecting forever.

Also fix some bugs in the checkin output.

Change-Id: I4dd9317dbe2ee0642af8f2f0be1f2bd9c4055e80
2013-06-28 18:45:46 -07:00
Dianne Hackborn
2179a522d3 Merge "Start really collecting PSS data for process stats." 2013-06-28 01:59:24 +00:00
Dianne Hackborn
cfc837f7fa Start really collecting PSS data for process stats.
The activity manager now uses some heuristics to try to
sample PSS data from processes so that it can get enough
data to over reasonable time have something useful, without
doing it too aggressively.

The current policy is:

1. Whenever a significant global change happens (memory state,
   sceen on or off), we collect PSS from all processes; this will
   not happen more than every 10 minutes.
2. When all activities become idle, we will collect PSS from the
   current top process; this will not happen more than every 2
   minutes per process.
3. We will sample the top-most process's PSS every 5 minutes.
4. When an process's oom adj changes and it has been more than
   30 minutes since PSS has been collected from it, we will
   collect a new PSS sample.
5. If a process changes from service A to service B (meaning it
   has been running a service for a long time), we will collect
   a PSS sample from it.
6. If someone explicitly requests PSS data (for running services
   UI or dumpsys), record that.

Also:

- Finish moving the procstats output all to the new format.
- Record information about processes being killed due to excessive
  wake locks or CPU use in procstats.
- Rework how we structure common vs. per-package process stats to
  make it simpler to deal with.
- Optimize the Debug.getPss() implementation (we use it a lot now).
  Should probably optimize it further at some point.

Change-Id: I179f1f7ae5852c7e567de4127d8457b50d27e0f0
2013-06-27 18:56:00 -07:00
Craig Mautner
5729b81ab5 Merge "Add API to convert translucent Activity to opaque." 2013-06-27 21:00:44 +00:00
Dianne Hackborn
97e1d53d36 Merge "Fix issue #9586838: Crash after waking up Hammerhead device" 2013-06-27 20:25:59 +00:00
Dianne Hackborn
ebe830683e Fix issue #9586838: Crash after waking up Hammerhead device
Change-Id: I114306871f02b2461619e8a1cc9652f343edd117
2013-06-27 12:42:13 -07:00
Craig Mautner
8cbafbe6d2 Merge "Add debug for specific bug." 2013-06-27 19:29:05 +00:00
Craig Mautner
e7c58b6d7d Add debug for specific bug.
To be removed once the bug is fixed.

Change-Id: Ie273d4503bb0b534af0e9efe8f45c573766e9a74
2013-06-27 11:52:04 -07:00
Dianne Hackborn
053f61d6a6 Work on issue #9586838: Crash after waking up Hammerhead device
I made the power manager more rigid, not allowing different uids
to use the same wake lock.  This never should happen.  I would
guess there is somewhere that the activity manager is acquiring
the wake lock without clearing the calling identity...  but it is
hard to follow all the paths this may happen in.  So here we add
some checks when acquiring/releasing the wake lock to make sure
it is being done as the system uid.

Also:

- Protect the new activity stack calls with a permission, and
make sure to clear the calling uid once past that.
- Collect uid data from process stats so we can correctly
associate CPU use with a uid even if we don't know about the
pid for some reason.
- Fix battery stats dump commands to clear calling uid before
executing so they aren't broken.

Change-Id: I0030d4f7b614e3270d794ecfc3669139a5703ce9
2013-06-26 19:17:15 -07:00
Dianne Hackborn
13ac041b9f Update procstats to start collecting/reporting pss.
Completely reworked how it manages its data, since trying
to keep track of all of the possible pss data with the old
data structures would have made it huge.  Now we have a sparse
data structure for pss and process times.  (Will switch service
times over to it soon.)

Currently the only thing that collects pss data is running
"dumpsys meminfo".  More will be added later.

Modified checkin output to also scale better as more distinct
data categories are added, and added output of pss data.  Now
instead of dumping every possible entry as a comma-separated
list, it dumps a comma-separated list of only the entries with
data, tagged with the state they go with.

Also fixed some problems in the checkin reporting of batterystats
(it needs to escape commas), added checkin reporting of the history
list, fixed parsing of kernel wake locks to strip quotes, fixed
wake lock name that the sync manager generates to be more sane.

Change-Id: Ibf4010838a9f685ebe1d93aff86c064ccc52b861
2013-06-26 11:45:36 -07:00
Craig Mautner
4addfc5f39 Add API to convert translucent Activity to opaque.
Fixes bug 9298778.

Change-Id: If6198f42bdea8aa727a2abc672eb0062aaf63ca3
2013-06-25 16:56:37 -07:00
Dianne Hackborn
8c84109b9f Use FastPrintWriter... everywhere.
One problem this turned up is, because FastPrintWriter does
its own buffering, a lot of code that used to use PrintWriter
would fail -- if it pointed to a StringWriter, there was no
buffering, so it could just immediately get the result.  Now
you need to first flush the FastPrintWriter.

Also added some new constructors to specify the size of buffer
that FastPrintWriter should use.

Change-Id: If48cd28d7be0b6b3278bbb69a8357e6ce88cf54a
2013-06-24 18:16:48 -07:00
Dianne Hackborn
a17c0f5e16 More procstats work: separate global proc account, more dumping.
We now keep track of the time actually process run independently
of the time packages run in process, so we can give an accurate
summary of how long each physical process runs.

New command line options can be supplied to restrict printing to
a specific package, dump in a new csv format, control what is
printed in the csv format, and print a checkin report.

Add toString methods to ArrayMap and ArraySet.

Change-Id: I47b8f68472592ecc0088c5286d3564aa615f4e0a
2013-06-21 15:03:41 -07:00
Craig Mautner
1d001b670e Fix stack transfer bug.
Set the focused stack to the task with the started activity. Do not refocus
when activities report resume.

Add more conditional debug.

Fixes bug 9481679.

Change-Id: Ib7134e88f9a2c8ad1703af0d43442c8bbe4e65dc
2013-06-18 16:55:48 -07:00
Craig Mautner
fd1ce8d5a7 Add new API getStackBoxInfo
Change-Id: Ie2861e5e31bb3876cfe2d5c3d04ff58bb3955634
2013-06-17 18:34:28 -07:00
Dianne Hackborn
91268cf21e More work on process tracking.
Re-arranged code to be more flexible, now track
state of services, dump ordered list of running
processes while memory was critical and low.

Also rename battery stats service from "batteryinfo" to "batterystats".

Change-Id: I0f4f0c8d443c49d255cb84d0fc917e8ec18b152e
2013-06-14 17:30:17 -07:00
Dianne Hackborn
78a369c90f Improve process tracking.
We now keep track of when each process is running, batched
by the current memory status of the device.  In addition,
the stats are organized by package first, and then processes
associated with each package inside of that.  Finally, we
also keep track of the overall time spent in each memory
status.

This should start to actually get us to some information
we can reach some conclusions about.  The total time spent
in each memory status gives us some indication of how much
we are running while memory is low; the new package organization
batched by memory status lets us see what packages have
what processes running when memory is low.

Change-Id: I389d62d39d115a846126cf354e4c20070d8f1180
2013-06-12 11:45:27 -07:00
Jeff Sharkey
126713d8d7 Merge "Explicit locale when formatting machine strings." 2013-06-11 23:52:17 +00:00
Jeff Sharkey
fea17de7aa Explicit locale when formatting machine strings.
Bug: 9390451
Change-Id: I3581c53407554a1dffd541fb42b06d68f20a7be0
2013-06-11 14:36:41 -07:00
Dianne Hackborn
cbfd23ee6f Add new API to retrieve a dumpsys of a single package.
Adds a platform API, and pm command.  Fixes some issues with
dumping per-package data in package manager, makes battery
stats able to dump per-package state.

Change-Id: I76ee6d059f0ba17f7a7061886792b1b716d46d2d
2013-06-11 14:26:53 -07:00
Dianne Hackborn
be4e6aaa02 Initial super-primitive process tracker.
The goal of this is to keep track of what app processes
are doing, to determine who is being abusive, when the system
is getting into memory constrained situations, and help the
user determine how to resolve this.

Right now it doesn't really do any of that, just keeps track
of how long every process has been running since boot.

Also update the activity manager to use "cached" as the terminology
for what it used to interchangeably call hidden and background
processes, and switch ProcessMap over to using ArrayMap.

Change-Id: I270b0006aab1f38e17b7d9b65728679173c343f2
2013-06-07 15:09:17 -07:00
Dianne Hackborn
7ad34e5fb2 Improve debug printing in activity manager.
Dumping per-package data is now much cleaning, and only really
prints information related to the package.  Also clean up the
formatting and such of the new activity stack states.

Change-Id: Ie5f31d72b7e77b34fd9acd835f28ed1db1dff328
2013-06-06 11:05:50 -07:00
Dianne Hackborn
390517be2d Clean up some temporary allocations.
Yay to ArrayMap, letting me get rid of a bunch of temporary
iterators in core code paths like updateOomAdj.  (Now I definitely
need an ArraySet to finish that up.)

Also clean up various other things that are doing unnecessary
allocations, clean up some debug output, make more of the debug
output respect package filtering.

Change-Id: Ib4979faf4de8c7912739bc0937c3fa9e7bfcde67
2013-05-30 19:26:42 -07:00
Amith Yamasani
ce863c6fe1 am 096d3843: am 3ec14d9c: am 9b76b2d2: Merge "framework:base: iterator error in singletone provider"
* commit '096d3843994dfef99a2670c38d72c31e96cdad74':
  framework:base: iterator error in singletone provider
2013-05-29 15:25:44 -07:00
Amith Yamasani
3ec14d9cf1 am 9b76b2d2: Merge "framework:base: iterator error in singletone provider"
* commit '9b76b2d29fa338a128f699a1f40f7f5916a512af':
  framework:base: iterator error in singletone provider
2013-05-29 15:18:50 -07:00
Jun Su
cca0965a1b framework:base: iterator error in singletone provider
In case of singletone provider, we don't count it in the guset user.
After we remove it from the array, and resize the array, need to move
iterator back.

Change-Id: I99920a6beccc9de0e67ffeb632b1940efaee10b9
2013-05-29 14:33:59 +08:00
Dianne Hackborn
21d9b56692 Add more details about why a force stop is happening.
Change-Id: Ia938cf6fc37ad22fc7447dc538968c7bd234be7d
2013-05-28 17:46:59 -07:00
Craig Mautner
18f8530486 Merge "Convert API refs to StackBox from ActivityStack." 2013-05-24 23:14:52 +00:00
Craig Mautner
5a449154d1 Convert API refs to StackBox from ActivityStack.
- Removed IActivityManager.getStacks() since getStackBoxes() is better.
- Made createStacks operate relative to StackBox instead of TaskStack.
- Made resizeStack into resizeStackBox.

Change-Id: I7a0e1f4e34f399b4fd1180c60cc3989f9c2433f3
2013-05-24 16:12:57 -07:00
Craig Mautner
8cec2bcef9 Merge "Add retrieval of StackBox info for more flexibility" 2013-05-24 19:54:18 +00:00
Craig Mautner
5ff1210172 Add retrieval of StackBox info for more flexibility
First step in permitting StackBoxes to be manipulated by user.
Necessary for Configuration changes coming down.

Change-Id: I4029926a35e4fdc59a5759fd9e4bae10bb308413
2013-05-24 12:50:15 -07:00
Dianne Hackborn
64770d16b0 Some improvements to meminfo output.
- Rename "Swappable PSS" to "PSS Clean" which I think is what it
  means and is consistent with the other memory metrics.
- Split at the top level the dalvik heap from other dalvik allocations,
  so when you look on the dalvik allocations line things are consistent
  with the allocator's data and it is clear what are app allocations vs.
  other data in dalvik.
- Don't print lines that are all 0.
- Don't print the detailed Dalvik allocation data by default; add a new
  option to have it printed.

Here's what a typical system process dump now looks like:

** MEMINFO in pid 6358 [system] **
                   Pss      Pss   Shared  Private   Shared  Private     Heap     Heap     Heap
                 Total    Clean    Dirty    Dirty    Clean    Clean     Size    Alloc     Free
                ------   ------   ------   ------   ------   ------   ------   ------   ------
  Native Heap        0        0        0        0        0        0     6964     3599     2048
  Dalvik Heap     7541        0     4344     7356        0        0    11768    11194      574
 Dalvik Other     3553        0     2792     3448        0        0
        Stack       28        0        8       28        0        0
       Cursor        4        0        0        4        0        0
       Ashmem        5        0       12        0        0        0
    Other dev     4004        0       24     4000        0        4
     .so mmap     3959      684     2500     2280     5468      684
    .apk mmap      173       68        0        0      692       68
    .dex mmap     4358     3068        0        0     9276     3068
   Other mmap       60        0        8        8      244       36
      Unknown     4387        0      508     4380        0        0
        TOTAL    28072     3820    10196    21504    15680     3860    18732    14793     2622

 Objects
               Views:       10         ViewRootImpl:        1
         AppContexts:        8           Activities:        0
              Assets:        3        AssetManagers:        3
       Local Binders:      176        Proxy Binders:      341
    Death Recipients:      141
     OpenSSL Sockets:        0

 SQL
         MEMORY_USED:      473
  PAGECACHE_OVERFLOW:       98          MALLOC_SIZE:       62

 DATABASES
      pgsz     dbsz   Lookaside(b)          cache  Dbname
         4       68             49         7/21/7  /data/data/com.android.providers.settings/databases/settings.db
         4       20             17         0/13/1  /data/system/locksettings.db
         4       20             21        96/14/2  /data/system/locksettings.db (1)
         4       20             21        75/13/2  /data/system/locksettings.db (2)
         4       80             29         4/17/3  /data/system/users/0/accounts.db

Change-Id: Ifd511a7baaa8808f82f39509a5a15c71c41d1bac
2013-05-24 10:47:03 -07:00
Craig Mautner
6d90fed076 Add stackId to RecentTaskInfo
Necessary for multi-stack activity overview.

Fixes bug 9092356.

Change-Id: I3d51a7b5cbca6166017759401bb5d31b4ae96f07
2013-05-22 17:23:25 -07:00
Craig Mautner
9d851de6cc Revert "Add stackId to RecentTaskInfo"
Need to modify the API as well.
This reverts commit b9b9477581

Change-Id: I34ea371408930b6b1bf4c53ad9ab8418b0070dbc
2013-05-22 23:14:05 +00:00