Merge "Notify Pinner Service and write FrameworkStatsLog."
This commit is contained in:
@@ -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);
|
||||
@@ -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) {
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
@@ -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 */);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user