671 Commits

Author SHA1 Message Date
Dianne Hackborn
e02c88af79 Work on process management.
Introduce a new concept of "B" services.  All running services are
classified as either A or B.  B services are later in the LRU list.
Their oom_adj is after the home app.  This allows us to better pick
services to kill based on how long they have running, and should
reduce the amount that we end up killing the home app.

This temporarly turns on a debug log when the oom_adj of a process
is changed.  Sorry, I know it is noisy.  This is needed to try to
track down why some processes are being killed.

Also add a flag to the SyncManager's service binding to allow the
syncing process to be more aggressively killed if it has done UI.
This is to address cases we have seen where sync is causing an 80MB
gmail process to be kept around, preventing other process from running.
Now what will happen is that the syncing process will aggressively be
killed by the system, and can then be restarted in a much lighter-weight
state.

Do a little tweak in the power manager to allow us to still do smooth
brightness changes even when the fancy TV off animation is in use.

And get rid of a debug log in the window manager that was accidentally
left in.

Change-Id: I64a8eeaaa1f096bab29c665fbff804c7f1d029e2
2011-10-28 17:15:08 -07:00
Jeff Sharkey
a353d2654a Differentiate between system_server and unknown.
Bug: 5531966
Change-Id: I2b64b04f3f5a8760a2314729e8b90e9dd6699cb4
2011-10-28 11:13:27 -07:00
Dianne Hackborn
98cfebc6e8 Fix issue #5461497: Landed on Welcome screen after a tap on 'Next' in Screen 500
The basic problem was that at some points during setup wizard, this would
happen:

1. The app's process is killed.
2. The app's process is restarted, but not to actually resume the
   setup wizard activity, just to put it in the stopped state.
   When doing this, the saved state is cleared but the app will
   never provide a new one.
3. The app's process is killed again.  At this point, because the
   saved state is cleared, the activity is completely removed.
4. Eventually the entire activity stack becomes empty, and a new
   setup wizard activity needs to be created as the home app.

There is a combination of bad stuff going on here.

First, why is the process being killed?  At this point the setup
wizard is the home app, so it shouldn't be killed.  There were two
reasons why this was happening:

- CryptKeeper still was not completely cleanly going away.  To fix
  this, I removed the check in the activity manager to not allow
  an activity to finish if it is the only activity on the stack and
  maybe-kindof looks like the home app.  This really wasn't necessary
  (we always take care of starting a new home activity if we find the
  stack is empty), and outright dangerous with all of these things
  purporting to be home but not.

- There was an issue in computing the oom_adj where the home app
  would not be marked as "not hidden", and if we had to re-compute
  its oom adj in the current sequence would then give it an
  adjustment as a background process...  and with all the processes
  we spin through during boot, it quickly got down to background
  #16 and killed.

Second, what is going on with the state?  This is easier, the code
in the activity manager to create a new activity but put it in the
stopped state was still clearing the saved state.  The saved state
should only be cleared when going in to the resumed state.  When
going in to the stopped state, we can just keep holding the same
saved state.

Change-Id: I7d21cdcfa082d98ca70c79d9923e29605ee4353e
2011-10-18 13:41:10 -07:00
Dianne Hackborn
eabd328dee Fix bug with CLEAR_TASK -- wouldn't clear the top activity.
Maybe this will also fix bug #5144065 as well.

I doubt I am so lucky, though.

Change-Id: I60bf595d3eff79353fdd94b0f2a089e81218bc30
2011-10-13 16:26:49 -07:00
Dianne Hackborn
38cc8960cb Fix issue #5446988: WindowManager warns BOOT TIMEOUT,...
...dev.bootcomplete flags is set before boot animation is out

Also:

- Fix crash in recent apps if the intent for an old app didn't
happen to have the new task flag set.
- Fix issue where a crash in system UI would cause the crash
dialog to be displayed below it, effectively locking the UI.  Now
the crash dialog for persistent processes is shown above everything
else.

