Cherry pick: Add batched createAppData API to installd.
Benchmarking creation of new users shows on a freshly setup device sees many individual binder calls from system server into installd to create app data directories. Batching these calls shows a significant performance improvement. Bug: 153171028 Test: Manually create guest user, trace performance with Perfetto. Change-Id: Iea43c058d465be44c0937bf6c353555869fc9fd2 Merged-In: Iea43c058d465be44c0937bf6c353555869fc9fd2
This commit is contained in:
parent
931c87d986
commit
872d2af935
3 changed files with 35 additions and 1 deletions
|
@ -420,6 +420,32 @@ static bool prepare_app_profile_dir(const std::string& packageName, int32_t appI
|
|||
return true;
|
||||
}
|
||||
|
||||
binder::Status InstalldNativeService::createAppDataBatched(
|
||||
const std::unique_ptr<std::vector<std::unique_ptr<std::string>>>& uuids,
|
||||
const std::unique_ptr<std::vector<std::unique_ptr<std::string>>>& packageNames,
|
||||
int32_t userId, int32_t flags, const std::vector<int32_t>& appIds,
|
||||
const std::vector<std::string>& seInfos, const std::vector<int32_t>& targetSdkVersions,
|
||||
int64_t* _aidl_return) {
|
||||
ENFORCE_UID(AID_SYSTEM);
|
||||
std::lock_guard<std::recursive_mutex> lock(mLock);
|
||||
|
||||
ATRACE_BEGIN("createAppDataBatched");
|
||||
binder::Status ret;
|
||||
for (size_t i = 0; i < uuids->size(); i++) {
|
||||
if (!packageNames->at(i)) {
|
||||
continue;
|
||||
}
|
||||
ret = createAppData(uuids->at(i), *packageNames->at(i), userId, flags, appIds[i],
|
||||
seInfos[i], targetSdkVersions[i], _aidl_return);
|
||||
if (!ret.isOk()) {
|
||||
ATRACE_END();
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
ATRACE_END();
|
||||
return ok();
|
||||
}
|
||||
|
||||
binder::Status InstalldNativeService::createAppData(const std::unique_ptr<std::string>& uuid,
|
||||
const std::string& packageName, int32_t userId, int32_t flags, int32_t appId,
|
||||
const std::string& seInfo, int32_t targetSdkVersion, int64_t* _aidl_return) {
|
||||
|
|
|
@ -44,7 +44,12 @@ public:
|
|||
int32_t userSerial, int32_t flags);
|
||||
binder::Status destroyUserData(const std::unique_ptr<std::string>& uuid, int32_t userId,
|
||||
int32_t flags);
|
||||
|
||||
binder::Status createAppDataBatched(
|
||||
const std::unique_ptr<std::vector<std::unique_ptr<std::string>>>& uuids,
|
||||
const std::unique_ptr<std::vector<std::unique_ptr<std::string>>>& packageNames,
|
||||
int32_t userId, int32_t flags, const std::vector<int32_t>& appIds,
|
||||
const std::vector<std::string>& seInfos, const std::vector<int32_t>& targetSdkVersions,
|
||||
int64_t* _aidl_return);
|
||||
binder::Status createAppData(const std::unique_ptr<std::string>& uuid,
|
||||
const std::string& packageName, int32_t userId, int32_t flags, int32_t appId,
|
||||
const std::string& seInfo, int32_t targetSdkVersion, int64_t* _aidl_return);
|
||||
|
|
|
@ -23,6 +23,9 @@ interface IInstalld {
|
|||
|
||||
long createAppData(@nullable @utf8InCpp String uuid, in @utf8InCpp String packageName,
|
||||
int userId, int flags, int appId, in @utf8InCpp String seInfo, int targetSdkVersion);
|
||||
long createAppDataBatched(in @nullable @utf8InCpp String[] uuids,
|
||||
in @nullable @utf8InCpp String[] packageNames, in int userId, int flags, in int[] appIds,
|
||||
in @utf8InCpp String[] seInfos, in int[] targetSdkVersions);
|
||||
void restoreconAppData(@nullable @utf8InCpp String uuid, @utf8InCpp String packageName,
|
||||
int userId, int flags, int appId, @utf8InCpp String seInfo);
|
||||
void migrateAppData(@nullable @utf8InCpp String uuid, @utf8InCpp String packageName,
|
||||
|
|
Loading…
Reference in a new issue