Commit Graph

339 Commits

Author SHA1 Message Date
Steve Howard
536ee090ef Merge "Fix name shadowing bug with revoking URI permissions." into gingerbread 2010-09-14 17:46:22 -07:00
Steve Howard
0de8ddb0cf Fix name shadowing bug with revoking URI permissions.
Change-Id: Ibfcb0dc73c6b1a111dbb8d56e6f0b78084f5e4e6
2010-09-14 16:29:26 -07:00
Dianne Hackborn
8c5755aab5 Work on issue #2991868: A toast pops up informing users...
...that Market took over the screen after signing into a Google account

Don't warn the user about a new activity coming up on an activity that
is finishing.

Change-Id: I573073139d42a485473d0c8a7df450c1a23c35c3
2010-09-13 16:58:59 -07:00
Dianne Hackborn
7e9f4eb260 Track client requests through location manager.
This fixes a problem where applications could ask the location
manager to do very heavy-weight things (like...  say... update
location every minute), which would get accounted against the
system instead of the application because ultimately it is the
system making the heavy calls (wake locks, etc).

To solve this, we introduce a new class WorkSource representing
the source of some work.  Wake locks and Wifi locks allow you
to set the source to use (but only if you are system code and thus
can get the permission to do so), which is what will be reported
to the battery stats until the actual caller.

For the initial implementation, the location manager keeps track
of all clients requesting periodic updates, and tells its providers
about them as a WorkSource param when setting their min update time.
The network location provider uses this to set the source on the
wake and wifi locks it acquires, when doing work because of the
update period.

This should also be used elsewhere, such as in the GPS provider,
but this is a good start.

Change-Id: I2b6ffafad9e90ecf15d7c502e2db675fd52ae3cf
2010-09-13 14:20:48 -07:00
Brad Fitzpatrick
1e02d36b0f Enable strictmode logging in system_server & add a lock.
We weren't logging strictmode violation in the system_server process
in non-user builds (only system apps), even though the rest of the
strictmode logging supports it.

Also add a missing lock in ActivityManagerService.

Change-Id: If2af96a7e4fdde604a647b836097f0029ef1334b
2010-09-10 09:19:50 -07:00
Dianne Hackborn
0dad364adb Add toast when an app intercepts the launch of another app.
The activity manager looks for cases where one app launches immediately
after another.  If this happens, a brief toast is shown telling the user
when app is actually running and what was originally starting.

Change-Id: If94cf5bd393dd0bc0f09789dae044fde1386c481
2010-09-09 21:25:35 -07:00
Dianne Hackborn
0d903a84d0 People holding partial wake locks now get blamed for CPU usage.
For the duration of the wake lock, 50% of all CPU usage is now
accounted against the app(s) holding partial wake locks, evenly
distributed between them.  This is only while the device is on
battery and screen off.

Change-Id: I3e5c978b792b6ef17bf8540705bfe8343dadd464
2010-09-08 12:41:24 -07:00
Dianne Hackborn
482566ed5c These are not ready to be exposed. Also rename them to be better.
Change-Id: I7c234144497084b7769f8c46761b7d74d1c583d5
2010-09-03 12:51:28 -07:00
Dianne Hackborn
a1c69e084b Fix a small bug when granting permissions through activity results.
Change-Id: I2a5c4025fb5f566e29c219fde4d50ed2eba6e174
2010-09-01 22:55:02 -07:00
Dianne Hackborn
6b1afebdac Improve debug output when an ANR happens.
- Collect data at better times.
- Collect per-thread CPU usage as soon as possible after the ANR, and print
  in log.
- Based on new per-thread CPU usage, limit the number of processes we
  collect stacks from to not include inactive not interesting procs.
- Improve the way ProcessStats compute and reports its data.

Change-Id: I12b17fb47d593d175be69bb792c1f57179bf4fdf
2010-08-31 18:51:27 -07:00
Daniel Sandler
d02bdaab49 Remove experimental immersive mode support. DO NOT MERGE
Bug: 2949215

Change-Id: I7d998ef571ef7e149bb96261430e92150b80b77d
2010-08-27 22:57:39 -04:00
Dianne Hackborn
02486b1327 Hide heavy-weight API.
And give it a better name, for when it is later un-hidden.

Change-Id: Iae0d3054d44f873b9f953bc41d175a47802a185e
2010-08-26 14:41:58 -07:00
Dianne Hackborn
7e269644fc Don't retain global ref to last inflated context.
Also rework URI permission granting to support upcoming
clipboard use.

Change-Id: I9842920350955531c5a511c2ecc5215e8c783343
2010-08-25 21:50:54 -07:00
Dianne Hackborn
43d9ac81f7 Fix a fun bug with multiple service bindings from an activity.
There was a flaw in the service management, when the same activity
is doing a bindService() for the same service IBinder.  In this case
the activity would correctly keep a list of all generated connections,
however some other data structures would assume there is only one
connection per IBinder, and thus only remember the last.

When that last connection was unbound, the service would be destroyed
since it thought there were no more connections.  Then when the
activity was finished, it would try to destroy the service again and
end up with an ANR because the service was already gone and would
not respond.

Change-Id: I59bde38bc24e78147b90b0a7cd525c2a1d20489f
2010-08-25 15:09:17 -07:00
Dianne Hackborn
39792d2262 Fix bugs with granting permissions through onNewIntent().
It would grant the permission to the temporary ActivityRecord,
not the real one, so it never got cleaned up.

Also allow granting of permissions to services because...  well,
it would be really really useful.  And it introduces some
refactoring that we'll need to support cut/paste.

Change-Id: If521f509042e7baad7f5dc9bec84b6ba0d90ba09
2010-08-20 11:50:00 -07:00
Dianne Hackborn
b424b633bb Fix issue #2845673: android:exported="false" is not obeyed
Thou shall obey.

Change-Id: I09f163a0db7cc9189c8d7f5116cc8ca9d4f7a76c
2010-08-18 16:07:35 -07:00
Dianne Hackborn
1ebccf531d Fix problems with determining when to kill apps for wake usage.
Also improve debug printing of various times.

Change-Id: Ifcc288fd1bcbf44c069875ba97925b9e7ffe9a48
2010-08-15 17:27:29 -07:00
Dianne Hackborn
9adb9c3b10 Various battery info things:
- Now track wake locks in battery history.
- Now track sensors in battery history.
- Some filtering of sensory data.
- Fixes to some data that wasn't cleared when resetting battery stats.
- Print amount discharged since last charge.

And the big part -- keep track of wake locks held per process,
and kill processes that hold wake locks too much while they are in
the background.  This includes information in the battery stats
about the process being killed, which will be available to the
developer if the app is reported.

Change-Id: I97202e94d00aafe0526ba2db74a03212e7539c54
2010-08-13 15:17:49 -07:00
Dianne Hackborn
f4c454bac9 New system property "sys.boot_completed" set to 1 when boot completed.
Change-Id: Ie3fc0b1efdfb637b0c780064a71e8c1575e15ca3
2010-08-11 12:47:41 -07:00
Daniel Sandler
9b87770f53 Merge "Fix crash when startForeground posts a broken Notification." into gingerbread 2010-08-04 20:33:32 -07:00
Daniel Sandler
d0a2f86f35 Fix crash when startForeground posts a broken Notification.
The NotificationManager tries to crash the calling app, but
in the case of a service calling startForeground, the caller
is the ActivityManager, so system_server goes down.

