Loading services/core/java/com/android/server/pm/InstallPackageHelper.java +27 −19 Original line number Diff line number Diff line Loading @@ -985,13 +985,13 @@ final class InstallPackageHelper { } void installPackagesTraced(List<InstallRequest> requests) { synchronized (mPm.mInstallLock) { mPm.mInstallLock.lock(); try { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "installPackages"); installPackagesLI(requests); } finally { Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); } mPm.mInstallLock.unlock(); } } Loading Loading @@ -2590,22 +2590,30 @@ final class InstallPackageHelper { final boolean performDexopt = DexOptHelper.shouldPerformDexopt(installRequest, dexoptOptions, mContext); if (performDexopt) { // dexopt can take long, and ArtService doesn't require installd, so we release // the lock here and re-acquire the lock after dexopt is finished. mPm.mInstallLock.unlock(); try { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "dexopt"); // This mirrors logic from commitReconciledScanResultLocked, where the library files // needed for dexopt are assigned. // This mirrors logic from commitReconciledScanResultLocked, where the library // files needed for dexopt are assigned. PackageSetting realPkgSetting = installRequest.getRealPackageSetting(); // Unfortunately, the updated system app flag is only tracked on this PackageSetting // Unfortunately, the updated system app flag is only tracked on this // PackageSetting boolean isUpdatedSystemApp = installRequest.getScannedPackageSetting().isUpdatedSystemApp(); realPkgSetting.getPkgState().setUpdatedSystemApp(isUpdatedSystemApp); DexoptResult dexOptResult = DexOptHelper.dexoptPackageUsingArtService(installRequest, dexoptOptions); DexoptResult dexOptResult = DexOptHelper.dexoptPackageUsingArtService( installRequest, dexoptOptions); installRequest.onDexoptFinished(dexOptResult); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); } finally { mPm.mInstallLock.lock(); } } } PackageManagerServiceUtils.waitForNativeBinariesExtractionForIncremental( Loading services/core/java/com/android/server/pm/PackageManagerService.java +3 −3 Original line number Diff line number Diff line Loading @@ -626,7 +626,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService // Lock for state used when installing and doing other long running // operations. Methods that must be called with this lock held have // the suffix "LI". final Object mInstallLock; final PackageManagerTracedLock mInstallLock; // ---------------------------------------------------------------- Loading Loading @@ -1692,8 +1692,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService final TimingsTraceAndSlog t = new TimingsTraceAndSlog(TAG + "Timing", Trace.TRACE_TAG_PACKAGE_MANAGER); t.traceBegin("create package manager"); final PackageManagerTracedLock lock = new PackageManagerTracedLock(); final Object installLock = new Object(); final PackageManagerTracedLock lock = new PackageManagerTracedLock("mLock"); final PackageManagerTracedLock installLock = new PackageManagerTracedLock("mInstallLock"); HandlerThread backgroundThread = new ServiceThread("PackageManagerBg", Process.THREAD_PRIORITY_BACKGROUND, true /*allowIo*/); Loading services/core/java/com/android/server/pm/PackageManagerServiceInjector.java +3 −3 Original line number Diff line number Diff line Loading @@ -86,7 +86,7 @@ public class PackageManagerServiceInjector { private final Context mContext; private final PackageManagerTracedLock mLock; private final Installer mInstaller; private final Object mInstallLock; private final PackageManagerTracedLock mInstallLock; private final Handler mBackgroundHandler; private final Executor mBackgroundExecutor; private final List<ScanPartition> mSystemPartitions; Loading Loading @@ -144,7 +144,7 @@ public class PackageManagerServiceInjector { private final Singleton<PackageMonitorCallbackHelper> mPackageMonitorCallbackHelper; PackageManagerServiceInjector(Context context, PackageManagerTracedLock lock, Installer installer, Object installLock, PackageAbiHelper abiHelper, Installer installer, PackageManagerTracedLock installLock, PackageAbiHelper abiHelper, Handler backgroundHandler, List<ScanPartition> systemPartitions, Producer<ComponentResolver> componentResolverProducer, Loading Loading @@ -254,7 +254,7 @@ public class PackageManagerServiceInjector { return mAbiHelper; } public Object getInstallLock() { public PackageManagerTracedLock getInstallLock() { return mInstallLock; } Loading services/core/java/com/android/server/pm/PackageManagerTracedLock.java +30 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,9 @@ package com.android.server.pm; import android.annotation.Nullable; import android.util.Slog; import java.util.concurrent.locks.ReentrantLock; /** Loading @@ -23,4 +26,31 @@ import java.util.concurrent.locks.ReentrantLock; * injection, similar to {@link ActivityManagerGlobalLock}. */ public class PackageManagerTracedLock extends ReentrantLock { private static final String TAG = "PackageManagerTracedLock"; private static final boolean DEBUG = false; @Nullable private final String mLockName; public PackageManagerTracedLock(@Nullable String lockName) { mLockName = lockName; } public PackageManagerTracedLock() { this(null); } @Override public void lock() { super.lock(); if (DEBUG && mLockName != null) { Slog.i(TAG, "locked " + mLockName); } } @Override public void unlock() { super.unlock(); if (DEBUG && mLockName != null) { Slog.i(TAG, "unlocked " + mLockName); } } } services/core/java/com/android/server/pm/UserDataPreparer.java +2 −2 Original line number Diff line number Diff line Loading @@ -52,11 +52,11 @@ class UserDataPreparer { private static final String TAG = "UserDataPreparer"; private static final String XATTR_SERIAL = "user.serial"; private final Object mInstallLock; private final PackageManagerTracedLock mInstallLock; private final Context mContext; private final Installer mInstaller; UserDataPreparer(Installer installer, Object installLock, Context context) { UserDataPreparer(Installer installer, PackageManagerTracedLock installLock, Context context) { mInstallLock = installLock; mContext = context; mInstaller = installer; Loading Loading
services/core/java/com/android/server/pm/InstallPackageHelper.java +27 −19 Original line number Diff line number Diff line Loading @@ -985,13 +985,13 @@ final class InstallPackageHelper { } void installPackagesTraced(List<InstallRequest> requests) { synchronized (mPm.mInstallLock) { mPm.mInstallLock.lock(); try { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "installPackages"); installPackagesLI(requests); } finally { Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); } mPm.mInstallLock.unlock(); } } Loading Loading @@ -2590,22 +2590,30 @@ final class InstallPackageHelper { final boolean performDexopt = DexOptHelper.shouldPerformDexopt(installRequest, dexoptOptions, mContext); if (performDexopt) { // dexopt can take long, and ArtService doesn't require installd, so we release // the lock here and re-acquire the lock after dexopt is finished. mPm.mInstallLock.unlock(); try { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "dexopt"); // This mirrors logic from commitReconciledScanResultLocked, where the library files // needed for dexopt are assigned. // This mirrors logic from commitReconciledScanResultLocked, where the library // files needed for dexopt are assigned. PackageSetting realPkgSetting = installRequest.getRealPackageSetting(); // Unfortunately, the updated system app flag is only tracked on this PackageSetting // Unfortunately, the updated system app flag is only tracked on this // PackageSetting boolean isUpdatedSystemApp = installRequest.getScannedPackageSetting().isUpdatedSystemApp(); realPkgSetting.getPkgState().setUpdatedSystemApp(isUpdatedSystemApp); DexoptResult dexOptResult = DexOptHelper.dexoptPackageUsingArtService(installRequest, dexoptOptions); DexoptResult dexOptResult = DexOptHelper.dexoptPackageUsingArtService( installRequest, dexoptOptions); installRequest.onDexoptFinished(dexOptResult); Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); } finally { mPm.mInstallLock.lock(); } } } PackageManagerServiceUtils.waitForNativeBinariesExtractionForIncremental( Loading
services/core/java/com/android/server/pm/PackageManagerService.java +3 −3 Original line number Diff line number Diff line Loading @@ -626,7 +626,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService // Lock for state used when installing and doing other long running // operations. Methods that must be called with this lock held have // the suffix "LI". final Object mInstallLock; final PackageManagerTracedLock mInstallLock; // ---------------------------------------------------------------- Loading Loading @@ -1692,8 +1692,8 @@ public class PackageManagerService implements PackageSender, TestUtilityService final TimingsTraceAndSlog t = new TimingsTraceAndSlog(TAG + "Timing", Trace.TRACE_TAG_PACKAGE_MANAGER); t.traceBegin("create package manager"); final PackageManagerTracedLock lock = new PackageManagerTracedLock(); final Object installLock = new Object(); final PackageManagerTracedLock lock = new PackageManagerTracedLock("mLock"); final PackageManagerTracedLock installLock = new PackageManagerTracedLock("mInstallLock"); HandlerThread backgroundThread = new ServiceThread("PackageManagerBg", Process.THREAD_PRIORITY_BACKGROUND, true /*allowIo*/); Loading
services/core/java/com/android/server/pm/PackageManagerServiceInjector.java +3 −3 Original line number Diff line number Diff line Loading @@ -86,7 +86,7 @@ public class PackageManagerServiceInjector { private final Context mContext; private final PackageManagerTracedLock mLock; private final Installer mInstaller; private final Object mInstallLock; private final PackageManagerTracedLock mInstallLock; private final Handler mBackgroundHandler; private final Executor mBackgroundExecutor; private final List<ScanPartition> mSystemPartitions; Loading Loading @@ -144,7 +144,7 @@ public class PackageManagerServiceInjector { private final Singleton<PackageMonitorCallbackHelper> mPackageMonitorCallbackHelper; PackageManagerServiceInjector(Context context, PackageManagerTracedLock lock, Installer installer, Object installLock, PackageAbiHelper abiHelper, Installer installer, PackageManagerTracedLock installLock, PackageAbiHelper abiHelper, Handler backgroundHandler, List<ScanPartition> systemPartitions, Producer<ComponentResolver> componentResolverProducer, Loading Loading @@ -254,7 +254,7 @@ public class PackageManagerServiceInjector { return mAbiHelper; } public Object getInstallLock() { public PackageManagerTracedLock getInstallLock() { return mInstallLock; } Loading
services/core/java/com/android/server/pm/PackageManagerTracedLock.java +30 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,9 @@ package com.android.server.pm; import android.annotation.Nullable; import android.util.Slog; import java.util.concurrent.locks.ReentrantLock; /** Loading @@ -23,4 +26,31 @@ import java.util.concurrent.locks.ReentrantLock; * injection, similar to {@link ActivityManagerGlobalLock}. */ public class PackageManagerTracedLock extends ReentrantLock { private static final String TAG = "PackageManagerTracedLock"; private static final boolean DEBUG = false; @Nullable private final String mLockName; public PackageManagerTracedLock(@Nullable String lockName) { mLockName = lockName; } public PackageManagerTracedLock() { this(null); } @Override public void lock() { super.lock(); if (DEBUG && mLockName != null) { Slog.i(TAG, "locked " + mLockName); } } @Override public void unlock() { super.unlock(); if (DEBUG && mLockName != null) { Slog.i(TAG, "unlocked " + mLockName); } } }
services/core/java/com/android/server/pm/UserDataPreparer.java +2 −2 Original line number Diff line number Diff line Loading @@ -52,11 +52,11 @@ class UserDataPreparer { private static final String TAG = "UserDataPreparer"; private static final String XATTR_SERIAL = "user.serial"; private final Object mInstallLock; private final PackageManagerTracedLock mInstallLock; private final Context mContext; private final Installer mInstaller; UserDataPreparer(Installer installer, Object installLock, Context context) { UserDataPreparer(Installer installer, PackageManagerTracedLock installLock, Context context) { mInstallLock = installLock; mContext = context; mInstaller = installer; Loading