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

Commit b4c2c4f9 authored by Jiakai Zhang's avatar Jiakai Zhang Committed by Android (Google) Code Review
Browse files

Merge changes from topics "art-service-dynamic-code-logger", "art-service-shell-command"

* changes:
  Forward some root-level PM shell commands to ART Service.
  Integrate ART Service with DynamicCodeLogger.
  Take DynamicCodeLogger out of DexManager.
parents 4326b85b c22b83ab
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -616,6 +616,7 @@ public class AppDataHelper {
                Slog.w(TAG, String.valueOf(e));
            }
            mPm.getDexManager().notifyPackageDataDestroyed(pkg.getPackageName(), userId);
            mPm.getDynamicCodeLogger().notifyPackageDataDestroyed(pkg.getPackageName(), userId);
        }
    }

+27 −0
Original line number Diff line number Diff line
@@ -27,13 +27,17 @@ import android.os.Process;
import android.util.EventLog;
import android.util.Log;

import com.android.server.LocalManagerRegistry;
import com.android.server.LocalServices;
import com.android.server.art.DexUseManagerLocal;
import com.android.server.art.model.DexContainerFileUseInfo;
import com.android.server.pm.dex.DynamicCodeLogger;

import libcore.util.HexEncoding;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -137,6 +141,28 @@ public class DynamicCodeLoggingService extends JobService {
        return LocalServices.getService(PackageManagerInternal.class).getDynamicCodeLogger();
    }

    private static void syncDataFromArtService(DynamicCodeLogger dynamicCodeLogger) {
        DexUseManagerLocal dexUseManagerLocal = DexOptHelper.getDexUseManagerLocal();
        if (dexUseManagerLocal == null) {
            // ART Service is not enabled.
            return;
        }
        PackageManagerLocal packageManagerLocal =
                Objects.requireNonNull(LocalManagerRegistry.getManager(PackageManagerLocal.class));
        try (PackageManagerLocal.UnfilteredSnapshot snapshot =
                        packageManagerLocal.withUnfilteredSnapshot()) {
            for (String owningPackageName : snapshot.getPackageStates().keySet()) {
                for (DexContainerFileUseInfo info :
                        dexUseManagerLocal.getSecondaryDexContainerFileUseInfo(owningPackageName)) {
                    for (String loadingPackageName : info.getLoadingPackages()) {
                        dynamicCodeLogger.recordDex(info.getUserHandle().getIdentifier(),
                                info.getDexContainerFile(), owningPackageName, loadingPackageName);
                    }
                }
            }
        }
    }

    private class IdleLoggingThread extends Thread {
        private final JobParameters mParams;

@@ -152,6 +178,7 @@ public class DynamicCodeLoggingService extends JobService {
            }

            DynamicCodeLogger dynamicCodeLogger = getDynamicCodeLogger();
            syncDataFromArtService(dynamicCodeLogger);
            for (String packageName : dynamicCodeLogger.getAllPackagesWithDynamicCodeLoading()) {
                if (mIdleLoggingStopRequested) {
                    Log.w(TAG, "Stopping IdleLoggingJob run at scheduler request");
+0 −7
Original line number Diff line number Diff line
@@ -49,7 +49,6 @@ import android.util.SparseArray;

import com.android.server.pm.Installer.LegacyDexoptDisabledException;
import com.android.server.pm.dex.DexManager;
import com.android.server.pm.dex.DynamicCodeLogger;
import com.android.server.pm.permission.PermissionManagerServiceInternal;
import com.android.server.pm.pkg.AndroidPackage;
import com.android.server.pm.pkg.PackageStateInternal;
@@ -773,10 +772,4 @@ abstract class PackageManagerInternalBase extends PackageManagerInternal {
    public final void shutdown() {
        mService.shutdown();
    }

    @Override
    @Deprecated
    public final DynamicCodeLogger getDynamicCodeLogger() {
        return getDexManager().getDynamicCodeLogger();
    }
}
+18 −1
Original line number Diff line number Diff line
@@ -204,6 +204,7 @@ import com.android.server.pm.Settings.VersionInfo;
import com.android.server.pm.dex.ArtManagerService;
import com.android.server.pm.dex.ArtUtils;
import com.android.server.pm.dex.DexManager;
import com.android.server.pm.dex.DynamicCodeLogger;
import com.android.server.pm.dex.ViewCompiler;
import com.android.server.pm.local.PackageManagerLocalImpl;
import com.android.server.pm.parsing.PackageInfoUtils;
@@ -793,6 +794,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
    // DexManager handles the usage of dex files (e.g. secondary files, whether or not a package
    // is used by other apps).
    private final DexManager mDexManager;
    private final DynamicCodeLogger mDynamicCodeLogger;

    final ViewCompiler mViewCompiler;

@@ -1529,7 +1531,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService
                (i, pm) -> new PackageDexOptimizer(i.getInstaller(), i.getInstallLock(),
                        i.getContext(), "*dexopt*"),
                (i, pm) -> new DexManager(i.getContext(), i.getPackageDexOptimizer(),
                        i.getInstaller(), i.getInstallLock()),
                        i.getInstaller(), i.getInstallLock(), i.getDynamicCodeLogger()),
                (i, pm) -> new DynamicCodeLogger(i.getInstaller()),
                (i, pm) -> new ArtManagerService(i.getContext(), i.getInstaller(),
                        i.getInstallLock()),
                (i, pm) -> ApexManager.getInstance(),
@@ -1711,6 +1714,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        mDefaultAppProvider = testParams.defaultAppProvider;
        mLegacyPermissionManager = testParams.legacyPermissionManagerInternal;
        mDexManager = testParams.dexManager;
        mDynamicCodeLogger = testParams.dynamicCodeLogger;
        mFactoryTest = testParams.factoryTest;
        mIncrementalManager = testParams.incrementalManager;
        mInstallerService = testParams.installerService;
@@ -1889,6 +1893,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService

        mPackageDexOptimizer = injector.getPackageDexOptimizer();
        mDexManager = injector.getDexManager();
        mDynamicCodeLogger = injector.getDynamicCodeLogger();
        mBackgroundDexOptService = injector.getBackgroundDexOptService();
        mArtManagerService = injector.getArtManagerService();
        mMoveCallbacks = new MovePackageHelper.MoveCallbacks(FgThread.get().getLooper());
@@ -2316,6 +2321,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService
                        .getList());
            }
            mDexManager.load(userPackages);
            mDynamicCodeLogger.load(userPackages);
            if (mIsUpgrade) {
                FrameworkStatsLog.write(
                        FrameworkStatsLog.BOOT_TIME_EVENT_DURATION_REPORTED,
@@ -2980,9 +2986,14 @@ public class PackageManagerService implements PackageSender, TestUtilityService
        return mDexManager;
    }

    /*package*/ DynamicCodeLogger getDynamicCodeLogger() {
        return mDynamicCodeLogger;
    }

    public void shutdown() {
        mCompilerStats.writeNow();
        mDexManager.writePackageDexUsageNow();
        mDynamicCodeLogger.writeNow();
        PackageWatchdog.getInstance(mContext).writeNow();

        synchronized (mLock) {
@@ -6346,6 +6357,12 @@ public class PackageManagerService implements PackageSender, TestUtilityService
            return mDexManager;
        }

        @NonNull
        @Override
        public DynamicCodeLogger getDynamicCodeLogger() {
            return mDynamicCodeLogger;
        }

        @Override
        public boolean isPlatformSigned(String packageName) {
            PackageStateInternal packageState = snapshot().getPackageStateInternal(packageName);
+8 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import com.android.server.SystemConfig;
import com.android.server.compat.PlatformCompat;
import com.android.server.pm.dex.ArtManagerService;
import com.android.server.pm.dex.DexManager;
import com.android.server.pm.dex.DynamicCodeLogger;
import com.android.server.pm.dex.ViewCompiler;
import com.android.server.pm.parsing.PackageParser2;
import com.android.server.pm.permission.LegacyPermissionManagerInternal;
@@ -106,6 +107,7 @@ public class PackageManagerServiceInjector {
    private final Singleton<PackageDexOptimizer>
            mPackageDexOptimizerProducer;
    private final Singleton<DexManager> mDexManagerProducer;
    private final Singleton<DynamicCodeLogger> mDynamicCodeLoggerProducer;
    private final Singleton<ArtManagerService>
            mArtManagerServiceProducer;
    private final Singleton<ApexManager> mApexManagerProducer;
@@ -154,6 +156,7 @@ public class PackageManagerServiceInjector {
            Producer<SystemConfig> systemConfigProducer,
            Producer<PackageDexOptimizer> packageDexOptimizerProducer,
            Producer<DexManager> dexManagerProducer,
            Producer<DynamicCodeLogger> dynamicCodeLoggerProducer,
            Producer<ArtManagerService> artManagerServiceProducer,
            Producer<ApexManager> apexManagerProducer,
            Producer<ViewCompiler> viewCompilerProducer,
@@ -200,6 +203,7 @@ public class PackageManagerServiceInjector {
        mPackageDexOptimizerProducer = new Singleton<>(
                packageDexOptimizerProducer);
        mDexManagerProducer = new Singleton<>(dexManagerProducer);
        mDynamicCodeLoggerProducer = new Singleton<>(dynamicCodeLoggerProducer);
        mArtManagerServiceProducer = new Singleton<>(
                artManagerServiceProducer);
        mApexManagerProducer = new Singleton<>(apexManagerProducer);
@@ -314,6 +318,10 @@ public class PackageManagerServiceInjector {
        return mDexManagerProducer.get(this, mPackageManager);
    }

    public DynamicCodeLogger getDynamicCodeLogger() {
        return mDynamicCodeLoggerProducer.get(this, mPackageManager);
    }

    public ArtManagerService getArtManagerService() {
        return mArtManagerServiceProducer.get(this, mPackageManager);
    }
Loading