NotificationManagerService#enqueueNotificationInternal is a
new internal-only method that accepts a UID/PID to use when
punishing bogus notifications (such as the one in
http://b/2869787).

Change-Id: I84a9854bae630bc90288cebb94f174809d5dac8c
2010-08-04 10:52:51 -04:00
Brad Fitzpatrick
389a916769 Usage Stats: don't block writing stats to disk.
I was seeing lots of stack traces of people hung for noticeable
amounts of time when switching between activities.

e.g. On of the common gmail stacks showing this pause was:

android.os.StrictMode$StrictModeDiskWriteViolation: policy=391 violation=1
  at android.os.StrictMode$AndroidBlockGuardPolicy.startHandlingViolationException(StrictMode.java:272)
  at android.os.StrictMode$AndroidBlockGuardPolicy.onWriteToDisk(StrictMode.java:243)
  at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:238)
  at java.io.FileOutputStream.<init>(FileOutputStream.java:97)
  at java.io.FileOutputStream.<init>(FileOutputStream.java:69)
  at com.android.server.am.UsageStatsService.writeStatsFLOCK(UsageStatsService.java:424)
  at com.android.server.am.UsageStatsService.writeStatsToFile(UsageStatsService.java:398)
  at com.android.server.am.UsageStatsService.notePauseComponent(UsageStatsService.java:539)
  at com.android.server.am.ActivityManagerService.updateUsageStats(ActivityManagerService.java:1856)
  at com.android.server.am.ActivityStack.startPausingLocked(ActivityStack.java:667)
  at com.android.server.am.ActivityStack.finishActivityLocked(ActivityStack.java:2925)
  at com.android.server.am.ActivityStack.requestFinishActivityLocked(ActivityStack.java:2836)
  at com.android.server.am.ActivityManagerService.finishActivity(ActivityManagerService.java:2276)
  at android.app.ActivityManagerNative.onTransact(ActivityManagerNative.java:237)
  at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:1415)
  at android.os.Binder.execTransact(Binder.java:320)
  at dalvik.system.NativeStart.run(Native Method)

  at android.app.ActivityManagerProxy.finishActivity(ActivityManagerNative.java:1454)
  at android.app.Activity.finish(Activity.java:3260)
  at android.app.Activity.onBackPressed(Activity.java:1929)
  at android.app.Activity.onKeyUp(Activity.java:1907)
  at android.view.KeyEvent.dispatch(KeyEvent.java:1088)
  at android.app.Activity.dispatchKeyEvent(Activity.java:2087)
  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1661)
  at android.view.ViewRoot.deliverKeyEventToViewHierarchy(ViewRoot.java:2543)
  at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2516)
  at android.view.ViewRoot.handleMessage(ViewRoot.java:1866)
  at android.os.Handler.dispatchMessage(Handler.java:99)
  at android.os.Looper.loop(Looper.java:123)
  at android.app.ActivityThread.main(ActivityThread.java:3609)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:521)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
  at dalvik.system.NativeStart.main(Native Method)

Change-Id: Id49157bc635017292eaefddc5e22d73f5f4ab05e
2010-08-03 15:41:05 -07:00
Brad Fitzpatrick
cb9ceb1029 StrictMode: time violations in Binder calls
Change-Id: I5796993dce98be722cf679b78acaf0c9de0ba461
2010-07-30 14:28:55 -07:00
Brad Fitzpatrick
e73eb53125 Cap the size of StrictMode buffering we do before calling DropBox.
Change-Id: I46ea767bd0153c745e9b7eff945dacf5130f8807
2010-07-27 16:54:39 -07:00
Dianne Hackborn
14bfa398a4 Infrastructure to report running services to developer.
Change-Id: Id1aae61323e7b8357c5fcc4bc641aaa57f3b6fde
2010-07-24 20:07:17 -07:00
Brad Fitzpatrick
ad13b9807b StrictMode: batch drop box writes for system apps
Change-Id: Iab49c15ecccefea1d36d86271e1ceb37d79e9449
2010-07-15 13:18:05 -07:00
Christopher Tate
160edb3645 Add ability to guard a thread against setting its own prio to bg
The guard is compiled out by default because it adds overhead to
android.os.Process.setPriority().

Change-Id: Ibb2a648c6349b381abb7ae62a358888b04fba871
2010-06-30 18:25:01 -07:00
Christopher Tate
c27181c7f3 Remove memory monitoring from the system watchdog
This was originally written as an in-case-we-need-it facility, but was
never actually used in production.  It also soaked up a surprising amount
of cpu on occasion, as well as doing sketchy things like demoting the
system_server's primary looper thread to the background cgroup at times.

Change-Id: I9a81a8d1e9caea9e0a1277d97785fe96add438d7
2010-06-30 14:53:39 -07:00
Dianne Hackborn
50dc3bca5a Refactor ActivityManagerService activity stack.
Introdude a new ActivityStack class that holds all of the
state and management of a stack of activities.  Paves the way
for having multiple activity stacks, though at this point
there should be no change in functionality and the activity
manager is still assuming there is only one stack.

Change-Id: Iea4859a24c9269061043755ec58a615028d4183b
2010-06-25 13:07:21 -07:00
Dianne Hackborn
9d39d0cb36 Make bad notifications crash their application.
Implement notification manager handling of bad notifications, to
call a new activity manager to have the owner's process crashed
(if there is one).

Change-Id: Ib15e8d0c598756f3b39c99cc2045c18e054daf6b
2010-06-24 17:27:28 -07:00
Dianne Hackborn
01e4cfc47d Some ActivityThread/ActivityManager cleanup.
- Move PackageInfo out of ActivityThread, renaming to LoadedApk.
- Rename some of the other PacakgeInfo inner classes to better
  represent what they are.
- Rename HistoryRecord to ActivityRecord.
- Introduce AppGlobals, to eventually let ActivityThread become
  package scoped.

