137 Commits

Author SHA1 Message Date
TreeHugger Robot
d3b1def2eb Merge "Enable cache clearing v2 logic, fix bugs." 2017-03-15 07:16:43 +00:00
Jeff Sharkey
e730ae877a Enable cache clearing v2 logic, fix bugs.
Now that we have CTS tests to verify the cache clearing v2 logic,
we're ready to enable it!

Switch storage APIs over to "usable space" to match implementation
down in installd.  Add a missing clearCallingIdentity(), and offer
better logging for missing appop permission.

Load quotas from disk right away at device boot instead of waiting.

Bug: 35685848, 35684969
Test: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.StorageHostTest
Change-Id: I8167e0322b4662ca6c975da5c50715e2d71332a7
2017-03-14 23:39:03 -06:00
Jeff Sharkey
6bb5d0fabb Allow querying for apps on adopted storage.
Apps that live on adopted storage devices appear to be uninstalled
while ejected.  They're technically still valid apps, with allocated
UIDs, so use MATCH_UNINSTALLED_PACKAGES when querying for their
details.

Test: builds, boots
Bug: 36177795
Change-Id: Ia7ed5f0462b1f47609ea8e1ace6fa145e0b5602c
2017-03-14 11:03:09 -06:00
Daniel Nishi
f02e97cb25 Merge "Hook up the cache quota query." 2017-03-13 22:08:13 +00:00
Jeff Sharkey
2572b967ba Offer flag to force manual calculation.
Can be used to quickly pivot between manual and quota calculations
when running CTS tests.

Bug: 35684969, 35441006, 34945234
Test: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.StorageHostTest
Change-Id: I7500dde597a4f3cde20998df45c5d54a053181fc
2017-03-12 16:25:23 -06:00
TreeHugger Robot
51673a50e3 Merge "Fix two storage measurement bugs." 2017-03-12 04:56:16 +00:00
Jeff Sharkey
82add8a714 Fix two storage measurement bugs.
First, every time installd starts up we need to invalidateMounts()
to ensure we have valid mappings for quotactl() to work.  (Without
this forced invalidation, we were falling back to manual calculation
after an installd restart.)

Second, when calculating the disk space for an app, we need to use
the real appId deconstructed from the uid; oops!  (Without this we
were always trying to calculate the disk usage for UID 0, which
forced us back into the slow-path.)

Bug: 36032444, 35706513
Test: runtest -x frameworks/base/services/tests/servicestests/src/com/android/server/pm/InstallerTest.java
Change-Id: I1ca55e2b7670678ed55798e2e06857d727ce2487
2017-03-11 19:45:32 -07:00
Sudheer Shanka
8025580449 Update IUidObserver.onUidStateChanged to include procStateSeq.
This procStateSeq is associated with the process state change of
an uid and will help in identifying if network policy rules have been
updated for a process state change.

Bug: 27803922
Test: runtest -c com.android.server.am.ActivityManagerServiceTest
      frameworks-services
Change-Id: Iaab8d004f476b96f28d08c886c7b0a6b585b9fef
2017-03-10 16:04:41 -08:00
Daniel Nishi
80fdb0149d Hook up the cache quota query.
Apps should now be able to get the real cache quota
value, instead of a stock 64MB.

Bug: 33965858
Test: Manually verified that an app recevied a non-64MB quota.
Change-Id: Idba47ecba356ffb592694a0d5a72363f3d0e95d0
2017-03-10 12:31:07 -08:00
Daniel Nishi
045d07b47f Merge "Persist the debug time correction flag." 2017-03-03 21:35:18 +00:00
Daniel Nishi
e40da3c1b7 Save/load calculated cache quotas to a file.
This will prevent us from unnecessarily redoing calculation work
by loading the last caches on boot and shoving them down to
installd.

Bug: 33965858
Test: Framework services tests
Change-Id: Ie94e269aa72bceb1ebe87911eaa42e2d826c1123
2017-03-02 14:22:24 -08:00
Daniel Nishi
68535229fc Persist the debug time correction flag.
This simplifies the QA process significantly more than
I originally expected.