Change-Id: I0312001a92beeae5f644c7c3e5c5e19f6716df36
2011-10-13 12:55:57 -07:00
Dianne Hackborn
58f42a59bd Fix issue #5405788: Device continuously opening and closing...
...the "Complete action using" dialog

When an application goes idle, it sends back to the activity manager
the configuration it last used, to make sure the two don't get out
of sync.  Fix a bunch of edge cases here in dealing with that, and
be sure to also send the current configuration when launching an
activity so the client is always up-to-date when launching.

Also a small fix to not show the upgrading dialog during first boot.

Change-Id: I14ed366a87cd689d1c78787369e052422290ac6f
2011-10-10 14:53:08 -07:00
Jeff Sharkey
1059c3c30a Move battery stats to xt_qtaguid for data stats.
Replace TrafficStats calls by reading values from xt_qtaguid kernel
module. To keep BatteryStatsImpl changes lightweight, cache recently
parsed stats. Tracks mobile ifaces from ConnectivityService.

Refactor xt_qtaguid parsing into factory outside of NMS. Add stats
grouping based on UID, and total based on limiting filters like iface
prefix and UID.

Bug: 4902271
Change-Id: I533f116c434b77f93355bf95b839e7478528505b
2011-10-09 13:49:08 -07:00
Kenny Root
3abd75ba3a Add DUMP permission checks to services
Some services have info that is not readily available any other way. Add
a permission check to those services.

Bug: 5389201
Change-Id: I5a9724ec89e1c11ef7813eeb52a6a05b3ea92af5
2011-09-29 11:04:15 -07:00
Dianne Hackborn
90c52de286 Fix issue #5173952: Opening a Notification From Lock Screen...
...Should Skip Unsecure Lockscreen (ICS)