Change-Id: Ib714c54ceb3cdbb525dce3db9505f31042e88cf0
2010-06-24 15:20:48 -07:00
Dianne Hackborn
baf42c625c Add APIs for finding heavy-weight apps.
Change-Id: I6c865cce404cac1a08eee056f963de5d276d5898
2010-06-24 11:38:47 -07:00
Daniel Sandler
69a4817e3e Immersive activity API.
An Activity can declare itself to be "immersive" either by
setting android:immersive="true" in AndroidManifest or by
calling setImmersive(true).

Immersive activities "should" not be interrupted, for
example by Notifications with an associated
fullScreenIntent. (In the future we may even prevent any
non-system application from successfully calling
startActivity() if the foreground activity is immersive.)
Notifications with FLAG_HIGH_PRIORITY set will be shown to
the user in some less-obtrusive way if the frontmost
activity is immersive.

Change-Id: I8d0c25cc4e22371c27cbf2bb6372d2c95d57b2d7
2010-06-23 16:29:36 -04:00
Brad Fitzpatrick
04b243d0f5 Fix NPE during ANRs.
BUG=2780838

Change-Id: I0d5e9a2323130ca14d1f0df684c8abe4f4dad05a
2010-06-21 08:01:13 -07:00
Dianne Hackborn
6b7b484521 Various improvements to battery stats collection
We now clear the battery stats when unplugging after the
battery is full.  This allows us to use the "total" stats as
a new "since last charged" stat.  Total is gone.  I never used
it, it was worthless.  Since last charged is a lot more
interesting.

The battery history now collects a lot more stats, and keeps
control over how much it can collect.  Printing is now more
descriptive.

The kinds of stats have been renamed to SINCE_UNPLUGGED and
SINCE_DISCHARGED.  The other two stats are still there, but
no longer printed; a future change will eliminate them
completely along with all of their state.

Change-Id: I4e9fcfcf8c30510092c76a8594f6021e9502fbc1
2010-06-16 18:31:42 -07:00
Brad Fitzpatrick
143666f0ca StrictMode: implement the log-to-DropBox option
Change-Id: I51d12e264155078f953028241f8c5cbdc47262e8
2010-06-14 13:38:01 -07:00
Brad Fitzpatrick
46d4238746 More StrictMode work, handling violations in ActivityManagerService.
Also starts to do duplicate-suppression.

Change-Id: I0502f6ab6c45fa319298de4874ecfe44b7829d21
2010-06-11 16:11:26 -07:00
Dianne Hackborn
32907cfb38 Adjust activity manager process OOM adj.
Modify OOM adj classes a bit, to take into account the new
heavy weight app type, and give "foreground services" their
own category to have a bettery chance to manager them when
things go wrong.

Also add some new code to battery stats to keep a history
of changes to the battery level.

Change-Id: I29f5ab6938777e1a7eafd7d8c38b5e564cc9f96a
2010-06-11 10:39:11 -07:00
Brad Fitzpatrick
438d059512 Introduce "StrictMode"
This is a new public API for developers to opt-in to strict rules
about what they're allowed to do on certain threads.  (this is the
public face of the @hide dalvik.system.BlockGuard, added recently...)

In practice this will be used for developers to opt-in to declaring
that they don't want to be allowed to do various operations (such as
disk I/O or network operations) on their main UI threads.  (these
operations are often accidental, or even when they are fast come with
a good chance of being slow or very slow in some cases....)

Implementation wise, this is just a thread-local integer that has a
bitmask of the things that aren't allowed, and more bits for saying
what the violation penalty is.  The penalties, of which multiple can
be chosen, include:

  * logging
  * dropbox uploading for analysis/reporting
  * annoying dialog
  * full-on crashing

These are all only very roughly implemented at this point, but all
parts now minimally work end-to-end now, so this is a good checkpoint
commit before this gets too large.

Future CLs will polish all the above 4 penalties, including
checksumming of stacktraces and minimizing penalties for duplicate
violations.

Change-Id: Icbe61a2e950119519e7364030b10c3c28d243abe
2010-06-10 14:38:58 -07:00
Christopher Tate
8a7fa44fdc am ac24d23c: Merge "Don\'t bring up Launcher until after boot complete" into froyo
Merge commit 'ac24d23cd4a96f38b4e9cb0318a7c298794b9b6a' into kraken