Bug: 34400961
Test: Manual
Change-Id: I5d26526e7ea9a7f16a00b7c2281c5b460f6bbbff
2017-03-01 15:24:37 -08:00
Daniel Nishi
19710527d7 Merge "Add a debug flag to disable time correction." 2017-03-01 22:16:48 +00:00
Amith Yamasani
61d5fd7fee Reduce screen on delay during UsageStats rollover
Decoupled the app idle book-keeping from usage stats lock, by
introducing an mAppIdleLock. This is used for all state related
to app idle. In some cases, the locks will be nested, with
mLock being acquired first and then mAppIdleLock.

This should fix the situation where a rollover, which writes to
disk and could take several seconds when the system is swamped,
like when the device just came out of idle and the screen was
turned on (like this run-on sentence), causes calls from other
services for app-idle status to be blocked. This was resulting
in a long time to turn on the screen.

Also fixed a dump indentation issue.

Bug: 34627115
Bug: 34961340
Test: Manual, force into idle, increased rollover frequency,
      and tested screen on time.

Change-Id: Ie8b44e6f07f82d8a31f1b733a403dd9b6dc310f6
2017-02-24 14:54:36 -08:00
Daniel Nishi
9acc4f40c8 Add a debug flag to disable time correction.
This allows manual QA folks to change the datetime to test events
which depend on a large gap between uses of an app.

Currently, if the system detects a drift of more than 2 seconds,
it will automatically correct the usage stats. This means that manual
time changes will cause the usage stats to update to match, making it
impossible to test manually.

Bug: 34400961
Test: Manual
Change-Id: Iffb92c929872d841d22f089ec71922bf120cc544
2017-02-23 12:36:03 -08:00
Jeff Sharkey
6f2c1ea250 Merge "Add queryStatsForPackage() API." 2017-02-23 03:21:47 +00:00
Jeff Sharkey
373d01766f Add queryStatsForPackage() API.
This gives developers a way to collect package-level stats, even if
it means we have to use manual calculation for sharedUserId apps.

Also round size of storage devices to nice power-of-two values so we
do a better job of matching retail packaging.

Test: builds, boots
Bug: 35294241
Change-Id: I24946c443bb9dc4b0411a8149a0656702ac1fd24
2017-02-22 15:48:51 -07:00
Daniel Nishi
0f703e64e3 Add a flag to enable/disable the cache quota calc.
Bug: 34770259
Test: ServicesTests
Change-Id: I74155203c4802b1a3b89117859002bf40b1ca435
2017-02-22 11:24:10 -08:00
Jeff Sharkey
830d4b422d Merge "Clear cache space when allocating bytes." 2017-02-21 20:56:59 +00:00
Jeff Sharkey
d5d5e926eb Clear cache space when allocating bytes.
Fleshes out remainder of allocation implementation, where we offer
to clear cached data to satisfy the allocation request.  To prevent
abuse, we never let apps allocate into either the minimum cache space
or low storage space.

Clean up quota APIs to require the caller to pass in the path they're
interested in, and we resolve the underlying filesystem for them.

Defines settings that can be used to tweak the minimum cache space.

Test: builds, boots
Bug: 34690590
Change-Id: I85bc07399f91ee4aa568a8a54c615646bf748ad4
2017-02-21 11:50:55 -07:00
Daniel Nishi
cf9d19e030 First pass at adding the cache quota suggestions.
This currently integrates with installd, but not with
any framework API to expose this information to apps.

The first pass, as per the design doc, adds a service
which polls for large changes in the file system free space.
If enough spaces changes, it begins a recalculation of the
cache quotas and pipes the information down to installd.
This calculation is done in the updateable ExtServices.

Further enhancements in later patches include integrating this
to listen to package install and removal events, caching the
last computed quota values into an XML file on disk to load
on boot, and exposing the information to apps.

