Skip to content
Commit 0653379d authored by Lee Shombert's avatar Lee Shombert
Browse files

Make 12 PackageManagerService APIs lock-free

Bug: 161323622

The following public PackageManagerService APIs are handled by the
snapshot computer.  They operate on read-only PackageManagerService
state, as captured in the Snapshot class.
 * checkUidPermission
 * getActivityInfo
 * getApplicationInfo
 * getInstalledPackages
 * getInstantAppPackageName
 * getPackage
 * getPackage
 * getPackageInfo
 * getPackageSetting
 * getPackagesForUid
 * getServiceInfo
 * isInstantApp

The ComputerEngine class is a closure over the functions and state
required by the above APIs.  The closure consists of 64 functions.
The code for the 64 functions is moved into the ComputerEngine class.
The code is not modified except that any synchronized blocks are
deleted.  The corresponding PackageManagerService functions are now
implemented as calls into ComputerEngine.  If the PMS function is one
of the above eight, then the call is into the snapshot engine.
Otherwise the call is into the "live" engine, which operates directly
on PackageManagerService state.

Functions that are delegated to the snapshot engine are tagged with a
"// SNAPSHOT" comment.

Test: atest
 * FrameworksServicesTests:UserSystemPackageInstallerTest
 * FrameworksServicesTests:PackageManagerSettingsTests
 * FrameworksServicesTests:PackageManagerServiceTest
 * FrameworksServicesTests:AppsFilterTest
 * FrameworksServicesTests:PackageInstallerSessionTest
 * FrameworksServicesTests:ScanTests

Change-Id: Idb31622e14fa3aca60ff5de0fa76b85c65716f64
parent a4af838b
Loading
Loading
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment