Loading core/api/current.txt +6 −3 Original line number Diff line number Diff line Loading @@ -9357,9 +9357,12 @@ package android.app.usage { method public long getDataBytes(); method public long getExternalCacheBytes(); method public void writeToParcel(android.os.Parcel, int); field @FlaggedApi("android.app.usage.get_app_bytes_by_data_type_api") public static final int APP_DATA_TYPE_FILE_TYPE_APK = 0; // 0x0 field @FlaggedApi("android.app.usage.get_app_bytes_by_data_type_api") public static final int APP_DATA_TYPE_FILE_TYPE_DM = 1; // 0x1 field @FlaggedApi("android.app.usage.get_app_bytes_by_data_type_api") public static final int APP_DATA_TYPE_LIB = 2; // 0x2 field @FlaggedApi("android.app.usage.get_app_bytes_by_data_type_api") public static final int APP_DATA_TYPE_FILE_TYPE_APK = 3; // 0x3 field @FlaggedApi("android.app.usage.get_app_bytes_by_data_type_api") public static final int APP_DATA_TYPE_FILE_TYPE_CURRENT_PROFILE = 2; // 0x2 field @FlaggedApi("android.app.usage.get_app_bytes_by_data_type_api") public static final int APP_DATA_TYPE_FILE_TYPE_DEXOPT_ARTIFACT = 0; // 0x0 field @FlaggedApi("android.app.usage.get_app_bytes_by_data_type_api") public static final int APP_DATA_TYPE_FILE_TYPE_DM = 4; // 0x4 field @FlaggedApi("android.app.usage.get_app_bytes_by_data_type_api") public static final int APP_DATA_TYPE_FILE_TYPE_REFERENCE_PROFILE = 1; // 0x1 field @FlaggedApi("android.app.usage.get_app_bytes_by_data_type_api") public static final int APP_DATA_TYPE_LIB = 5; // 0x5 field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.StorageStats> CREATOR; } core/java/android/app/usage/StorageStats.java +69 −6 Original line number Diff line number Diff line Loading @@ -40,28 +40,79 @@ public final class StorageStats implements Parcelable { /** @hide */ public long apkBytes; /** @hide */ public long libBytes; /** @hide */ public long dmBytes; /** @hide */ public long dexoptBytes; /** @hide */ public long curProfBytes; /** @hide */ public long refProfBytes; /** @hide */ public long externalCacheBytes; /** Represents all .apk files in application code path. /** * Represents all nonstale dexopt and runtime artifacts of application. * This includes AOT-compiled code and other data that can speed up app execution. * For more detailed information, read the * <a href="https://source.android.com/docs/core/runtime/jit-compiler#flow">JIT compiler</a> * guide. * * Dexopt artifacts become stale when one of their dependencies * has changed. They may be cleaned up or replaced by ART Services at any time. * * For a preload app, this type includes dexopt artifacts on readonly partitions * if they are up-to-date. * * Can be used as an input to {@link #getAppBytesByDataType(int)} * to get the sum of sizes for files of this type. The sum might include the size of data * that is part of appBytes, dataBytes or cacheBytes. */ @FlaggedApi(Flags.FLAG_GET_APP_BYTES_BY_DATA_TYPE_API) public static final int APP_DATA_TYPE_FILE_TYPE_DEXOPT_ARTIFACT = 0; /** * Represents reference profile of application. * * Reference profiles are the ones used during the last profile-guided dexopt. * If the last dexopt wasn't profile-guided, then these profiles were not used. * * Can be used as an input to {@link #getAppBytesByDataType(int)} * to get the size of files of this type. */ @FlaggedApi(Flags.FLAG_GET_APP_BYTES_BY_DATA_TYPE_API) public static final int APP_DATA_TYPE_FILE_TYPE_REFERENCE_PROFILE = 1; /** * Represents current profile of application. * * Current profiles may or may not be used during the next profile-guided dexopt. * * Can be used as an input to {@link #getAppBytesByDataType(int)} * to get the size of files of this type. This size fluctuates regularly, * it goes up when the user uses more and more classes/methods and comes down when * a deamon merges this into the ref profile and does profile-guided dexopt. */ @FlaggedApi(Flags.FLAG_GET_APP_BYTES_BY_DATA_TYPE_API) public static final int APP_DATA_TYPE_FILE_TYPE_CURRENT_PROFILE = 2; /** * Represents all .apk files in application code path. * Can be used as an input to {@link #getAppBytesByDataType(int)} * to get the sum of sizes for files of this type. */ @FlaggedApi(Flags.FLAG_GET_APP_BYTES_BY_DATA_TYPE_API) public static final int APP_DATA_TYPE_FILE_TYPE_APK = 0; public static final int APP_DATA_TYPE_FILE_TYPE_APK = 3; /** Represents all .dm files in application code path. /** * Represents all .dm files in application code path. * Can be used as an input to {@link #getAppBytesByDataType(int)} * to get the sum of sizes for files of this type. */ @FlaggedApi(Flags.FLAG_GET_APP_BYTES_BY_DATA_TYPE_API) public static final int APP_DATA_TYPE_FILE_TYPE_DM = 1; public static final int APP_DATA_TYPE_FILE_TYPE_DM = 4; /** Represents lib/ in application code path. /** * Represents lib/ in application code path. * Can be used as an input to {@link #getAppBytesByDataType(int)} * to get the size of lib/ directory. */ @FlaggedApi(Flags.FLAG_GET_APP_BYTES_BY_DATA_TYPE_API) public static final int APP_DATA_TYPE_LIB = 2; public static final int APP_DATA_TYPE_LIB = 5; /** * Keep in sync with the file types defined above. Loading @@ -69,6 +120,9 @@ public final class StorageStats implements Parcelable { */ @FlaggedApi(Flags.FLAG_GET_APP_BYTES_BY_DATA_TYPE_API) @IntDef(flag = false, value = { APP_DATA_TYPE_FILE_TYPE_DEXOPT_ARTIFACT, APP_DATA_TYPE_FILE_TYPE_REFERENCE_PROFILE, APP_DATA_TYPE_FILE_TYPE_CURRENT_PROFILE, APP_DATA_TYPE_FILE_TYPE_APK, APP_DATA_TYPE_FILE_TYPE_DM, APP_DATA_TYPE_LIB, Loading Loading @@ -103,6 +157,9 @@ public final class StorageStats implements Parcelable { @FlaggedApi(Flags.FLAG_GET_APP_BYTES_BY_DATA_TYPE_API) public long getAppBytesByDataType(@AppDataType int dataType) { switch (dataType) { case APP_DATA_TYPE_FILE_TYPE_DEXOPT_ARTIFACT: return dexoptBytes; case APP_DATA_TYPE_FILE_TYPE_REFERENCE_PROFILE: return refProfBytes; case APP_DATA_TYPE_FILE_TYPE_CURRENT_PROFILE: return curProfBytes; case APP_DATA_TYPE_FILE_TYPE_APK: return apkBytes; case APP_DATA_TYPE_LIB: return libBytes; case APP_DATA_TYPE_FILE_TYPE_DM: return dmBytes; Loading Loading @@ -161,6 +218,9 @@ public final class StorageStats implements Parcelable { this.codeBytes = in.readLong(); this.dataBytes = in.readLong(); this.cacheBytes = in.readLong(); this.dexoptBytes = in.readLong(); this.refProfBytes = in.readLong(); this.curProfBytes = in.readLong(); this.apkBytes = in.readLong(); this.libBytes = in.readLong(); this.dmBytes = in.readLong(); Loading @@ -177,6 +237,9 @@ public final class StorageStats implements Parcelable { dest.writeLong(codeBytes); dest.writeLong(dataBytes); dest.writeLong(cacheBytes); dest.writeLong(dexoptBytes); dest.writeLong(refProfBytes); dest.writeLong(curProfBytes); dest.writeLong(apkBytes); dest.writeLong(libBytes); dest.writeLong(dmBytes); Loading core/java/android/content/pm/PackageStats.java +38 −1 Original line number Diff line number Diff line Loading @@ -67,6 +67,18 @@ public class PackageStats implements Parcelable { /** @hide */ public long dmSize; /** Size of dexopt artifacts of the application. */ /** @hide */ public long dexoptSize; /** Size of the current profile of the application. */ /** @hide */ public long curProfSize; /** Size of the reference profile of the application. */ /** @hide */ public long refProfSize; /** * Size of the secure container on external storage holding the * application's code. Loading Loading @@ -132,6 +144,18 @@ public class PackageStats implements Parcelable { sb.append(" dm="); sb.append(dmSize); } if (dexoptSize != 0) { sb.append(" dexopt="); sb.append(dexoptSize); } if (curProfSize != 0) { sb.append(" curProf="); sb.append(curProfSize); } if (refProfSize != 0) { sb.append(" refProf="); sb.append(refProfSize); } if (externalCodeSize != 0) { sb.append(" extCode="); sb.append(externalCodeSize); Loading Loading @@ -176,6 +200,9 @@ public class PackageStats implements Parcelable { apkSize = source.readLong(); libSize = source.readLong(); dmSize = source.readLong(); dexoptSize = source.readLong(); curProfSize = source.readLong(); refProfSize = source.readLong(); externalCodeSize = source.readLong(); externalDataSize = source.readLong(); externalCacheSize = source.readLong(); Loading @@ -192,6 +219,9 @@ public class PackageStats implements Parcelable { apkSize = pStats.apkSize; libSize = pStats.libSize; dmSize = pStats.dmSize; dexoptSize = pStats.dexoptSize; curProfSize = pStats.curProfSize; refProfSize = pStats.refProfSize; externalCodeSize = pStats.externalCodeSize; externalDataSize = pStats.externalDataSize; externalCacheSize = pStats.externalCacheSize; Loading @@ -212,6 +242,9 @@ public class PackageStats implements Parcelable { dest.writeLong(apkSize); dest.writeLong(libSize); dest.writeLong(dmSize); dest.writeLong(dexoptSize); dest.writeLong(curProfSize); dest.writeLong(refProfSize); dest.writeLong(externalCodeSize); dest.writeLong(externalDataSize); dest.writeLong(externalCacheSize); Loading @@ -234,6 +267,9 @@ public class PackageStats implements Parcelable { && apkSize == otherStats.apkSize && libSize == otherStats.libSize && dmSize == otherStats.dmSize && dexoptSize == otherStats.dexoptSize && curProfSize == otherStats.curProfSize && refProfSize == otherStats.refProfSize && externalCodeSize == otherStats.externalCodeSize && externalDataSize == otherStats.externalDataSize && externalCacheSize == otherStats.externalCacheSize Loading @@ -244,7 +280,8 @@ public class PackageStats implements Parcelable { @Override public int hashCode() { return Objects.hash(packageName, userHandle, codeSize, dataSize, apkSize, libSize, dmSize, cacheSize, externalCodeSize, apkSize, libSize, dmSize, dexoptSize, curProfSize, refProfSize, cacheSize, externalCodeSize, externalDataSize, externalCacheSize, externalMediaSize, externalObbSize); } Loading services/usage/Android.bp +4 −1 Original line number Diff line number Diff line Loading @@ -18,5 +18,8 @@ java_library_static { name: "services.usage", defaults: ["platform_service_defaults"], srcs: [":services.usage-sources"], libs: ["services.core"], libs: [ "services.core", "service-art.stubs.system_server", ], } services/usage/java/com/android/server/usage/StorageStatsService.java +29 −2 Original line number Diff line number Diff line Loading @@ -19,7 +19,9 @@ package com.android.server.usage; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static com.android.internal.util.ArrayUtils.defeatNullable; import static com.android.server.pm.DexOptHelper.getArtManagerLocal; import static com.android.server.pm.PackageManagerService.PLATFORM_PACKAGE_NAME; import static com.android.server.pm.PackageManagerServiceUtils.getPackageManagerLocal; import static com.android.server.usage.StorageStatsManagerLocal.StorageStatsAugmenter; import android.Manifest; Loading Loading @@ -76,6 +78,9 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; import com.android.internal.util.Preconditions; import com.android.server.art.ArtManagerLocal; import com.android.server.art.model.ArtManagedFileStats; import com.android.server.pm.PackageManagerLocal.FilteredSnapshot; import com.android.server.IoThread; import com.android.server.LocalManagerRegistry; import com.android.server.LocalServices; Loading Loading @@ -449,7 +454,7 @@ public class StorageStatsService extends IStorageStatsManager.Stub { } if (Flags.getAppBytesByDataTypeApi()) { computeAppStatsByDataTypes( stats, appInfo.sourceDir); stats, appInfo.sourceDir, packageNames[i]); } } } catch (NameNotFoundException e) { Loading Loading @@ -592,6 +597,9 @@ public class StorageStatsService extends IStorageStatsManager.Stub { res.codeBytes = stats.codeSize + stats.externalCodeSize; res.dataBytes = stats.dataSize + stats.externalDataSize; res.cacheBytes = stats.cacheSize + stats.externalCacheSize; res.dexoptBytes = stats.dexoptSize; res.curProfBytes = stats.curProfSize; res.refProfBytes = stats.refProfSize; res.apkBytes = stats.apkSize; res.libBytes = stats.libSize; res.dmBytes = stats.dmSize; Loading Loading @@ -946,7 +954,7 @@ public class StorageStatsService extends IStorageStatsManager.Stub { } private void computeAppStatsByDataTypes( PackageStats stats, String sourceDirName) { PackageStats stats, String sourceDirName, String packageName) { // Get apk, lib, dm file sizes. File srcDir = new File(sourceDirName); Loading @@ -958,5 +966,24 @@ public class StorageStatsService extends IStorageStatsManager.Stub { stats.apkSize += getFileBytesInDir(srcDir, ".apk"); stats.dmSize += getFileBytesInDir(srcDir, ".dm"); stats.libSize += getDirBytes(new File(sourceDirName + "/lib/")); // Get dexopt, current profle and reference profile sizes. if (SystemProperties.getBoolean("dalvik.vm.features.art_managed_file_stats", false)) { ArtManagedFileStats artManagedFileStats; try (var snapshot = getPackageManagerLocal().withFilteredSnapshot()) { artManagedFileStats = getArtManagerLocal().getArtManagedFileStats(snapshot, packageName); } stats.dexoptSize += artManagedFileStats .getTotalSizeBytesByType(ArtManagedFileStats.TYPE_DEXOPT_ARTIFACT); stats.refProfSize += artManagedFileStats .getTotalSizeBytesByType(ArtManagedFileStats.TYPE_REF_PROFILE); stats.curProfSize += artManagedFileStats .getTotalSizeBytesByType(ArtManagedFileStats.TYPE_CUR_PROFILE); } } } Loading
core/api/current.txt +6 −3 Original line number Diff line number Diff line Loading @@ -9357,9 +9357,12 @@ package android.app.usage { method public long getDataBytes(); method public long getExternalCacheBytes(); method public void writeToParcel(android.os.Parcel, int); field @FlaggedApi("android.app.usage.get_app_bytes_by_data_type_api") public static final int APP_DATA_TYPE_FILE_TYPE_APK = 0; // 0x0 field @FlaggedApi("android.app.usage.get_app_bytes_by_data_type_api") public static final int APP_DATA_TYPE_FILE_TYPE_DM = 1; // 0x1 field @FlaggedApi("android.app.usage.get_app_bytes_by_data_type_api") public static final int APP_DATA_TYPE_LIB = 2; // 0x2 field @FlaggedApi("android.app.usage.get_app_bytes_by_data_type_api") public static final int APP_DATA_TYPE_FILE_TYPE_APK = 3; // 0x3 field @FlaggedApi("android.app.usage.get_app_bytes_by_data_type_api") public static final int APP_DATA_TYPE_FILE_TYPE_CURRENT_PROFILE = 2; // 0x2 field @FlaggedApi("android.app.usage.get_app_bytes_by_data_type_api") public static final int APP_DATA_TYPE_FILE_TYPE_DEXOPT_ARTIFACT = 0; // 0x0 field @FlaggedApi("android.app.usage.get_app_bytes_by_data_type_api") public static final int APP_DATA_TYPE_FILE_TYPE_DM = 4; // 0x4 field @FlaggedApi("android.app.usage.get_app_bytes_by_data_type_api") public static final int APP_DATA_TYPE_FILE_TYPE_REFERENCE_PROFILE = 1; // 0x1 field @FlaggedApi("android.app.usage.get_app_bytes_by_data_type_api") public static final int APP_DATA_TYPE_LIB = 5; // 0x5 field @NonNull public static final android.os.Parcelable.Creator<android.app.usage.StorageStats> CREATOR; }
core/java/android/app/usage/StorageStats.java +69 −6 Original line number Diff line number Diff line Loading @@ -40,28 +40,79 @@ public final class StorageStats implements Parcelable { /** @hide */ public long apkBytes; /** @hide */ public long libBytes; /** @hide */ public long dmBytes; /** @hide */ public long dexoptBytes; /** @hide */ public long curProfBytes; /** @hide */ public long refProfBytes; /** @hide */ public long externalCacheBytes; /** Represents all .apk files in application code path. /** * Represents all nonstale dexopt and runtime artifacts of application. * This includes AOT-compiled code and other data that can speed up app execution. * For more detailed information, read the * <a href="https://source.android.com/docs/core/runtime/jit-compiler#flow">JIT compiler</a> * guide. * * Dexopt artifacts become stale when one of their dependencies * has changed. They may be cleaned up or replaced by ART Services at any time. * * For a preload app, this type includes dexopt artifacts on readonly partitions * if they are up-to-date. * * Can be used as an input to {@link #getAppBytesByDataType(int)} * to get the sum of sizes for files of this type. The sum might include the size of data * that is part of appBytes, dataBytes or cacheBytes. */ @FlaggedApi(Flags.FLAG_GET_APP_BYTES_BY_DATA_TYPE_API) public static final int APP_DATA_TYPE_FILE_TYPE_DEXOPT_ARTIFACT = 0; /** * Represents reference profile of application. * * Reference profiles are the ones used during the last profile-guided dexopt. * If the last dexopt wasn't profile-guided, then these profiles were not used. * * Can be used as an input to {@link #getAppBytesByDataType(int)} * to get the size of files of this type. */ @FlaggedApi(Flags.FLAG_GET_APP_BYTES_BY_DATA_TYPE_API) public static final int APP_DATA_TYPE_FILE_TYPE_REFERENCE_PROFILE = 1; /** * Represents current profile of application. * * Current profiles may or may not be used during the next profile-guided dexopt. * * Can be used as an input to {@link #getAppBytesByDataType(int)} * to get the size of files of this type. This size fluctuates regularly, * it goes up when the user uses more and more classes/methods and comes down when * a deamon merges this into the ref profile and does profile-guided dexopt. */ @FlaggedApi(Flags.FLAG_GET_APP_BYTES_BY_DATA_TYPE_API) public static final int APP_DATA_TYPE_FILE_TYPE_CURRENT_PROFILE = 2; /** * Represents all .apk files in application code path. * Can be used as an input to {@link #getAppBytesByDataType(int)} * to get the sum of sizes for files of this type. */ @FlaggedApi(Flags.FLAG_GET_APP_BYTES_BY_DATA_TYPE_API) public static final int APP_DATA_TYPE_FILE_TYPE_APK = 0; public static final int APP_DATA_TYPE_FILE_TYPE_APK = 3; /** Represents all .dm files in application code path. /** * Represents all .dm files in application code path. * Can be used as an input to {@link #getAppBytesByDataType(int)} * to get the sum of sizes for files of this type. */ @FlaggedApi(Flags.FLAG_GET_APP_BYTES_BY_DATA_TYPE_API) public static final int APP_DATA_TYPE_FILE_TYPE_DM = 1; public static final int APP_DATA_TYPE_FILE_TYPE_DM = 4; /** Represents lib/ in application code path. /** * Represents lib/ in application code path. * Can be used as an input to {@link #getAppBytesByDataType(int)} * to get the size of lib/ directory. */ @FlaggedApi(Flags.FLAG_GET_APP_BYTES_BY_DATA_TYPE_API) public static final int APP_DATA_TYPE_LIB = 2; public static final int APP_DATA_TYPE_LIB = 5; /** * Keep in sync with the file types defined above. Loading @@ -69,6 +120,9 @@ public final class StorageStats implements Parcelable { */ @FlaggedApi(Flags.FLAG_GET_APP_BYTES_BY_DATA_TYPE_API) @IntDef(flag = false, value = { APP_DATA_TYPE_FILE_TYPE_DEXOPT_ARTIFACT, APP_DATA_TYPE_FILE_TYPE_REFERENCE_PROFILE, APP_DATA_TYPE_FILE_TYPE_CURRENT_PROFILE, APP_DATA_TYPE_FILE_TYPE_APK, APP_DATA_TYPE_FILE_TYPE_DM, APP_DATA_TYPE_LIB, Loading Loading @@ -103,6 +157,9 @@ public final class StorageStats implements Parcelable { @FlaggedApi(Flags.FLAG_GET_APP_BYTES_BY_DATA_TYPE_API) public long getAppBytesByDataType(@AppDataType int dataType) { switch (dataType) { case APP_DATA_TYPE_FILE_TYPE_DEXOPT_ARTIFACT: return dexoptBytes; case APP_DATA_TYPE_FILE_TYPE_REFERENCE_PROFILE: return refProfBytes; case APP_DATA_TYPE_FILE_TYPE_CURRENT_PROFILE: return curProfBytes; case APP_DATA_TYPE_FILE_TYPE_APK: return apkBytes; case APP_DATA_TYPE_LIB: return libBytes; case APP_DATA_TYPE_FILE_TYPE_DM: return dmBytes; Loading Loading @@ -161,6 +218,9 @@ public final class StorageStats implements Parcelable { this.codeBytes = in.readLong(); this.dataBytes = in.readLong(); this.cacheBytes = in.readLong(); this.dexoptBytes = in.readLong(); this.refProfBytes = in.readLong(); this.curProfBytes = in.readLong(); this.apkBytes = in.readLong(); this.libBytes = in.readLong(); this.dmBytes = in.readLong(); Loading @@ -177,6 +237,9 @@ public final class StorageStats implements Parcelable { dest.writeLong(codeBytes); dest.writeLong(dataBytes); dest.writeLong(cacheBytes); dest.writeLong(dexoptBytes); dest.writeLong(refProfBytes); dest.writeLong(curProfBytes); dest.writeLong(apkBytes); dest.writeLong(libBytes); dest.writeLong(dmBytes); Loading
core/java/android/content/pm/PackageStats.java +38 −1 Original line number Diff line number Diff line Loading @@ -67,6 +67,18 @@ public class PackageStats implements Parcelable { /** @hide */ public long dmSize; /** Size of dexopt artifacts of the application. */ /** @hide */ public long dexoptSize; /** Size of the current profile of the application. */ /** @hide */ public long curProfSize; /** Size of the reference profile of the application. */ /** @hide */ public long refProfSize; /** * Size of the secure container on external storage holding the * application's code. Loading Loading @@ -132,6 +144,18 @@ public class PackageStats implements Parcelable { sb.append(" dm="); sb.append(dmSize); } if (dexoptSize != 0) { sb.append(" dexopt="); sb.append(dexoptSize); } if (curProfSize != 0) { sb.append(" curProf="); sb.append(curProfSize); } if (refProfSize != 0) { sb.append(" refProf="); sb.append(refProfSize); } if (externalCodeSize != 0) { sb.append(" extCode="); sb.append(externalCodeSize); Loading Loading @@ -176,6 +200,9 @@ public class PackageStats implements Parcelable { apkSize = source.readLong(); libSize = source.readLong(); dmSize = source.readLong(); dexoptSize = source.readLong(); curProfSize = source.readLong(); refProfSize = source.readLong(); externalCodeSize = source.readLong(); externalDataSize = source.readLong(); externalCacheSize = source.readLong(); Loading @@ -192,6 +219,9 @@ public class PackageStats implements Parcelable { apkSize = pStats.apkSize; libSize = pStats.libSize; dmSize = pStats.dmSize; dexoptSize = pStats.dexoptSize; curProfSize = pStats.curProfSize; refProfSize = pStats.refProfSize; externalCodeSize = pStats.externalCodeSize; externalDataSize = pStats.externalDataSize; externalCacheSize = pStats.externalCacheSize; Loading @@ -212,6 +242,9 @@ public class PackageStats implements Parcelable { dest.writeLong(apkSize); dest.writeLong(libSize); dest.writeLong(dmSize); dest.writeLong(dexoptSize); dest.writeLong(curProfSize); dest.writeLong(refProfSize); dest.writeLong(externalCodeSize); dest.writeLong(externalDataSize); dest.writeLong(externalCacheSize); Loading @@ -234,6 +267,9 @@ public class PackageStats implements Parcelable { && apkSize == otherStats.apkSize && libSize == otherStats.libSize && dmSize == otherStats.dmSize && dexoptSize == otherStats.dexoptSize && curProfSize == otherStats.curProfSize && refProfSize == otherStats.refProfSize && externalCodeSize == otherStats.externalCodeSize && externalDataSize == otherStats.externalDataSize && externalCacheSize == otherStats.externalCacheSize Loading @@ -244,7 +280,8 @@ public class PackageStats implements Parcelable { @Override public int hashCode() { return Objects.hash(packageName, userHandle, codeSize, dataSize, apkSize, libSize, dmSize, cacheSize, externalCodeSize, apkSize, libSize, dmSize, dexoptSize, curProfSize, refProfSize, cacheSize, externalCodeSize, externalDataSize, externalCacheSize, externalMediaSize, externalObbSize); } Loading
services/usage/Android.bp +4 −1 Original line number Diff line number Diff line Loading @@ -18,5 +18,8 @@ java_library_static { name: "services.usage", defaults: ["platform_service_defaults"], srcs: [":services.usage-sources"], libs: ["services.core"], libs: [ "services.core", "service-art.stubs.system_server", ], }
services/usage/java/com/android/server/usage/StorageStatsService.java +29 −2 Original line number Diff line number Diff line Loading @@ -19,7 +19,9 @@ package com.android.server.usage; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static com.android.internal.util.ArrayUtils.defeatNullable; import static com.android.server.pm.DexOptHelper.getArtManagerLocal; import static com.android.server.pm.PackageManagerService.PLATFORM_PACKAGE_NAME; import static com.android.server.pm.PackageManagerServiceUtils.getPackageManagerLocal; import static com.android.server.usage.StorageStatsManagerLocal.StorageStatsAugmenter; import android.Manifest; Loading Loading @@ -76,6 +78,9 @@ import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; import com.android.internal.util.Preconditions; import com.android.server.art.ArtManagerLocal; import com.android.server.art.model.ArtManagedFileStats; import com.android.server.pm.PackageManagerLocal.FilteredSnapshot; import com.android.server.IoThread; import com.android.server.LocalManagerRegistry; import com.android.server.LocalServices; Loading Loading @@ -449,7 +454,7 @@ public class StorageStatsService extends IStorageStatsManager.Stub { } if (Flags.getAppBytesByDataTypeApi()) { computeAppStatsByDataTypes( stats, appInfo.sourceDir); stats, appInfo.sourceDir, packageNames[i]); } } } catch (NameNotFoundException e) { Loading Loading @@ -592,6 +597,9 @@ public class StorageStatsService extends IStorageStatsManager.Stub { res.codeBytes = stats.codeSize + stats.externalCodeSize; res.dataBytes = stats.dataSize + stats.externalDataSize; res.cacheBytes = stats.cacheSize + stats.externalCacheSize; res.dexoptBytes = stats.dexoptSize; res.curProfBytes = stats.curProfSize; res.refProfBytes = stats.refProfSize; res.apkBytes = stats.apkSize; res.libBytes = stats.libSize; res.dmBytes = stats.dmSize; Loading Loading @@ -946,7 +954,7 @@ public class StorageStatsService extends IStorageStatsManager.Stub { } private void computeAppStatsByDataTypes( PackageStats stats, String sourceDirName) { PackageStats stats, String sourceDirName, String packageName) { // Get apk, lib, dm file sizes. File srcDir = new File(sourceDirName); Loading @@ -958,5 +966,24 @@ public class StorageStatsService extends IStorageStatsManager.Stub { stats.apkSize += getFileBytesInDir(srcDir, ".apk"); stats.dmSize += getFileBytesInDir(srcDir, ".dm"); stats.libSize += getDirBytes(new File(sourceDirName + "/lib/")); // Get dexopt, current profle and reference profile sizes. if (SystemProperties.getBoolean("dalvik.vm.features.art_managed_file_stats", false)) { ArtManagedFileStats artManagedFileStats; try (var snapshot = getPackageManagerLocal().withFilteredSnapshot()) { artManagedFileStats = getArtManagerLocal().getArtManagedFileStats(snapshot, packageName); } stats.dexoptSize += artManagedFileStats .getTotalSizeBytesByType(ArtManagedFileStats.TYPE_DEXOPT_ARTIFACT); stats.refProfSize += artManagedFileStats .getTotalSizeBytesByType(ArtManagedFileStats.TYPE_REF_PROFILE); stats.curProfSize += artManagedFileStats .getTotalSizeBytesByType(ArtManagedFileStats.TYPE_CUR_PROFILE); } } }