1390 Commits

Author SHA1 Message Date
Dianne Hackborn
f1cca18ae4 Try to improve PSS collection.
The goal is to collect PSS data from processes when they
are in as stable a state as possible.  We now have tables
for the durations to use for PSS collection based on
process state, and scheduling of collection is all driven
by process state changes.

Change-Id: I95e076f6971b9c093118e53dc8240fb3f5bad3b2
2013-08-01 20:28:36 -07:00
Dianne Hackborn
805f52d4cf Report more memory tuning info.
Change-Id: I243d67189e325eba5ea22e79937f5a858dfceeed
2013-07-30 12:48:12 -07:00
Jonathan Dixon
a75246951f Merge "Make WebViewProvider constants private" 2013-07-30 01:22:18 +00:00
Dianne Hackborn
635a6d5a0b Fix some oom tuning and display size stuff.
Fix a problem where we would not respect the device's
override display density/size if those had been reset at
some point (to an empty string).

Tweak the tuning of low RAM devices to consider 480x800 as
the base line resolution.  That is our target these days.

Improve output of oom and meminfo to include this tuning
information.

Change-Id: Ic9a85b0391b075178c4ac17e64086ef21889f430
2013-07-29 17:17:31 -07:00
Jonathan Dixon
09397ba3d5 Make WebViewProvider constants private
In preperation for DEFAULT_TO_EXPERIMENTAL_WEBVIEW flag-flip, make this
field and WEBVIEW_EXPERIMENTAL_PROPERTY private so we know all users are
querying the property in a consistent way.

Change-Id: Iabaffb8ac5a34e323b170339d47f872eb4c83042
2013-07-29 16:42:42 -07:00
Dianne Hackborn
bf36ee2b0c Allow services to execute in the background scheduling group.
If a service is being executed due to a call from a background
process, there is no reason for its process to be brought up
to the foreground scheduling group to do its work.  So, don't.

Change-Id: I0f4f9f2fdcc3481ca4ad2e4e3deb43b8edbbd897
2013-07-29 13:50:52 -07:00
Colin Cross
ddb1428ab6 Merge "set the extra_free_kbytes kernel vm tunable" 2013-07-26 23:09:09 +00:00
Colin Cross
59d80a5270 set the extra_free_kbytes kernel vm tunable
Set the sys.sysctl.extra_free_kbytes property, which will proxy
through init to the /proc/sys/vm/extra_free_kbytes tunable (on
kernels where it exists).  This will ask the kernel to keep
more memory free, causing lowmemorykiller to fire earlier and
allocations to succeed faster.

The size is set to 3 full screen 32bpp buffers.  Products can
override the size with an absolute or adjustment value using
overlays config_extraFreeKbytesAbsolute and
config_extraFreeKbytesAdjust.

Bug: 10024467
Change-Id: Ib4d4507513ec3c1f4d4ceeb81ed632d1ad643437
2013-07-26 16:06:45 -07:00
Dianne Hackborn
244f5d24e1 Proc stats: include information about config.
We now include in the app ops information about the device runtime
config that is relevant.  Currently this is the dalvik runtime in
use and the webview.  In checkin, this data looks like:

config,libdvm.so,webview

Change-Id: I85fd53418bd43595468f23ec8619e772fdaee7e1
2013-07-26 15:23:11 -07:00
Colin Cross
fcdad6f292 add overlays to override lowmemorykiller adjustment values
Add overlays config_lowMemoryKillerMinFreeKbytesAbsolute and
config_lowMemoryKillerMinFreeKbytesAdjust to allow a product to
modify the size of the lowmemorykiller minfree buckts.  The absolute
overlay sets the size of the largest bucket to the specified value
and scales the smaller buckets proportionally.  The adjust overlay
(which can be negative) directly adds to the size of the largest
bucket and to the the smaller buckets proportionally.

Change-Id: I0d6b7662be12fd151deb2bf9591f2c7a8b1cb6f7
2013-07-25 15:11:39 -07:00
Dianne Hackborn
85df4e0c1c Fix another problem with procstats bucketing.
We were now propagating the screen on state when updating
all process states, so they would get pushed into the screen
off bucket always even if the screen was on.  Oops!

Also improve the summary output when dumping a single package
to be more summary-like.

Change-Id: I16c640f9dc02d6db8c66aeb1c720f67beab60635
2013-07-23 19:15:27 -07:00
Dianne Hackborn
eb54cc7eed Merge "Fix bug that was causing us to lose total memory buckets." 2013-07-24 00:31:27 +00:00
Dianne Hackborn
bd754f44cd Fix bug that was causing us to lose total memory buckets.
When safely resetting stats after committing them, we were
mistakenly clearing the current memory state so we would lose
that total memory time until the memory state changes again.

Also improve the summary output to print percentages, which
make more sense for that display.

Change-Id: I0fe45fd78e97ec8b94976170dd42f4ed345a5899
2013-07-23 17:30:30 -07:00
Craig Mautner
7aee681b6b Merge "Set task and activity types when adding to task." 2013-07-23 22:48:52 +00:00
Craig Mautner
2c1faed412 Set task and activity types when adding to task.
Activities from the home package were causing tasks types to change from
application to home. This was not the intention of setting the task type
when adding an activity. This change sets the task type to the inherent
type of the first activity added. All subsequent activities added to the
task then inherent the task's type overriding the inherent type of the
task.