Also while I am in there, clean up logging of intent objects to include
even less sensitive information, while showing the true Intent in dump
output (since apps can't get to that).

Change-Id: I35fed714645b21e4304ba38a11ebb9c4c963538e
2011-09-23 13:39:33 -07:00
Dianne Hackborn
80a7ac1063 Fix issue #5321282: Force Stop Button in Battery Screen Not disabled correctly
If the app had activities still finishing, when we checked whether it was
now stopped we would get told no.  Also some other improvements:

- Schedule an idle as part of the force stop, to get any finishing
  activities out of the stack soon rather than waiting for some activity
  to idle.
- Don't filter out stopped system apps.  This is dangerous because
  system apps may have no way for the user to explicitly launch them,
  so they could get put into a stopped state for which there is no way
  to get them out.  Also if the user really wants a system app to not
  run, the new disabling mechanism is more appropriate.

Change-Id: I34003f21dac29e2ca0f66a23b88c710de41bab99
2011-09-22 18:32:52 -07:00
Dianne Hackborn
2a6bcda03b Fix issue #5253941: ICS ignoring provider's android:process flag
Provider was not being removed from the class map because it was using
the wrong key.  D'oh.

Also a little cleanup.

Change-Id: I318e8b1a265318ac1474e0a7f14f27f89f357505
2011-09-21 15:07:05 -07:00
Dianne Hackborn
e123612c08 Merge "Work on issue #5144065: Tap on Music icon from Home screen - a different app opens" 2011-09-09 14:53:53 -07:00
Dianne Hackborn
e5ba16a7af Work on issue #5144065: Tap on Music icon from Home screen - a different app opens
When force stopping an app, when removing its activities also finish any
activities from other apps above it in the task.  This avoids some situations
where the task gets into a bad state where its root becomes a different app.

Change-Id: I79e5cd520ae321bec80adefd2ccc2b0370ace372
2011-09-09 14:48:13 -07:00
Dianne Hackborn
eeb1dca393 Fix issue #5139085: Some Recents items can't be killed
Change-Id: Ib4fa413266c4aa2223576ce0299be743358fdc26
2011-09-08 13:30:11 -07:00
Dianne Hackborn
905577f634 Fix issue #5263361: Browser instance not created in application picker
The resolver activity was hiding the following activity from recents.

Also some other fixes: a little better memory use debugging, removed
some unneeded code from window manager, moved some system activities
into their own process, added some more running process information for
manage apps.

Change-Id: I66687d16989ff965d524b92dc360f37c19199717
2011-09-08 10:35:11 -07:00
Dianne Hackborn
5d927c2d8e Fix issue #5150899: Call activity takes 15MB we never get back.
Persistent process can no longer use hardware acclerated drawing
when running on a low-memory device.

Change-Id: I3110335617af1c98fcede9bf41f4a1d0c20d0e87
2011-09-02 12:22:18 -07:00
Dianne Hackborn
295e3c27e4 Fix issue #5214105 and work on issue #5109947.
Change-Id: Iff2cfec5280a314989d915aa830c16124f921611
5214105: taking a screenshot while "Android is upgrading..." crashes device
5109947: Race condition between retrieving a content provider and updating its oom adj
2011-08-25 13:19:08 -07:00
Dianne Hackborn
a4bacb8b74 Fix animation scale to also scale start offset.
Also more better info in meminfo dump.

Change-Id: I45ab41821cd8dd81b61605de6a0cf7074e76c71a
2011-08-24 15:12:38 -07:00
Dianne Hackborn
cfb9f2bca3 Fix issue #5192141: systemui asplodes after enough tapping on the windowlist button
Change-Id: I5afb2d54b531d9eac9435660616579324f239812
2011-08-24 12:06:15 -07:00
Dianne Hackborn
29aae6f36e Fix issue #4279860: previous UI flashes before showing lock screen...
...(when turning display on after recently turning it off)

Also clean up when we decide to turn the screen on to improve that
transition.  There are still problems here with turning it on
before the wallpaper gets dispayed.

Change-Id: I2bc56c12e5ad75a1ce5a0546f43a845bf0823e66
2011-08-23 17:44:52 -07:00
Dianne Hackborn
661cd52e0e Add progress dialog for booting after an upgrade.
This introduces a new facility for code during the boot process
to display messages to the user through a progress dialog.  This
is only for use when performing longer-than-usual post-upgrade
operations such as running dexopt on applications or upgrading
databases.

Change-Id: I0e78439ccec3850fb67872c22f235bf12a158dae
2011-08-22 13:42:05 -07:00
Christopher Tate
d6a2be3ef7 Merge "Allow Instrumentation to kill even persistent processes" 2011-08-19 15:21:43 -07:00
Christopher Tate
3dacd8470a Allow Instrumentation to kill even persistent processes
Fixes bug 5117630

Change-Id: Iff40145fbbdc1d81a60cf2ecc5b24321162f7897
2011-08-19 14:57:57 -07:00
Dianne Hackborn
1c9b260cf5 Fix issue #5187844: Query is misrouted to wrong content provider
Change-Id: I56834f41844990d67edc8af83273036b3d755e37
2011-08-19 14:08:43 -07:00
Dianne Hackborn
d99b293d5f Fix issue #5180553: permission RECEIVE_BOOT_COMPLETED is not checked
Change-Id: I069673f2fbdf05e409c5e9ed99ccd1e15b4fe3ed
2011-08-18 16:02:41 -07:00
Dianne Hackborn
e8c88e6f76 Fix issue #5163456: logspam/tight loop in BatteryStatsImpl
No longer use the old history code.

Change-Id: I878ffe16e0014453c46db6a4f7228a81468d8cb9
2011-08-17 19:09:23 -07:00
Dianne Hackborn
e518be3085 am 51beb81a: am ee93fd5c: am 7a0d746b: am baaf3ce6: Merge "Handle stopping of services with still bound applications."
* commit '51beb81a8e901020293b7a30a68b405bca71d258':
  Handle stopping of services with still bound applications.
2011-08-16 20:47:39 -07:00
Dianne Hackborn
51beb81a8e am ee93fd5c: am 7a0d746b: am baaf3ce6: Merge "Handle stopping of services with still bound applications."
* commit 'ee93fd5c0d7b0296fca17363ec00dc2ee63a0841':
  Handle stopping of services with still bound applications.
2011-08-16 20:45:19 -07:00
Dianne Hackborn
baaf3ce638 Merge "Handle stopping of services with still bound applications." 2011-08-16 19:29:25 -07:00
Mike Lockwood
e81740442f dumpsys: fix problems with -a option in battery and batteryinfo services
Now the dumpsys battery output will show up in bugreports again.

Change-Id: Id36e87d27e9d3c06dcc17671c81aa1d3fe260d1e
Signed-off-by: Mike Lockwood <lockwood@android.com>
2011-08-16 12:53:43 -07:00
Dianne Hackborn
62f20ecf49 Add new am option to profile the launching of an activity.
Change-Id: Ie71a8043eafe41f53a0b3dbb5170276d87acbc9b
2011-08-15 17:55:57 -07:00
Adam Powell
40a9784d48 Fix bug 5154361 - New force close dialog text breaks button order rules
Reorder the force close/ANR dialog buttons to better match the new
rules/intent from UX.

Change-Id: I30fed56aabd0cc91d07852807347057176d82aaa
2011-08-14 17:13:10 -07:00
Dianne Hackborn
8e8d65ff5f Fix some crashes that are happening in the system process.
- When shutting down, if the screen goes to sleep there is code
  that tries to do a notifyAll without holding the lock:

java.lang.IllegalMonitorStateException: object not locked by thread before notifyAll()
	at java.lang.Object.notifyAll(Native Method)
	at com.android.server.am.ActivityStack.checkReadyForSleepLocked(ActivityStack.java:776)
	at com.android.server.am.ActivityStack$1.handleMessage(ActivityStack.java:282)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loop(Looper.java:137)
	at com.android.server.ServerThread.run(SystemServer.java:603)

- If an invalid Uri object is sent to the system process it can crash because
  the Uri class throws an assertion while unmarshalling.  Change this to an
  IllegalArgumentException so it gets sent back to the caller:

java.lang.AssertionError
	at android.net.Uri$PathPart.readFrom(Uri.java:2224)
	at android.net.Uri$HierarchicalUri.readFrom(Uri.java:1106)
	at android.net.Uri$1.createFromParcel(Uri.java:1689)
	at android.net.Uri$1.createFromParcel(Uri.java:1681)
	at android.content.IContentService$Stub.onTransact(IContentService.java:53)
	at android.content.ContentService.onTransact(ContentService.java:120)
	at android.os.Binder.execTransact(Binder.java:338)
	at dalvik.system.NativeStart.run(Native Method)

- StrictMode can try to access the first index in the stack crawl of a stack crawl
  array of length 0.  Not sure why this happens, but make the code more robust:

java.lang.ArrayIndexOutOfBoundsException: length=0; index=0
	at android.app.ApplicationErrorReport$CrashInfo.<init>(ApplicationErrorReport.java:341)
	at android.os.StrictMode$ViolationInfo.<init>(StrictMode.java:1978)
	at android.os.StrictMode$AndroidBlockGuardPolicy.startHandlingViolationException(StrictMode.java:1097)
	at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1068)
	at libcore.io.BlockGuardOs.read(BlockGuardOs.java:137)
	at libcore.io.IoBridge.read(IoBridge.java:426)
	at java.io.FileInputStream.read(FileInputStream.java:179)
	at java.io.InputStream.read(InputStream.java:148)
	at com.android.internal.os.ProcessStats.readFile(ProcessStats.java:804)
	at com.android.internal.os.ProcessStats.getCpuSpeedTimes(ProcessStats.java:564)
	at com.android.internal.os.ProcessStats.getLastCpuSpeedTimes(ProcessStats.java:545)
	at com.android.server.am.ActivityManagerService.updateCpuStatsNow(ActivityManagerService.java:1470)
	at com.android.server.am.ActivityManagerService.batteryNeedsCpuUpdate(ActivityManagerService.java:1522)
	at com.android.internal.os.BatteryStatsImpl$MyHandler.handleMessage(BatteryStatsImpl.java:110)
	at android.os.Handler.dispatchMessage(Handler.java:99)
	at android.os.Looper.loop(Looper.java:137)
	at com.android.server.am.ActivityManagerService$AThread.run(ActivityManagerService.java:1302)