Bug: 33965858
Test: ExtServices unit test

Change-Id: Ie39f228b73532cb6ce2f98529f7c5df0839202ae
2017-02-17 10:26:16 -08:00
Jeff Sharkey
7d5420eda7 Enable kernel UID state updates.
Test: builds, boots
Bug: 34364961
Change-Id: Ia20c666063cb2e5cd91b401cc3be48fc83959010
2017-01-24 15:17:18 -07:00
Jeff Sharkey
9bed070b09 More APIs for cache status and behavior.
Add APIs for apps to query their cache usage compared to their
currently allocated quota.  Since an app's private storage may live
on a different storage volume than the primary shared/external
storage, offer APIs to retrieve those values separately.

Add APIs to control two new cache purging behaviors:

-- setCacheBehaviorAtomic() which causes a marked directory and its
contents to be treated as an atomic unit.
-- setCacheBehaviorTombstone() which causes the OS to truncate
files instead of deleting them.

Test: builds, boots
Bug: 33811826, 33965858, 27948817
Change-Id: I45de165623775c359f78b4ee544c2b5831b8d483
2017-01-23 21:02:12 -07:00
Jeff Sharkey
063c454b07 Disable kernel UID updates until update lands.
Current prebuilt kernel can result in the framework banging its head
against the wall writing the first duplicate update; it does this by
returning 0 for write().

We can revert this or flip the flag once an updated kernel lands.

Test: builds, boots
Bug: 33755020
Change-Id: Idb3e5ad40e2e6681848b47ce2b29dff9db3d4f6f
2017-01-19 20:25:06 -07:00
Jeff Sharkey
24caec2dad Merge "Write bg/fg status updates to kernel for stats." 2017-01-18 04:47:04 +00:00
Jeff Sharkey
f3b0ef2f40 Write bg/fg status updates to kernel for stats.
New procfs file written by the system_server to communicate fg/bg
state of UIDs to switch the statistics counter sets used.

Test: builds, boots, counter sets updated
Bug: 34360629
Change-Id: I3339a93bce6aec65779a4a4aee52f5328896bb29
2017-01-17 18:41:03 -07:00
Jeff Sharkey
7d25fafea7 Invalidate installd when mounts change.
Test: builds, boots, common operations work
Bug: 34249218
Change-Id: Ia893b43dd7ff6078d91df50a9e8d644583617982
2017-01-16 20:58:43 -07:00
Kang Li
9fa2a2cd46 Adds annotations to Intent, and enables ChooserActivity to rank apps
according to annotations.

Test: Unit tests and manul tests. More unit tests to be added.
Change-Id: I3cbfd0cc10007290585fa3e7e3c92e1731f1f7b8
2017-01-13 17:40:44 -08:00
TreeHugger Robot
f0707fe34a Merge "Fix a near instant stats permission check false negative." 2017-01-13 19:36:46 +00:00
Daniel Nishi
2f0b45ab60 Initialize the Installer in the StorageStatsService.
Without this, the Installer never connects to the underlying
installd service, which results in NPEs when the service is used.

Bug: 34261458
Test: builds and runs w/o crashing
Change-Id: I9222c26cf6e411710e07a74f29b019f7c5754316
2017-01-12 17:19:50 -08:00
Daniel Nishi
d85d85394e Fix a near instant stats permission check false negative.
The MODE_DEFAULT enforcePermission behavior fell through to
the switch default case, even if the calling permission was
granted.

Bug: 34258237
Test: Manual
Change-Id: I823fb4dc3657c15eb1fa3d12d4f4c7e1e9e21cd5
2017-01-12 16:10:57 -08:00
Jeff Sharkey
8dedad31f7 Wire up storage stats API to installd.
Now that installd has the implementation details we need, we can wire
up the public APIs to use them.

