Merge "Optimization: remove duplicated flags computations for getInstalledPackages" into rvc-dev

This commit is contained in:
Winson Chiu
2020-04-17 21:04:18 +00:00
committed by Android (Google) Code Review
6 changed files with 42 additions and 10 deletions

View File

@@ -350,9 +350,6 @@ public class PackageInfoWithoutStateUtils {
// TODO(b/135203078): Consolidate the data directory logic, remove initForUser
ai.initForUser(userId);
ai.flags = appInfoFlags(pkg);
ai.privateFlags = appInfoPrivateFlags(pkg);
if ((flags & PackageManager.GET_META_DATA) == 0) {
ai.metaData = null;
}

View File

@@ -850,9 +850,15 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
@Deprecated
@Override
public ApplicationInfo toAppInfoWithoutState() {
ApplicationInfo appInfo = new ApplicationInfo();
ApplicationInfo appInfo = toAppInfoWithoutStateWithoutFlags();
appInfo.flags = PackageInfoWithoutStateUtils.appInfoFlags(this);
appInfo.privateFlags = PackageInfoWithoutStateUtils.appInfoPrivateFlags(this);
return appInfo;
}
@Override
public ApplicationInfo toAppInfoWithoutStateWithoutFlags() {
ApplicationInfo appInfo = new ApplicationInfo();
appInfo.appComponentFactory = appComponentFactory;
appInfo.backupAgentName = backupAgentName;

View File

@@ -858,4 +858,9 @@ public interface ParsingPackageRead extends Parcelable {
// TODO(b/135203078): Hide and enforce going through PackageInfoUtils
ApplicationInfo toAppInfoWithoutState();
/**
* same as toAppInfoWithoutState except without flag computation.
*/
ApplicationInfo toAppInfoWithoutStateWithoutFlags();
}

View File

@@ -235,8 +235,9 @@ public class PackageInfoUtils {
info.primaryCpuAbi = AndroidPackageUtils.getPrimaryCpuAbi(pkg, pkgSetting);
info.secondaryCpuAbi = AndroidPackageUtils.getSecondaryCpuAbi(pkg, pkgSetting);
info.flags |= appInfoFlags(pkg, pkgSetting);
info.privateFlags |= appInfoPrivateFlags(pkg, pkgSetting);
info.flags |= appInfoFlags(info.flags, pkgSetting);
info.privateFlags |= appInfoPrivateFlags(info.privateFlags, pkgSetting);
return info;
}
@@ -455,9 +456,18 @@ public class PackageInfoUtils {
public static int appInfoFlags(AndroidPackage pkg, @Nullable PackageSetting pkgSetting) {
// TODO(b/135203078): Add setting related state
// @formatter:off
int flags = PackageInfoWithoutStateUtils.appInfoFlags(pkg)
int pkgWithoutStateFlags = PackageInfoWithoutStateUtils.appInfoFlags(pkg)
| flag(pkg.isSystem(), ApplicationInfo.FLAG_SYSTEM)
| flag(pkg.isFactoryTest(), ApplicationInfo.FLAG_FACTORY_TEST);
return appInfoFlags(pkgWithoutStateFlags, pkgSetting);
// @formatter:on
}
/** @see ApplicationInfo#flags */
public static int appInfoFlags(int pkgWithoutStateFlags, @NonNull PackageSetting pkgSetting) {
// @formatter:off
int flags = pkgWithoutStateFlags;
if (pkgSetting != null) {
flags |= flag(pkgSetting.getPkgState().isUpdatedSystemApp(), ApplicationInfo.FLAG_UPDATED_SYSTEM_APP);
}
@@ -467,9 +477,8 @@ public class PackageInfoUtils {
/** @see ApplicationInfo#privateFlags */
public static int appInfoPrivateFlags(AndroidPackage pkg, @Nullable PackageSetting pkgSetting) {
// TODO(b/135203078): Add setting related state
// @formatter:off
return PackageInfoWithoutStateUtils.appInfoPrivateFlags(pkg)
int pkgWithoutStateFlags = PackageInfoWithoutStateUtils.appInfoPrivateFlags(pkg)
| flag(pkg.isSystemExt(), ApplicationInfo.PRIVATE_FLAG_SYSTEM_EXT)
| flag(pkg.isPrivileged(), ApplicationInfo.PRIVATE_FLAG_PRIVILEGED)
| flag(pkg.isOem(), ApplicationInfo.PRIVATE_FLAG_OEM)
@@ -477,6 +486,15 @@ public class PackageInfoUtils {
| flag(pkg.isProduct(), ApplicationInfo.PRIVATE_FLAG_PRODUCT)
| flag(pkg.isOdm(), ApplicationInfo.PRIVATE_FLAG_ODM)
| flag(pkg.isSignedWithPlatformKey(), ApplicationInfo.PRIVATE_FLAG_SIGNED_WITH_PLATFORM_KEY);
return appInfoPrivateFlags(pkgWithoutStateFlags, pkgSetting);
// @formatter:on
}
/** @see ApplicationInfo#privateFlags */
public static int appInfoPrivateFlags(int pkgWithoutStateFlags, @Nullable PackageSetting pkgSetting) {
// @formatter:off
// TODO: Add state specific flags
return pkgWithoutStateFlags;
// @formatter:on
}

View File

@@ -300,6 +300,12 @@ public interface AndroidPackage extends PkgAppInfo, PkgPackageInfo, ParsingPacka
@NonNull
ApplicationInfo toAppInfoWithoutState();
/**
* Same as toAppInfoWithoutState except it does not compute any flags.
*/
@NonNull
ApplicationInfo toAppInfoWithoutStateWithoutFlags();
/**
* TODO(b/135203078): Remove usages?
* @return a mock of what the previous package.applicationInfo would've returned for logging

View File

@@ -455,7 +455,7 @@ public final class PackageImpl extends ParsingPackageImpl implements ParsedPacka
@Override
public ApplicationInfo toAppInfoWithoutState() {
ApplicationInfo appInfo = super.toAppInfoWithoutState();
ApplicationInfo appInfo = super.toAppInfoWithoutStateWithoutFlags();
appInfo.flags = PackageInfoUtils.appInfoFlags(this, null);
appInfo.privateFlags = PackageInfoUtils.appInfoPrivateFlags(this, null);
appInfo.nativeLibraryDir = nativeLibraryDir;