Fixes bug 9972495.

Change-Id: Ib77675aea790ea64d4f166af62c7138e89356c13
2013-07-23 13:15:37 -07:00
Dianne Hackborn
57a7f5954c Add "adb shell am restart" command.
So you can restart the system without being root.

Change-Id: I89770f497833ecbe2b69e3a0cfafae7ef472a9f5
2013-07-23 11:51:22 -07:00
Craig Mautner
8817610747 Remove stopping activity from activities to stop
When stopping an activity remove it from the list of activities to
be stopped when idle. Otherwise the activity gets stopped twice, at
the point of the fix here and later when idle.

Fixes bug 9755054.

Change-Id: If8d2249b75aeb9f8b6cea2d883046f3ad4c2e067
2013-07-22 12:57:51 -07:00
Craig Mautner
acb837fe63 Merge "Fix home activity and user switch interactions." 2013-07-19 23:07:51 +00:00
Craig Mautner
ac6f843c91 Fix home activity and user switch interactions.
- Make sure Home activity goes in the correct task and on the correct
stack.
- Do not allow different users to be in the same task.
- Do not set stacks aside for each user.

Fixes bug 9775492.

Change-Id: I0e7954e917aac8482a1015a36923e02914e2b692
2013-07-19 16:05:59 -07:00
Colin Cross
5408ae83e8 Merge "Use virtual screen size to determine lowmemorykiller tuning" 2013-07-19 00:35:29 +00:00
Colin Cross
637dbfcaf0 Use virtual screen size to determine lowmemorykiller tuning
Use the virtual screen resolution returned by getBaseDisplaySize
instead of the physical screen resolution returned by
getInitialDisplaySize.  The memory required by apps will scale
with graphics buffer size, which are generally relative to the
virtual screen resolution.

Change-Id: I0476e4afad99eca2f4f56042a8dbef5b3c7889db
2013-07-18 17:15:15 -07:00
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
cf11716409 Reduce some event log noise:
- Only log battery levels on level changes, not voltage or temp.
- Reduce the text in the start service log to only the suffix
  of the service component, and a uid field.

Change-Id: I6d65e6700e021b3b005dccc90d64f36c1f97137f
2013-07-12 17:26:02 -07:00
Amith Yamasani
ed411593ec Fix build
Change-Id: If4c4f1f104826b599c86bc1c924ebadc5223c8f0
2013-07-12 12:23:16 -07:00
Amith Yamasani
abee69bc08 am 8361a9f7: am 1a1a7c08: am 06a441de: Merge "Pass along the user id to AttributeCache requests" into jb-mr2-dev
* commit '8361a9f719b6a416a40134951daf28297b6e0670':
  Pass along the user id to AttributeCache requests
2013-07-12 11:25:24 -07:00
Amith Yamasani
8361a9f719 am 1a1a7c08: am 06a441de: Merge "Pass along the user id to AttributeCache requests" into jb-mr2-dev
* commit '1a1a7c0878320b94d01da6bdfaa857c85b4199a3':
  Pass along the user id to AttributeCache requests
2013-07-12 11:21:27 -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
Amith Yamasani
4befbecfcc Pass along the user id to AttributeCache requests
Bug: 9759331
Change-Id: Ib96ba6a89c58edc207021aa43a2b67b4f6c50117
2013-07-10 16:18:01 -07:00
Craig Mautner
fb20eb48aa Merge "Add convertToTranslucent to API." 2013-07-10 21:52:28 +00:00
Dianne Hackborn
1304f4ae32 Add new location monitoring op, make some of app ops public.
The new location monitoring op is to tell us when an application
is monitoring for any location changes.  It may be useful information
in addition to the more explicitly information about when location
data actually goes to the app.

Also make parts of AppOpsManager public for use by gcore.  It is
not available to third party apps.

Change-Id: Ib639f704258ffdd7f3acd7567350ed2539da628a
2013-07-09 18:17:27 -07: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
cee04b5739 Add traces for app launch / fully drawn times.
Note that we don't know the fully drawn time unless the app
tells it has finished drawing, so for apps that don't do this
we will end up just continuing to consider it to be drawing until
the next app is launched.

Change-Id: I766b71cf61b8d7324ccf239b7a44bef2518e2454
2013-07-03 17:06: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
bae8614376 Merge "Fix issue #9611000: Random run-time restarts" 2013-07-01 18:42:20 +00:00
Craig Mautner
89d62fbad5 Merge "Set focus to launcher activity on return." 2013-07-01 18:41:40 +00: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
Craig Mautner
a8a90e0f52 Set focus to launcher activity on return.
Setting the focus to the top activity on the home stack when
changing stack. This got lost when setting the stack to the foreground
no longer set automatically set focus.

Fixes first half of bug 9580068.

Change-Id: Ic9a662579399c052e0f0992651a32094f4aa62d0
2013-06-28 15:24:50 -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