Release odex/vdex compressed blocks to save user space.

Compression support will be checked in F2fsUtils.

The following log will be printed if odex/vdex is set to compress_extension:
D F2fsUtils: RELEASED 7750 blocks from "/data/app/~~tmgeKyrWzsiW2-xCsONrSA==/com.xx.xx==/oat/arm/base.vdex"
D F2fsUtils: RELEASED 80 blocks from "/data/app/~~tmgeKyrWzsiW2-xCsONrSA==/com.xx.xx==/oat/arm/base.odex"

Bug: 205257122
Signed-off-by: Ken Bian <kenjc.bian@rock-chips.com>
Change-Id: I5b554aa27a07c94d5a58c86c889131fe4b944720
This commit is contained in:
Ken
2021-11-06 01:54:38 +00:00
committed by Jaegeuk Kim
parent d980b9e776
commit 77fd602ffd

View File

@@ -46,6 +46,7 @@ import static dalvik.system.DexFile.isProfileGuidedCompilerFilter;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.ContentResolver;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.SharedLibraryInfo;
@@ -65,6 +66,7 @@ import android.util.SparseArray;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.content.F2fsUtils;
import com.android.internal.util.IndentingPrintWriter;
import com.android.server.LocalServices;
import com.android.server.apphibernation.AppHibernationManagerInternal;
@@ -141,6 +143,7 @@ public class PackageDexOptimizer {
private final Injector mInjector;
private final Context mContext;
private static final Random sRandom = new Random();
PackageDexOptimizer(Installer installer, Object installLock, Context context,
@@ -159,6 +162,7 @@ public class PackageDexOptimizer {
}
protected PackageDexOptimizer(PackageDexOptimizer from) {
this.mContext = from.mContext;
this.mInstaller = from.mInstaller;
this.mInstallLock = from.mInstallLock;
this.mDexoptWakeLock = from.mDexoptWakeLock;
@@ -169,6 +173,7 @@ public class PackageDexOptimizer {
@VisibleForTesting
PackageDexOptimizer(@NonNull Injector injector, Installer installer, Object installLock,
Context context, String wakeLockTag) {
this.mContext = context;
this.mInstaller = installer;
this.mInstallLock = installLock;
@@ -434,6 +439,13 @@ public class PackageDexOptimizer {
long endTime = System.currentTimeMillis();
packageStats.setCompileTime(path, (int)(endTime - startTime));
}
if (oatDir != null) {
// Release odex/vdex compressed blocks to save user space.
// Compression support will be checked in F2fsUtils.
// The system app may be dexed, oatDir may be null, skip this situation.
final ContentResolver resolver = mContext.getContentResolver();
F2fsUtils.releaseCompressedBlocks(resolver, new File(oatDir));
}
return DEX_OPT_PERFORMED;
} catch (InstallerException e) {
Slog.w(TAG, "Failed to dexopt", e);