Shuffle APIs around a bit so that StorageStats can be reused for both
UID and UserHandle results, and rename StorageSummary to
ExternalStorageStats.  Provide getTotalBytes() and getFreeBytes() as
first-class methods so we can answer those questions quickly without
paying the cost of measuring external storage details.

Current costs on a typical device with a test account after flushing
dentry caches:

queryStatsForUid() manual: 6922ms
queryStatsForUid() quota: 525ms

queryStatsForUser() manual: 1686ms
queryStatsForUser() quota: 113ms

queryExternalStatsForUser() manual: 42ms
queryExternalStatsForUser() quota: 2ms

For verification purposes, a new "fw.verify_storage" system property
can be set to compute both manual and quota statistics, and log any
discrepancies.

Test: builds, boots
Bug: 27948817, 32206268
Change-Id: I4ea3df3372a7379aa8cf4c20c44120c8f0702c15
2017-01-09 22:30:58 -07:00
Jeff Sharkey
e8cece9f20 Initial API shape for storage statistics.
This API is designed to provide both UID-level stats and overall
summary data for a given storage device, as identified by UUID.

The use of UID-level granularity might appear a bit clunky, but it
matches other usage statistics (such as network and battery), and it
allows us to implement it using an extremely fast quota kernel
feature.

A future CL will wire up the implementation to installd.

Test: builds, boots
Bug: 32206268
Change-Id: I7b51877682d0370c2402c19346f57809f0e7ac53
2017-01-05 15:39:16 -07:00
Kang Li
b431d715a3 Merge "Add Sharing Histories to UsageStatsManager." 2016-12-14 19:26:34 +00:00
Kang Li
53b4314ad9 Add Sharing Histories to UsageStatsManager.
This CL is for Android O Smart-Sharing (b/30982298). By this CL, sharing
counts are logged with UsageStatsManager.

Bug: 30982298
Test: manual - shared images in Camera and texts in Chrome using a mobile device.

Change-Id: I0b4aa0506f99b3083d140a48f7b4bdd5b1c5afb6
2016-12-13 17:35:38 -08:00
Amith Yamasani
0d1fd8d091 Secure MATCH_UNINSTALLED_PACKAGES across users
Introduce a new internal flag MATCH_ANY_USER for genuine uses
of searching through all apps on the device.

Some temporary accommodations for Launchers that reach across
to the work profile until we have a new LauncherApps API to do
that officially.

Bug: 31000380
Test: CTS tests added
Change-Id: I2e43dc49d6c2e11814a8f8d1eb07ef557f31af34
2016-11-30 13:24:53 -08:00
Sudheer Shanka
dc589ac82b Update usage of ActivityManagerNative.
- Remove references to ActivityManagerProxy.
- Add isSystemReady to ActivityManager.

Bug: 30977067
Test: cts/hostsidetests/services/activityandwindowmanager/util/run-test android.server.cts
      adb shell am instrument -e class com.android.server.am.ActivityManagerTest,com.android.server.am.TaskStackChangedListenerTest \
          -w com.android.frameworks.servicestests/android.support.test.runner.AndroidJUnitRunner
Change-Id: I07390b6124fb1515821f5c0b37baf6ae74adc8fa
2016-11-14 11:27:12 -08:00
Amith Yamasani
693d869b32 Handle charging state separately from temporary parole
Don't use the parole state to deal with the plugged-in trigger.
Otherwise standby apps will only be paroled for a few minutes
after plugging in to charge and not the entire duration.

Use a different intent for charging state, since the CHARGING
intent takes several seconds to be received.

A refactor some time ago changed the charging state behavior
that caused this regression.

Bug: 31399882
Change-Id: Ic036de5e136b3151b225473d0c3f440adb3b48e7
2016-09-15 13:38:43 -07:00
Adam Lesinski
f2d87eba75 AppIdleHistory: Only write screen on durations during regular sync
Stop writing to disk every time the display goes off. Only write to
disk periodically.

Consequences

Previously, if the device rebooted after the screen duration was written
to disk, apps would appear more stale than they actually were.