(Also fix this code to not cause strict mode to trigger at all, because there is
no need, because this is just reading stuff from /proc.)

- The system seems to crash during boot if it thinks it needs to rotate
  the screen, when it is trying to take the freeze snapshot way too early.
  There is no need to freeze the screen during boot or if the screen is off:

java.lang.NullPointerException
	at android.view.Surface.init(Native Method)
	at android.view.Surface.<init>(Surface.java:256)
	at com.android.server.wm.ScreenRotationAnimation.<init>(ScreenRotationAnimation.java:91)
	at com.android.server.wm.WindowManagerService.startFreezingDisplayLocked(WindowManagerService.java:8758)
	at com.android.server.wm.WindowManagerService.startAppFreezingScreenLocked(WindowManagerService.java:3971)
	at com.android.server.wm.WindowManagerService.startAppFreezingScreen(WindowManagerService.java:4003)
	at com.android.server.am.ActivityRecord.startFreezingScreenLocked(ActivityRecord.java:515)
	at com.android.server.am.ActivityStack.ensureActivityConfigurationLocked(ActivityStack.java:3997)
	at com.android.server.am.ActivityManagerService.updateConfigurationLocked(ActivityManagerService.java:12535)
	at com.android.server.am.ActivityManagerService.updateConfiguration(ActivityManagerService.java:12439)
	at com.android.server.wm.WindowManagerService.systemReady(WindowManagerService.java:6161)
	at com.android.server.ServerThread.run(SystemServer.java:521)

