Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ee296a25 authored by Rhed Jao's avatar Rhed Jao Committed by Android (Google) Code Review
Browse files

Merge "Move shared library info out of PackageManagerService (1/n)"

parents b2fb0297 e7982811
Loading
Loading
Loading
Loading
+6 −57
Original line number Diff line number Diff line
@@ -320,10 +320,7 @@ public class ComputerEngine implements Computer {
    private final WatchedArrayMap<String, AndroidPackage> mPackages;
    private final WatchedArrayMap<ComponentName, ParsedInstrumentation>
            mInstrumentation;
    private final WatchedArrayMap<String, WatchedLongSparseArray<SharedLibraryInfo>>
            mStaticLibsByDeclaringPackage;
    private final WatchedArrayMap<String, WatchedLongSparseArray<SharedLibraryInfo>>
            mSharedLibraries;
    private final SharedLibrariesRead mSharedLibraries;
    private final ComponentName mLocalResolveComponentName;
    private final ActivityInfo mResolveActivity;
    private final WatchedSparseBooleanArray mWebInstantAppsDisabled;
@@ -375,8 +372,7 @@ public class ComputerEngine implements Computer {
        mSettings = new Settings(args.settings);
        mIsolatedOwners = args.isolatedOwners;
        mPackages = args.packages;
        mSharedLibraries = args.sharedLibs;
        mStaticLibsByDeclaringPackage = args.staticLibs;
        mSharedLibraries = args.sharedLibraries;
        mInstrumentation = args.instrumentation;
        mWebInstantAppsDisabled = args.webInstantAppsDisabled;
        mLocalResolveComponentName = args.resolveComponentName;
@@ -2006,8 +2002,7 @@ public class ComputerEngine implements Computer {

    @Nullable
    public final SharedLibraryInfo getSharedLibraryInfo(String name, long version) {
        return SharedLibraryHelper.getSharedLibraryInfo(
                name, version, mSharedLibraries, null);
        return mSharedLibraries.getSharedLibraryInfo(name, version);
    }

    /**
@@ -2058,7 +2053,7 @@ public class ComputerEngine implements Computer {

        // Is this a static library?
        WatchedLongSparseArray<SharedLibraryInfo> versionedLib =
                mStaticLibsByDeclaringPackage.get(packageName);
                mSharedLibraries.getStaticLibraryInfos(packageName);
        if (versionedLib == null || versionedLib.size() <= 0) {
            return packageName;
        }
@@ -3056,54 +3051,8 @@ public class ComputerEngine implements Computer {
            }

            case DumpState.DUMP_LIBS:
            {
                boolean printedHeader = false;
                final int numSharedLibraries = mSharedLibraries.size();
                for (int index = 0; index < numSharedLibraries; index++) {
                    final String libName = mSharedLibraries.keyAt(index);
                    final WatchedLongSparseArray<SharedLibraryInfo> versionedLib =
                            mSharedLibraries.get(libName);
                    if (versionedLib == null) {
                        continue;
                    }
                    final int versionCount = versionedLib.size();
                    for (int i = 0; i < versionCount; i++) {
                        SharedLibraryInfo libraryInfo = versionedLib.valueAt(i);
                        if (!checkin) {
                            if (!printedHeader) {
                                if (dumpState.onTitlePrinted()) {
                                    pw.println();
                                }
                                pw.println("Libraries:");
                                printedHeader = true;
                            }
                            pw.print("  ");
                        } else {
                            pw.print("lib,");
                        }
                        pw.print(libraryInfo.getName());
                        if (libraryInfo.isStatic()) {
                            pw.print(" version=" + libraryInfo.getLongVersion());
                        }
                        if (!checkin) {
                            pw.print(" -> ");
                        }
                        if (libraryInfo.getPath() != null) {
                            if (libraryInfo.isNative()) {
                                pw.print(" (so) ");
                            } else {
                                pw.print(" (jar) ");
                            }
                            pw.print(libraryInfo.getPath());
                        } else {
                            pw.print(" (apk) ");
                            pw.print(libraryInfo.getPackageName());
                        }
                        pw.println();
                    }
                }
                mSharedLibraries.dump(pw, dumpState);
                break;
            }

            case DumpState.DUMP_PREFERRED:
                mSettings.dumpPreferred(pw, dumpState, packageName);
@@ -3544,7 +3493,7 @@ public class ComputerEngine implements Computer {
    @NonNull
    @Override
    public WatchedArrayMap<String, WatchedLongSparseArray<SharedLibraryInfo>> getSharedLibraries() {
        return mSharedLibraries;
        return mSharedLibraries.getAll();
    }

    @NonNull
+1 −32
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ import android.content.ComponentName;
import android.content.pm.FeatureInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
import android.content.pm.SharedLibraryInfo;
import android.os.Binder;
import android.os.UserHandle;
import android.os.incremental.PerUidReadTimeouts;
@@ -37,7 +36,6 @@ import android.util.proto.ProtoOutputStream;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.IndentingPrintWriter;
import com.android.server.pm.verify.domain.proxy.DomainVerificationProxy;
import com.android.server.utils.WatchedLongSparseArray;

import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -710,7 +708,7 @@ final class DumpHelper {
                proto.end(verifierPackageToken);
            }

            dumpSharedLibrariesProto(proto);
            mPm.mInjector.getSharedLibrariesImpl().dumpProto(proto);
            dumpFeaturesProto(proto);
            mPm.mSettings.dumpPackagesProto(proto);
            mPm.mSettings.dumpSharedUsersProto(proto);
@@ -728,33 +726,4 @@ final class DumpHelper {
            }
        }
    }

    private void dumpSharedLibrariesProto(ProtoOutputStream proto) {
        final int count = mPm.mSharedLibraries.size();
        for (int i = 0; i < count; i++) {
            final String libName = mPm.mSharedLibraries.keyAt(i);
            WatchedLongSparseArray<SharedLibraryInfo> versionedLib =
                    mPm.mSharedLibraries.get(libName);
            if (versionedLib == null) {
                continue;
            }
            final int versionCount = versionedLib.size();
            for (int j = 0; j < versionCount; j++) {
                final SharedLibraryInfo libraryInfo = versionedLib.valueAt(j);
                final long sharedLibraryToken =
                        proto.start(PackageServiceDumpProto.SHARED_LIBRARIES);
                proto.write(PackageServiceDumpProto.SharedLibraryProto.NAME, libraryInfo.getName());
                final boolean isJar = (libraryInfo.getPath() != null);
                proto.write(PackageServiceDumpProto.SharedLibraryProto.IS_JAR, isJar);
                if (isJar) {
                    proto.write(PackageServiceDumpProto.SharedLibraryProto.PATH,
                            libraryInfo.getPath());
                } else {
                    proto.write(PackageServiceDumpProto.SharedLibraryProto.APK,
                            libraryInfo.getPackageName());
                }
                proto.end(sharedLibraryToken);
            }
        }
    }
}
+17 −15
Original line number Diff line number Diff line
@@ -207,6 +207,7 @@ final class InstallPackageHelper {
    private final PackageAbiHelper mPackageAbiHelper;
    private final ViewCompiler mViewCompiler;
    private final IBackupManager mIBackupManager;
    private final SharedLibrariesImpl mSharedLibraries;

    // TODO(b/198166813): remove PMS dependency
    InstallPackageHelper(PackageManagerService pm, AppDataHelper appDataHelper) {
@@ -226,6 +227,7 @@ final class InstallPackageHelper {
        mPackageAbiHelper = pm.mInjector.getAbiHelper();
        mViewCompiler = pm.mInjector.getViewCompiler();
        mIBackupManager = pm.mInjector.getIBackupManager();
        mSharedLibraries = pm.mInjector.getSharedLibrariesImpl();
    }

    InstallPackageHelper(PackageManagerService pm) {
@@ -325,7 +327,7 @@ final class InstallPackageHelper {
        }

        if (reconciledPkg.mCollectedSharedLibraryInfos != null) {
            mPm.executeSharedLibrariesUpdateLPr(pkg, pkgSetting, null, null,
            mSharedLibraries.executeSharedLibrariesUpdateLPw(pkg, pkgSetting, null, null,
                    reconciledPkg.mCollectedSharedLibraryInfos, allUsers);
        }

@@ -388,13 +390,13 @@ final class InstallPackageHelper {
        synchronized (mPm.mLock) {
            if (!ArrayUtils.isEmpty(reconciledPkg.mAllowedSharedLibraryInfos)) {
                for (SharedLibraryInfo info : reconciledPkg.mAllowedSharedLibraryInfos) {
                    mPm.commitSharedLibraryInfoLocked(info);
                    mSharedLibraries.commitSharedLibraryInfoLPw(info);
                }
                final Map<String, AndroidPackage> combinedSigningDetails =
                        reconciledPkg.getCombinedAvailablePackages();
                try {
                    // Shared libraries for the package need to be updated.
                    mPm.updateSharedLibrariesLocked(pkg, pkgSetting, null, null,
                    mSharedLibraries.updateSharedLibrariesLPw(pkg, pkgSetting, null, null,
                            combinedSigningDetails);
                } catch (PackageManagerException e) {
                    Slog.e(TAG, "updateSharedLibrariesLPr failed: ", e);
@@ -402,7 +404,7 @@ final class InstallPackageHelper {
                // Update all applications that use this library. Skip when booting
                // since this will be done after all packages are scaned.
                if ((scanFlags & SCAN_BOOTING) == 0) {
                    clientLibPkgs = mPm.updateAllSharedLibrariesLocked(pkg, pkgSetting,
                    clientLibPkgs = mSharedLibraries.updateAllSharedLibrariesLPw(pkg, pkgSetting,
                            combinedSigningDetails);
                }
            }
@@ -945,7 +947,7 @@ final class InstallPackageHelper {
                    if (result.mStaticSharedLibraryInfo != null
                            || result.mSdkSharedLibraryInfo != null) {
                        final PackageSetting sharedLibLatestVersionSetting =
                                mPm.getSharedLibLatestVersionSetting(result);
                                mSharedLibraries.getSharedLibLatestVersionSetting(result);
                        if (sharedLibLatestVersionSetting != null) {
                            lastStaticSharedLibSettings.put(
                                    result.mPkgSetting.getPkg().getPackageName(),
@@ -961,7 +963,7 @@ final class InstallPackageHelper {
                    reconcileRequest = new ReconcileRequest(preparedScans, installArgs,
                    installResults,
                    prepareResults,
                    mPm.mSharedLibraries,
                    mSharedLibraries.getAll(),
                    Collections.unmodifiableMap(mPm.mPackages), versionInfos,
                    lastStaticSharedLibSettings);
            CommitRequest commitRequest = null;
@@ -1207,7 +1209,7 @@ final class InstallPackageHelper {
                // the package setting for the latest library version.
                PackageSetting signatureCheckPs = ps;
                if (parsedPackage.isStaticSharedLibrary()) {
                    SharedLibraryInfo libraryInfo = mPm.getLatestSharedLibraVersionLPr(
                    SharedLibraryInfo libraryInfo = mSharedLibraries.getLatestSharedLibraVersionLPr(
                            parsedPackage);
                    if (libraryInfo != null) {
                        signatureCheckPs = mPm.mSettings.getPackageLPr(
@@ -2969,7 +2971,8 @@ final class InstallPackageHelper {
                synchronized (mPm.mLock) {
                    mAppDataHelper.prepareAppDataAfterInstallLIF(pkg);
                    try {
                        mPm.updateSharedLibrariesLocked(pkg, stubPkgSetting, null, null,
                        mSharedLibraries.updateSharedLibrariesLPw(
                                pkg, stubPkgSetting, null, null,
                                Collections.unmodifiableMap(mPm.mPackages));
                    } catch (PackageManagerException e) {
                        Slog.w(TAG, "updateAllSharedLibrariesLPw failed: ", e);
@@ -3180,7 +3183,7 @@ final class InstallPackageHelper {

        try {
            // update shared libraries for the newly re-installed system package
            mPm.updateSharedLibrariesLocked(pkg, pkgSetting, null, null,
            mSharedLibraries.updateSharedLibrariesLPw(pkg, pkgSetting, null, null,
                    Collections.unmodifiableMap(mPm.mPackages));
        } catch (PackageManagerException e) {
            Slog.e(TAG, "updateAllSharedLibrariesLPw failed: " + e.getMessage());
@@ -3559,15 +3562,14 @@ final class InstallPackageHelper {
                            ReconcilePackageUtils.reconcilePackages(
                                    new ReconcileRequest(
                                            Collections.singletonMap(pkgName, scanResult),
                                            mPm.mSharedLibraries,
                                            mSharedLibraries.getAll(),
                                            mPm.mPackages,
                                            Collections.singletonMap(
                                                    pkgName,
                                                    mPm.getSettingsVersionForPackage(
                                                            parsedPackage)),
                                            Collections.singletonMap(pkgName,
                                                    mPm.getSharedLibLatestVersionSetting(
                                                            scanResult))),
                                            Collections.singletonMap(pkgName, mSharedLibraries
                                                    .getSharedLibLatestVersionSetting(scanResult))),
                                    mPm.mSettings.getKeySetManagerService(), mPm.mInjector);
                    appIdCreated = optimisticallyRegisterAppId(scanResult);
                    commitReconciledScanResultLocked(
@@ -4192,8 +4194,8 @@ final class InstallPackageHelper {
        long minVersionCode = Long.MIN_VALUE;
        long maxVersionCode = Long.MAX_VALUE;

        WatchedLongSparseArray<SharedLibraryInfo> versionedLib = mPm.mSharedLibraries.get(
                pkg.getStaticSharedLibName());
        WatchedLongSparseArray<SharedLibraryInfo> versionedLib =
                mSharedLibraries.getSharedLibraryInfos(pkg.getStaticSharedLibName());
        if (versionedLib != null) {
            final int versionCount = versionedLib.size();
            for (int i = 0; i < versionCount; i++) {
+2 −1
Original line number Diff line number Diff line
@@ -388,7 +388,8 @@ final class PackageHandler extends Handler {
            }
            case PRUNE_UNUSED_STATIC_SHARED_LIBRARIES: {
                try {
                    mPm.pruneUnusedStaticSharedLibraries(Long.MAX_VALUE,
                    mPm.mInjector.getSharedLibrariesImpl().pruneUnusedStaticSharedLibraries(
                            Long.MAX_VALUE,
                            Settings.Global.getLong(mPm.mContext.getContentResolver(),
                                    Settings.Global.UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD,
                                    DEFAULT_UNUSED_STATIC_SHARED_LIB_MIN_CACHE_PERIOD));
+14 −387

File changed.

Preview size limit exceeded, changes collapsed.

Loading