Now apps will always look fresher, which is a better scenario.

Bug:30807864
Change-Id: Ia69a2e51fc9e397789215b449fae56fa3e29c74a
2016-08-17 16:42:46 -07:00
Tony Mak
589fca469f Whitelisting device provisioning package from app standby
Change-Id: Ib9cb7a3fdf7aa16a97f22eacbed872880b7f9fbe
Fix: 29892977
2016-07-15 03:41:41 +00:00
Makoto Onuki
ac042501c8 ShortcutManager: Implement usage report API
Bug 28536054

Change-Id: I293e8eaad523e3b0d76d562fc381601633451ed3
2016-06-02 15:57:40 -07:00
Dianne Hackborn
5fb47f3ed7 Fix issue #28118215: Crash during system boot due to null carrier apps
Change-Id: I607ccc4baf769c2fb78b0d745bf9fddc3d240855
2016-04-11 13:02:08 -07:00
David Brazdil
ae4cde1cce Do not update idle apps on OTA
Modifies the PackageManagerService.updatePackagesIfNeeded to filter
out packages which are considered idle by the UsageStatsManager.

Bug: 27902702
Change-Id: I8847dfc283e0246265009effb6394bb774848eb3
2016-04-06 15:21:31 +01:00
Amith Yamasani
bdda1e076e Clear app idle state for removed packages
On a package being added or removed, remove
app idle state for the app.

Bug: 27570398
Bug: 26182816
Change-Id: I14bdc1f951bbd99bda8111bea56f8c9dda04148d
2016-03-14 11:55:38 -07:00
Jeff Sharkey
c53962d4ed When system server goes down, crash apps more.
Apps making calls into the system server may end up persisting
internal state or making security decisions based on the perceived
success or failure of a call, or the default values returned.

The reality is that if the system process just died, init will be
along shortly to kill all running apps, so we should have no problem
rethrowing the RemoteException as a RuntimeException.

Bug: 27364859
Change-Id: Ife0bcb079636c88d54c44d17eb580409fd79028b
2016-03-01 19:29:16 -07:00
Amith Yamasani
4ec6368f13 Optimize calls to TelephonyManager to check for privileged apps
Calling into TelephonyManager each of hundreds of apps to check
if the app is carrier privileged was very expensive, especially
when there aren't even any carrier access rules specified. This
change fetches all the carrier privileged apps in one call,
reducing the number of IPC calls to the radio process and checks
the package names locally.

If the carrier rules change or packages are modified, the list
will be computed and fetched again.

Other optimizations in Telephony help speed up the individual calls
to check if a package is privileged, as well.

Bug: 27271861
Change-Id: I5a77b6da4f2cdc603d2a73bd8569c5c38f06b42d
2016-02-24 11:30:00 -08:00
Amith Yamasani
b1e153bcd2 Reduce locking duration when checking idle states
Synchronize only the methods that need to be, so that
the lock is not held for a few hundred milliseconds, blocking
other usagestats operations.

Bug: 27208519
Change-Id: I43bda0791dd8b2576a8af506bcdc67a09a5830f2
2016-02-18 11:22:30 -08:00
Amith Yamasani
ca5d6d2a81 Clean up App Standby code
Don't continue to check idle states for removed / stopped users.
No need to check for uninstalled packages for all users.

Bug: 27208519
Change-Id: I9a3a3bbec560dd380ce90df9fef102d7f62769ca
2016-02-17 13:36:48 -08:00
Ritesh Reddy
c170204541 Merge "UsageStatsBackup Bug Fix" 2016-02-06 19:42:14 +00:00
Amith Yamasani
a93542f9d3 Rewrite app standby stats
Don't mix up with usage stats. Keep a separate db and history
based on elapsed time and screen on time.

Unit tests for AppIdleHistory class.

Bug: 26989006
Change-Id: If343785b46da1db67f7c1c1263854c2732a232c6
2016-02-05 11:38:29 -08:00