* commit 'ac24d23cd4a96f38b4e9cb0318a7c298794b9b6a':
  Don't bring up Launcher until after boot complete
2010-06-07 18:48:27 -07:00
Christopher Tate
04c0af8f55 Don't bring up Launcher until after boot complete
The preboot upgrade handling was bringing up the acore process with a default
application object, then the normal "start the HOME app" code was bringing up
Launcher2 [hosted in acore] in anticipation of boot completion... but then it
saw that the host process was alive and continued with Launcher2's init.
Launcher2 depends on a custom application object, however, so it crashed
immediately.

This change ensures that the HOME app is not actually initted at that level
until after boot has completed, at which point its proper application class
can be instantiated.

Fixes bug #2732250

Change-Id: I1a15384e2c0d50e14300df0c0db236bd7b1a187c
2010-06-07 18:35:20 -07:00
Dianne Hackborn
b7bb3b3df6 Fix bug in reporting a processes's dependent component.
Also add new action to show an app's details.

Change-Id: I6ad3b3ac8462f5acf726ce76130882a262adff92
2010-06-07 11:01:29 -07:00
Dianne Hackborn
860755faa6 Add support for heavy-weight applications.
Only one can be running at a time, their process can not be killed,
and a notification is posted while it is running.

Change-Id: I843015723947e0c934ae63a1aeee139327c0bc01
2010-06-04 10:09:13 -07:00
Christopher Tate
6ee412d51d Also dump system process threads halfway through the watchdog interval
This gives us a snapshot of what the system process was doing after 30 seconds
of apparent inactivity as well as after 1 minute, to help distinguishing actual
deadlocks from too-slow progress, livelock, etc.

Change-Id: I19758861d1b25f298e88788e8f1c7ec7bf828823
2010-05-28 12:23:16 -07:00
Jeff Hamilton
acf8474b68 Don't enforce broadcast timeouts for PRE_BOOT_COMPLETED broadcasts.
They're designed to handle one time upgrade code, which may
take a significant amount of time. Third party code cannot
receive this broadcast so the timing should be able to be
kept under control.

Bug: 2713849
Change-Id: I3733b6530198bebd9b8c2ba6f9f27a7999336b8d
2010-05-26 14:02:56 -05:00
Dianne Hackborn
6f86c0e64b Fix issue #2676378: Activity Manager Crash on FRF40
D'oh!

Change-Id: If1b43ff5f230f9bf0de0887deb1b25dcf6aa6e66
2010-05-11 14:20:52 -07:00
Dianne Hackborn
906497c574 Hopefully fix issue #2662536: Why is launcher being killed?
It looks like there was a subtle bug where Process.setOomAdj() could
return false just because the given process doesn't exist, even though
it is documented to only return false if OOM killing is not supported
at all.  This would cause the activity manager to fall into its code
path of trying to clean up processes itself, which it does a much
poorer problem at.  I am thinking we may be seeing this problem more
now that the activity manager is killing background processes itself
when there are too many of them.

In addition, this change cleans up and reduces some of the logging
around killing processes.

Finally, try to improve process LRU management a bit by taking
into account process dependencies.  Any dependent processes are
pulled up in the LRU list with the processes that is actually
moving.  Also, we bring a process up if someone accesses its content
provider.

Change-Id: I34ea161f839679345578ffe681e8d9c5d26ab948
2010-05-10 17:19:58 -07:00
Dianne Hackborn
4416c3d6e4 Fix issue #2643754: Launcher is caching widget layouts for too long
With the .apk file names now changing during an update, we need
to make sure to flush all caches related to a package when the
package is removed.  Otherwise we can continue to use the old
package, since its old file may still exist if we try to load it
too soon.

Change-Id: I15f08dffca3feac999dbca4f24bef12a30ca0a66
2010-05-04 17:22:49 -07:00
Dianne Hackborn
149427cd90 Fix issue #2621809: Kill! Kill! Kill!
Stop! Stop! Stop!  Spamming the log.

Change-Id: I13f432b49d8c85165873566d58e2fb2714b1263e
2010-04-23 14:20:03 -07:00
Dianne Hackborn
8633e68ebd Fix issue #2619247: Music sometimes stops playing when navigation talks
When a service transitions from foreground to background, we now push it
to the top of the LRU list.  Also fix the activity manager to take care
of killing processes if we go beyond a reasonable number of background
process to keep around.

Change-Id: Ic9f44c02af7a111ee6f1d06142386b301948bafe
2010-04-22 16:11:18 -07:00