Commit Graph

1364 Commits

Author SHA1 Message Date
Jeff Sharkey
da5a3e12f4 Richer ParcelFileDescriptor close events.
When reading from the end of a pipe or socket, there is no way to
tell if the other end has finished successfully, encountered an error,
or outright crashed.  To solve this, we create a second socketpair()
as a communication channel between the two ends of a pipe or
socket pair, sending a status code with details about why the
ParcelFileDescriptor was closed.

The writer end of a pipe or socket can closeWithError() to send a
message to the reader end.  When the reader encounters EOF, they
call checkError() to detect if any error occured.  This also detects
the case where the remote process died without sending a success
message.

This design is also extended to support regular files on disk, using
the communication channel above to detect various remote close events
or crashes, and delivering that event to a supplied OnCloseListener.

Replaces JNI with best-practice Libcore.os calls, and deprecates
some flags to match Context.

Bug: 10330121
Change-Id: I8cfa1e4fb6f57397667c7f785106193e0faccad3
2013-08-16 14:34:43 -07:00
Jeff Sharkey
6e14b22cfe Merge "APIs for multiple external storage devices." into klp-dev 2013-08-12 00:13:35 +00:00
Jeff Sharkey
1abdb71230 APIs for multiple external storage devices.
Provide developer APIs to discover application-specific paths on
secondary external storage devices.  Covers files, cache, and OBB
directories.  Apps will not have write access outside their package-
specific directories on secondary devices, so only primary storage is
exposed through Environment.

Creation of .nomedia files will be handled by FUSE daemon in future
change.

Change-Id: Ifcce6201a686d80269d7285adb597c008cf8fa7c
2013-08-11 17:07:44 -07:00
Romain Guy
719c44e03b Prevent AsyncTask from creating too many threads
Bug #10228005

From the ThreadPoolExecutor documentation:

  - If fewer than corePoolSize threads are running, the Executor
    always prefers adding a new thread rather than queuing.
  - If corePoolSize or more threads are running, the Executor
    always prefers queuing a request rather than adding a new thread.
  - If a request cannot be queued, a new thread is created unless
    this would exceed maximumPoolSize, in which case, the task will
    be rejected.

Before this change AsyncTask could create up to 128 threads because
of the limited queue of 10 items (the capacity of a blocking queue
is fixed.)

This change increases the size of the queue to 128 items and reduces
the maximum number of threads to the number of CPU cores * 2 + 1.
Apps can still submit the same number of tasks.

Change-Id: I015d77b53b6a9fda39c618830b34d45a10de5571
2013-08-09 16:15:18 -07:00
Jeff Sharkey
184a0100ab Allow packages.list access with new GID.
The FUSE daemon is using packages.list to map from package name to
appId after it drops permissions, so create a new "package_info" GID
to grant read access.

Also switches FileUtils to use Libcore.os.

Change-Id: I9451ca4e90e8a985526805c6df0888a244a1db36
2013-08-08 17:38:13 -07:00
Dianne Hackborn
8a0de58ece Get ProcessStats callable from other processes.
Also fix a bug where, when parceling the stats, we were
computing the final duration values too late.  We need to
do that before we write the long table.

Change-Id: Idb6c1ed95417448c56973fe5866bfb3570e525f4
2013-08-08 15:00:18 -07:00
Todd Poynor
df89ca3308 batteryservice: add battery current now and charge counter data
Available for retrieval via future APIs if desired.  Dumped by dumpsys.
Not added to batterystats or ACTION_BATTERY_CHANGED intents at this point.

Also fixes a formatting problem in the existing dumpsys output for voltage.

Change-Id: I5320b19035914256fb872c13095c09c648dd522a
2013-08-07 18:33:12 +00:00
Dianne Hackborn
d2932243e3 Refactor ProcessStats, ProcessTracker.
ProcessStats is now called ProcessCpuTracker.

ProcessTracker is now ProcessStatsService, and its inner State
class is broken out into a separate top-level ProcessStats class.
This ProcessStats is moved to the framework, so we will be able
to use it elsewhere.

Change-Id: I6a127bcb835b6b474b72647c0b99b82c2137e5c5
2013-08-06 13:54:07 -07:00
Dianne Hackborn
221ea892dc Start restricting service calls with implicit intents.
The bindService() and startService() calls have always had
undefined behavior when used with an implicit Intent and there
are multiple matching services.  Because of this, it is not
safe for applications to use such Intents when interacting with
services, yet the platform would merrily go about doing... something.

