Loading services/core/java/com/android/server/pm/PackageDexOptimizer.java +25 −1 Original line number Original line Diff line number Diff line Loading @@ -17,9 +17,12 @@ package com.android.server.pm; package com.android.server.pm; import android.annotation.Nullable; import android.annotation.Nullable; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageParser; import android.content.pm.PackageParser; import android.os.PowerManager; import android.os.UserHandle; import android.os.UserHandle; import android.os.WorkSource; import android.util.ArraySet; import android.util.ArraySet; import android.util.Log; import android.util.Log; import android.util.Slog; import android.util.Slog; Loading Loading @@ -50,8 +53,14 @@ final class PackageDexOptimizer { private final PackageManagerService mPackageManagerService; private final PackageManagerService mPackageManagerService; private ArraySet<PackageParser.Package> mDeferredDexOpt; private ArraySet<PackageParser.Package> mDeferredDexOpt; private final PowerManager.WakeLock mDexoptWakeLock; private volatile boolean mSystemReady; PackageDexOptimizer(PackageManagerService packageManagerService) { PackageDexOptimizer(PackageManagerService packageManagerService) { this.mPackageManagerService = packageManagerService; this.mPackageManagerService = packageManagerService; PowerManager powerManager = (PowerManager)packageManagerService.mContext.getSystemService( Context.POWER_SERVICE); mDexoptWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "*dexopt*"); } } /** /** Loading @@ -71,7 +80,18 @@ final class PackageDexOptimizer { done = null; done = null; } } synchronized (mPackageManagerService.mInstallLock) { synchronized (mPackageManagerService.mInstallLock) { final boolean useLock = mSystemReady; if (useLock) { mDexoptWakeLock.setWorkSource(new WorkSource(pkg.applicationInfo.uid)); mDexoptWakeLock.acquire(); } try { return performDexOptLI(pkg, instructionSets, forceDex, defer, done); return performDexOptLI(pkg, instructionSets, forceDex, defer, done); } finally { if (useLock) { mDexoptWakeLock.release(); } } } } } } Loading Loading @@ -242,4 +262,8 @@ final class PackageDexOptimizer { } } mDeferredDexOpt.add(pkg); mDeferredDexOpt.add(pkg); } } void systemReady() { mSystemReady = true; } } } services/core/java/com/android/server/pm/PackageManagerService.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -13486,6 +13486,7 @@ public class PackageManagerService extends IPackageManager.Stub { storage.registerListener(mStorageListener); storage.registerListener(mStorageListener); mInstallerService.systemReady(); mInstallerService.systemReady(); mPackageDexOptimizer.systemReady(); } } @Override @Override Loading
services/core/java/com/android/server/pm/PackageDexOptimizer.java +25 −1 Original line number Original line Diff line number Diff line Loading @@ -17,9 +17,12 @@ package com.android.server.pm; package com.android.server.pm; import android.annotation.Nullable; import android.annotation.Nullable; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageParser; import android.content.pm.PackageParser; import android.os.PowerManager; import android.os.UserHandle; import android.os.UserHandle; import android.os.WorkSource; import android.util.ArraySet; import android.util.ArraySet; import android.util.Log; import android.util.Log; import android.util.Slog; import android.util.Slog; Loading Loading @@ -50,8 +53,14 @@ final class PackageDexOptimizer { private final PackageManagerService mPackageManagerService; private final PackageManagerService mPackageManagerService; private ArraySet<PackageParser.Package> mDeferredDexOpt; private ArraySet<PackageParser.Package> mDeferredDexOpt; private final PowerManager.WakeLock mDexoptWakeLock; private volatile boolean mSystemReady; PackageDexOptimizer(PackageManagerService packageManagerService) { PackageDexOptimizer(PackageManagerService packageManagerService) { this.mPackageManagerService = packageManagerService; this.mPackageManagerService = packageManagerService; PowerManager powerManager = (PowerManager)packageManagerService.mContext.getSystemService( Context.POWER_SERVICE); mDexoptWakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "*dexopt*"); } } /** /** Loading @@ -71,7 +80,18 @@ final class PackageDexOptimizer { done = null; done = null; } } synchronized (mPackageManagerService.mInstallLock) { synchronized (mPackageManagerService.mInstallLock) { final boolean useLock = mSystemReady; if (useLock) { mDexoptWakeLock.setWorkSource(new WorkSource(pkg.applicationInfo.uid)); mDexoptWakeLock.acquire(); } try { return performDexOptLI(pkg, instructionSets, forceDex, defer, done); return performDexOptLI(pkg, instructionSets, forceDex, defer, done); } finally { if (useLock) { mDexoptWakeLock.release(); } } } } } } Loading Loading @@ -242,4 +262,8 @@ final class PackageDexOptimizer { } } mDeferredDexOpt.add(pkg); mDeferredDexOpt.add(pkg); } } void systemReady() { mSystemReady = true; } } }
services/core/java/com/android/server/pm/PackageManagerService.java +1 −0 Original line number Original line Diff line number Diff line Loading @@ -13486,6 +13486,7 @@ public class PackageManagerService extends IPackageManager.Stub { storage.registerListener(mStorageListener); storage.registerListener(mStorageListener); mInstallerService.systemReady(); mInstallerService.systemReady(); mPackageDexOptimizer.systemReady(); } } @Override @Override