Change-Id: I85062bb5f6b0909a0f52feedaa75e7611d9d7fbd
2011-08-12 14:20:59 -07:00
Mark Brophy
c63502720e Store last-resume times in a separate XML file.
In UsageStatsService, separate last-resume times from the rest of
the statistics, and serialize them to an XML file daily.

This way, ApplicationsProvider will still be able to acces this data,
even thoguh other statistics are flushed to disk and discarded each day.

Bug: 5108745
Change-Id: Id3df3c98243ba02cde16b31e5e29bd9ff3602108
2011-08-08 16:24:16 +01:00
Dianne Hackborn
7d608423b7 Move OOM kernel settings to activity manager.
The activity manager now take care of plugging the correct settings
into the OOM killer in the kernel.  This is a lot cleaner because
it is really central to how the activity manager works, and nobody
else cares about them.

Taking advantage of this, the activity manager computes what it
thinks are appropriate OOM levels based on the RAM and display
size of the device.

Also a small optization to the package manager to keep a binding
to the package install helper for a bit after done using it, to
avoid thrashing on it.

And some new APIs that are now needed by Settings.

Change-Id: I2b2d379194445d8305bde331c19bde91c8f24751
2011-08-07 20:20:56 -07:00
Dianne Hackborn
b437e090ec Improved memory use reporting.
Change-Id: I38e53e6228bba92a142bafeedb5af8df4e4e5724
2011-08-05 18:18:05 -07:00
Dianne Hackborn
c68c913d35 Various work on out of memory managment.
- Improve how we handle processes that have shown UI, to take care
  of more cases where we want to push them into the background LRU
  list.
- New trim memory level for when an application that has done UI
  is no longer visible to the user.
- Add APIs to get new trim memory callback.
- Add a host of new bind flags to tweak how the system will adjust
  the OOM level of the target process.

Change-Id: I23ba354112f411a9f8773a67426b4dff85fa2439
2011-07-29 02:06:46 -07:00
Jeff Brown
d5d7e164d3 Support wrapping app processes to inject debug instrumentation.
Bug: 4437846