In KLP I want to cause this case to be invalid, resulting in
an exception thrown back to the app.  Unfortunately there are
lots of (scary) things relying on this behavior, so we can't
immediately turn it into an exception, even one qualified by the
caller's target SDK version.

In this change, we start loggin a WTF when such a call happens,
and clean up some stuff in Bluetooth that was doing this behavior.

Change-Id: I62e25d07890588d2362104e20b054aebb6c0e007
2013-08-05 16:53:26 -07:00
Elliott Hughes
2a805f9304 resolved conflicts for merge of 368d81fe to master
Change-Id: I4bc59cd9a54cbc1b62ac135cf86dc73ac85968d5
2013-07-31 18:25:47 -07:00
Elliott Hughes
6d4b1e24ae Switch Process.myTid over to the libcore JNI too.
Change-Id: I80eaecff014fabf809f4be3c9ee8b26aa64bf0cf
2013-07-31 17:38:11 -07:00
Jeff Hao
406ec15647 Replace native Process getpid/getuid with calls to libcore equivalents.
The Process natives were getting called were getting called while
handling a jdwp packet before the vm had a chance to register them.

(cherry-pick of 5bce6a308fc8a3c1e449cf905b8b6e8ace4ef3e2.)

Change-Id: Ia2b4f79b11e427283a712b2d0c52948f394640bf
2013-07-31 17:19:23 -07:00
Todd Poynor
a9de3462a6 Add libbatteryservice AIDL and java interfaces
Add IBatteryPropertiesRegistrar and IBatteryPropertiesListener AIDLs,
BatteryProperties class.

Change-Id: Ic8e71178c02b04868eca29c3da88e877bc2590ca
2013-07-25 02:13:49 +00:00
Geremy Condra
5830e07521 Merge "Fix supplimentary network connections with VPNs" 2013-07-23 17:58:33 +00:00
Amith Yamasani
0343ec3abb User restriction API to disable single-user restrictions feature.
Change-Id: I80e08b38b5e32f3cb1af51398907510508ec199f
2013-07-23 09:17:21 -07:00
Dianne Hackborn
450d8c5b7c Fix issue #9940105: IllegalArgumentException in ArrayMap
Try to deal with unmarshalling old parcels.  Turns out someone
was writing a parcel to disk storing a Bundle.  Naughty, naughty.
This helps us not completely keel over.

Change-Id: Id343da2690b7bab89f6c3cb6fad1b92f270dad03
2013-07-19 17:05:30 -07:00
Chad Brubaker
f336d722c7 Fix supplimentary network connections with VPNs
Enables the use of supplimentary mobile networks like MMS, and HIPRI
while VPNs are running.

Change-Id: I313f57a905b4e16bd4322c68687cbff1cfbe9d3e
2013-07-19 15:57:05 -07:00
Amith Yamasani
7e81dd274f Merge "Have UserManagerService clear the restrictions and unblock apps" 2013-07-19 19:48:21 +00:00
Dianne Hackborn
127c5ef5d7 Fix crash.
Change-Id: I0b5d846d5a9e6b1c7c3756b653833c263634270b
2013-07-18 16:51:04 -07:00
Amith Yamasani
1a7472e722 Have UserManagerService clear the restrictions and unblock apps
Since this is an operation that could take a few seconds to run and needs to be
completed even if Settings dies, best to do it in the user manager.

Refactored PIN challenge/setup UI with a field to verify existing pin
when changing to a new one.

Change-Id: I0b7df5b2ccb7f343aa9282a9245d3bc2b577a794
2013-07-18 16:12:27 -07:00
Dianne Hackborn
b87655b3e5 Switch Bundle's implementation over to ArrayMap.
That was...  um...  easier than I thought it was going to be.

Change-Id: Id8f2211c1d5f8145e0bb009dca0f62a590f2b860
2013-07-18 11:10:29 -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
John Spurlock
6098c5d355 Docfixes in IBinder, Context, View, and Intent.
Fix links in @throws clauses, typos, redundant "returns"
and use @code for true + false in returns.

Change-Id: Ic3c4c75d6061732d997a386dc3232475c992c188
2013-07-15 12:08:21 -04:00
Geremy Condra
f33468e68a Merge "Add NetworkManagement support for fwmark routes" 2013-07-12 19:47:19 +00:00
Chad Brubaker
cca54c4dec Add NetworkManagement support for fwmark routes
Add NetworkManagementService binds for netd's fwmark routes

