Loading services/core/java/com/android/server/pm/BackgroundDexOptService.java +5 −0 Original line number Diff line number Diff line Loading @@ -331,6 +331,7 @@ public final class BackgroundDexOptService { /** Adds listener for package update */ public void addPackagesUpdatedListener(PackagesUpdatedListener listener) throws LegacyDexoptDisabledException { // TODO(b/251903639): Evaluate whether this needs to support ART Service or not. Installer.checkLegacyDexoptDisabled(); synchronized (mLock) { mPackagesUpdatedListeners.add(listener); Loading Loading @@ -629,6 +630,8 @@ public final class BackgroundDexOptService { /** Gets the size of a package. */ private long getPackageSize(@NonNull Computer snapshot, String pkg) { // TODO(b/251903639): Make this in line with the calculation in // `DexOptHelper.DexoptDoneHandler`. PackageInfo info = snapshot.getPackageInfo(pkg, 0, UserHandle.USER_SYSTEM); long size = 0; if (info != null && info.applicationInfo != null) { Loading Loading @@ -723,6 +726,8 @@ public final class BackgroundDexOptService { return optimizePackages(pkgs, lowStorageThreshold, updatedPackages, isPostBootUpdate); } finally { // Always let the pinner service know about changes. // TODO(b/251903639): ART Service does this for all dexopts, while the code below only // runs for background jobs. We should try to make them behave the same. notifyPinService(updatedPackages); // Only notify IORap the primary dex opt, because we don't want to // invalidate traces unnecessary due to b/161633001 and that it's Loading services/core/java/com/android/server/pm/DexOptHelper.java +32 −0 Original line number Diff line number Diff line Loading @@ -57,8 +57,11 @@ import android.util.Log; import android.util.Slog; import com.android.internal.logging.MetricsLogger; import com.android.internal.util.FrameworkStatsLog; import com.android.internal.util.IndentingPrintWriter; import com.android.server.LocalManagerRegistry; import com.android.server.LocalServices; import com.android.server.PinnerService; import com.android.server.art.ArtManagerLocal; import com.android.server.art.DexUseManagerLocal; import com.android.server.art.ReasonMapping; Loading Loading @@ -970,6 +973,35 @@ public final class DexOptHelper { mPm.getPackageUsage().maybeWriteAsync(mPm.mSettings.getPackagesLocked()); mPm.mCompilerStats.maybeWriteAsync(); } if (result.getReason().equals(ReasonMapping.REASON_INACTIVE)) { for (DexoptResult.PackageDexoptResult pkgRes : result.getPackageDexoptResults()) { if (pkgRes.getStatus() == DexoptResult.DEXOPT_PERFORMED) { long pkgSizeBytes = 0; long pkgSizeBeforeBytes = 0; for (DexoptResult.DexContainerFileDexoptResult dexRes : pkgRes.getDexContainerFileDexoptResults()) { long dexContainerSize = new File(dexRes.getDexContainerFile()).length(); pkgSizeBytes += dexRes.getSizeBytes() + dexContainerSize; pkgSizeBeforeBytes += dexRes.getSizeBeforeBytes() + dexContainerSize; } FrameworkStatsLog.write(FrameworkStatsLog.APP_DOWNGRADED, pkgRes.getPackageName(), pkgSizeBeforeBytes, pkgSizeBytes, false /* aggressive */); } } } var updatedPackages = new ArraySet<String>(); for (DexoptResult.PackageDexoptResult pkgRes : result.getPackageDexoptResults()) { if (pkgRes.hasUpdatedArtifacts()) { updatedPackages.add(pkgRes.getPackageName()); } } if (!updatedPackages.isEmpty()) { LocalServices.getService(PinnerService.class) .update(updatedPackages, false /* force */); } } } Loading Loading
services/core/java/com/android/server/pm/BackgroundDexOptService.java +5 −0 Original line number Diff line number Diff line Loading @@ -331,6 +331,7 @@ public final class BackgroundDexOptService { /** Adds listener for package update */ public void addPackagesUpdatedListener(PackagesUpdatedListener listener) throws LegacyDexoptDisabledException { // TODO(b/251903639): Evaluate whether this needs to support ART Service or not. Installer.checkLegacyDexoptDisabled(); synchronized (mLock) { mPackagesUpdatedListeners.add(listener); Loading Loading @@ -629,6 +630,8 @@ public final class BackgroundDexOptService { /** Gets the size of a package. */ private long getPackageSize(@NonNull Computer snapshot, String pkg) { // TODO(b/251903639): Make this in line with the calculation in // `DexOptHelper.DexoptDoneHandler`. PackageInfo info = snapshot.getPackageInfo(pkg, 0, UserHandle.USER_SYSTEM); long size = 0; if (info != null && info.applicationInfo != null) { Loading Loading @@ -723,6 +726,8 @@ public final class BackgroundDexOptService { return optimizePackages(pkgs, lowStorageThreshold, updatedPackages, isPostBootUpdate); } finally { // Always let the pinner service know about changes. // TODO(b/251903639): ART Service does this for all dexopts, while the code below only // runs for background jobs. We should try to make them behave the same. notifyPinService(updatedPackages); // Only notify IORap the primary dex opt, because we don't want to // invalidate traces unnecessary due to b/161633001 and that it's Loading
services/core/java/com/android/server/pm/DexOptHelper.java +32 −0 Original line number Diff line number Diff line Loading @@ -57,8 +57,11 @@ import android.util.Log; import android.util.Slog; import com.android.internal.logging.MetricsLogger; import com.android.internal.util.FrameworkStatsLog; import com.android.internal.util.IndentingPrintWriter; import com.android.server.LocalManagerRegistry; import com.android.server.LocalServices; import com.android.server.PinnerService; import com.android.server.art.ArtManagerLocal; import com.android.server.art.DexUseManagerLocal; import com.android.server.art.ReasonMapping; Loading Loading @@ -970,6 +973,35 @@ public final class DexOptHelper { mPm.getPackageUsage().maybeWriteAsync(mPm.mSettings.getPackagesLocked()); mPm.mCompilerStats.maybeWriteAsync(); } if (result.getReason().equals(ReasonMapping.REASON_INACTIVE)) { for (DexoptResult.PackageDexoptResult pkgRes : result.getPackageDexoptResults()) { if (pkgRes.getStatus() == DexoptResult.DEXOPT_PERFORMED) { long pkgSizeBytes = 0; long pkgSizeBeforeBytes = 0; for (DexoptResult.DexContainerFileDexoptResult dexRes : pkgRes.getDexContainerFileDexoptResults()) { long dexContainerSize = new File(dexRes.getDexContainerFile()).length(); pkgSizeBytes += dexRes.getSizeBytes() + dexContainerSize; pkgSizeBeforeBytes += dexRes.getSizeBeforeBytes() + dexContainerSize; } FrameworkStatsLog.write(FrameworkStatsLog.APP_DOWNGRADED, pkgRes.getPackageName(), pkgSizeBeforeBytes, pkgSizeBytes, false /* aggressive */); } } } var updatedPackages = new ArraySet<String>(); for (DexoptResult.PackageDexoptResult pkgRes : result.getPackageDexoptResults()) { if (pkgRes.hasUpdatedArtifacts()) { updatedPackages.add(pkgRes.getPackageName()); } } if (!updatedPackages.isEmpty()) { LocalServices.getService(PinnerService.class) .update(updatedPackages, false /* force */); } } } Loading