Change-Id: Ib0559e5224b0fa0df074e485787307b6634e8654
2011-07-28 14:00:27 -07:00
Christopher Tate
3c6c3ddb6a Merge "Don't actually try to stop processes marked 'persistent'" 2011-07-27 12:41:42 -07:00
Dianne Hackborn
130b0d2b26 Fix issue #4466531: onServiceConnected() not called after...
...apk reinstall; affects user privacy

Disconnecting a ServiceConnection after an app is torn down could
impact the bookkeeping of the same service if it has been started
for the app.

Also address issue #5073927: GSF process can't be killed

A new flag allows the systems location manager service to tell
the activity manager to not pull bound services up forever into
the visible adj level.

Change-Id: I2557eca0e4bd48f3b10007c40ec878e769fd96a8
2011-07-26 22:07:48 -07:00
Christopher Tate
064d842ead Don't actually try to stop processes marked 'persistent'
A later CL will introduce an API for querying whether a given package
runs in a persistent process; UIs such as Settings will be able to use
that to determine whether to disable the 'force stop' action.

Change-Id: Iab47c2300fdce285da7d83e02263c9a5f69edd70
2011-07-26 15:42:05 -07:00
Dianne Hackborn
c09bd156b7 Merge "Fix bug where memory trim was not being delivered with correct level." 2011-07-21 16:19:11 -07:00
Dianne Hackborn
f0754f5ba7 Fix bug where memory trim was not being delivered with correct level.
Also improve how we handle services, keeping track of whether they showed
UI and if so putting them immediately on the LRU list.

Change-Id: I816834668722fc67071863acdb4a7f427a982a08
2011-07-21 16:02:56 -07:00
Romain Guy
7eabe55db6 Add looper profiling to adb shell am
To profile the looper, run the following command:

adb shell am profile looper start <process> <file>
adb shell am profile looper stop <process>

Change-Id: I781f156e473d7bdbb6d13aaffeeaae88bc01a69f
2011-07-21 14:56:34 -07:00
Dianne Hackborn
31ca854cdb Fix issue #4976176: Font size setting does not persist
Change-Id: Id58caf990bdd3aac5ea97aaba45652ffad1f678a
2011-07-19 14:58:28 -07:00
Dianne Hackborn
1b64e0d865 Work on death recipient leaks in Activity Manager and Content Service.
This should fix a leak of process death recipients in the activity manager.

Also add debugging of content observers to try to track down what looks
like a leak of them in the content service.

Change-Id: Id6823679493ef0cde5307bb66490ebe31b878556
2011-07-17 17:50:37 -07:00
Dianne Hackborn
0e3328fbdd Rework and fix "adb shell dumpsys meminfo"
We now collect more detailed information splitting the maps into
additional useful categories.

Fixed some bugs in account, such as not correctly handling all of
the current dalvik allocations.

The activity manager now prints a final summary of all pss organized
by the apps and the categories.

Change-Id: Iafc5f27c998095812b1483c6803b8e0f0587aeae
2011-07-17 13:48:37 -07:00
Dianne Hackborn
45ce864ef4 Move LoadAverageService to the SystemUI apk.
Change-Id: I442e264802d1e35cd7d27bae121ae75f932595b6
2011-07-14 16:10:16 -07:00
Dianne Hackborn
ce86ba86df Improve handling of low memory.
Now classify background processes into a set of bins of how much
memory they should try to clear.  The last bin also involves
destroying all activities in that process.

Removed the old code for the simulator that is no longer needed
(yay).  The debugging features it had are now integrated into the
regular oom adj code.

Small fixes to load average service.

Change-Id: Ic8df401714b188c73b50dbc8f8e6345b58f1f3a0
2011-07-14 10:39:39 -07:00
Mark Brophy
622c03e6cf Merge "Expose app resume times to the ApplicationProvider." 2011-07-12 02:57:16 -07:00