Change-Id: I55cf6b198d56f1fb0d20818ddf176a0f779a33b6
2013-07-11 13:41:40 -07:00
Elliott Hughes
a7ac8be1f5 am dff4ec87: am e16a21c6: resolved conflicts for merge of 4a59376d to stage-aosp-master
* commit 'dff4ec87e7b942b7b4410f639fc74c2cffb386d6':
  Track libcore API change.
2013-07-11 10:16:46 -07:00
Elliott Hughes
e16a21c6b4 resolved conflicts for merge of 4a59376d to stage-aosp-master
Change-Id: I0e40180b46dc58781c218b8d382299dab73d49cc
2013-07-09 15:25:23 -07:00
Elliott Hughes
befd0b1bdf Track libcore API change.
Change-Id: Ib818a7f21325c5f918bf497033a90d76b25ec9e7
2013-07-09 14:46:18 -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
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
Amith Yamasani
5fa9f2b127 Merge "Single-user restrictions" 2013-06-26 23:04:32 +00: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
Amith Yamasani
655d0e2029 Single-user restrictions
Introduces a new "blocked" state for each package. This is used to temporarily
disable an app via Settings->Restrictions.

PIN creation and challenge activities for use by Settings and other apps. PIN
is stored by the User Manager and it manages the interval for retry attempts
across reboots.

Change-Id: I4915329d1f72399bbcaf93a9ca9c0d2e69d098dd
2013-06-25 16:03:55 -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
Svetoslav Ganov
4b9a4d1687 Print - platform APIs
Related changes:
    Skia (inlcude PDF APIs): https://googleplex-android-review.googlesource.com/#/c/305814/
    Canvas to PDF: https://googleplex-android-review.googlesource.com/#/c/319367/
    Settings (initial version): https://googleplex-android-review.googlesource.com/#/c/306077/
    Build: https://googleplex-android-review.googlesource.com/#/c/292437/
    Sample print services: https://googleplex-android-review.googlesource.com/#/c/281785/

Change-Id: I104d12efd12577f05c7b9b2a5e5e49125c0f09da
2013-06-21 18:43:17 -07:00
Dianne Hackborn
db4e33f1f1 Faster PrintWriter.
Change-Id: I4e1ae7e0357214deb7e19ae65f8701b69b347c6e
2013-06-21 16:00:30 -07:00
Dianne Hackborn
fbf7a9aea2 Merge "More work on process tracking." 2013-06-15 00:39:31 +00: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
Jeff Sharkey
214816da8e Merge "Cache AndroidBlockGuardPolicy to avoid allocation." 2013-06-14 23:26:59 +00:00
Jeff Sharkey
a2934d5ff0 Cache AndroidBlockGuardPolicy to avoid allocation.
Every incoming Binder call ends up triggering a BlockGuardPolicy
update, which would thrash between new AndroidBlockGuardPolicy
instances and BlockGuard.LAX_POLICY, causing GC churn.

This change avoids the extra allocations by recycling a single
AndroidBlockGuardPolicy in a ThreadLocal.  Worst-case thrashing case
is now 10% faster; from 7.46us to 6.65us.

Bug: 9424568
Change-Id: I9c3b1c097a2aecc9b1f109a824cf3ea319fb3393
2013-06-14 16:15:31 -07:00
Geremy Condra
e08d54b92e Merge "Add NetworkManagement methods for netd uid binds" 2013-06-13 23:30:49 +00:00
Kristian Monsen
a5512f2e0e Merge "Add javadoc to Handler.Callback.handleMessage" 2013-06-13 01:24:50 +00:00
Chad Brubaker
3277620a69 Add NetworkManagement methods for netd uid binds
Add methods to NetworkManagementService for per uid routing and DNS and
for setting up fwmark tables for interfaces.

Change-Id: Icf2c4a46f7f422660031ef73b537745922286246
2013-06-12 15:14:23 -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
Jeff Sharkey
7a1c3fce47 Accumulate network statistics based on deltas.
Network stats are now read out of the kernel in one sweep, instead of
reading per-UID.  We now accumulate the delta traffic between each
stats snapshot using the well-tested SamplingCounter pattern.

Since Wi-Fi and mobile traffic have different costs, track each
separately.  Avoids counting misc interfaces like loopback and
ethernet under total.

Bug: 5543387
Change-Id: I642004dc530113c27ef79f2abbae51d8af30117f
2013-06-06 14:35:34 -07:00
Kristian Monsen
1d3b409cd9 Add javadoc to Handler.Callback.handleMessage
Describing param and return value. There is a public bug for this at:
https://code.google.com/p/android/issues/detail?id=6464

Change-Id: Ia917cd4e047b629e6511bf12a91a5e953da8ae2e
2013-06-05 17:06:32 -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