Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c71ece32 authored by Zhi Dou's avatar Zhi Dou Committed by Gerrit Code Review
Browse files

Merge "Cache all platform aconfig packages in PlatformAconfigPackage" into main

parents 8b1dd186 74f2cf8c
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -106,10 +106,6 @@
    {
      // aconfig_storage read functional test
      "name": "aconfig_storage_read_functional"
    },
    {
      // aconfig_storage read unit test
      "name": "aconfig_storage_read_unit"
    }
  ]
}
+1 −1
Original line number Diff line number Diff line
@@ -555,7 +555,7 @@ mod tests {
            private static boolean enabledRw = true;
            private void init() {
                try {
                    PlatformAconfigPackageInternal reader = PlatformAconfigPackageInternal.load("system", "com.android.aconfig.test", 0x5081CE7221C77064L);
                    PlatformAconfigPackageInternal reader = PlatformAconfigPackageInternal.load("com.android.aconfig.test", 0x5081CE7221C77064L);
                    disabledRw = reader.getBooleanFlagValue(0);
                    disabledRwExported = reader.getBooleanFlagValue(1);
                    enabledRw = reader.getBooleanFlagValue(7);
+2 −2
Original line number Diff line number Diff line
@@ -27,9 +27,9 @@ public final class FeatureFlagsImpl implements FeatureFlags \{
    private void init() \{
        try \{
{{ if is_platform_container }}
            PlatformAconfigPackageInternal reader = PlatformAconfigPackageInternal.load("{container}", "{package_name}", {package_fingerprint});
            PlatformAconfigPackageInternal reader = PlatformAconfigPackageInternal.load("{package_name}", {package_fingerprint});
{{ -else }}
            AconfigPackageInternal reader = AconfigPackageInternal.load("{container}", "{package_name}", {package_fingerprint});
            AconfigPackageInternal reader = AconfigPackageInternal.load("{package_name}", {package_fingerprint});
{{ -endif }}
        {{ -for namespace_with_flags in namespace_flags }}
        {{ -for flag in namespace_with_flags.flags }}
+12 −0
Original line number Diff line number Diff line
@@ -63,4 +63,16 @@ public class TableUtils {
        long hashVal = SipHasher13.hash(val);
        return (int) Long.remainderUnsigned(hashVal, numBuckets);
    }

     public static class StorageFilesBundle {
        public final PackageTable packageTable;
        public final FlagTable flagTable;
        public final FlagValueList flagValueList;

        public StorageFilesBundle (PackageTable pTable, FlagTable fTable, FlagValueList fValueList) {
            this.packageTable = pTable;
            this.flagTable = fTable;
            this.flagValueList = fValueList;
        }
     }
}
+17 −11
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package android.os.flagging;

import static android.aconfig.storage.TableUtils.StorageFilesBundle;

import android.aconfig.storage.AconfigStorageException;
import android.aconfig.storage.FlagTable;
import android.aconfig.storage.FlagValueList;
@@ -49,8 +51,6 @@ public class PlatformAconfigPackage {
    private static final String MAP_PATH = "/metadata/aconfig/maps/";
    private static final String BOOT_PATH = "/metadata/aconfig/boot/";

    private static final Map<String, PackageTable> sPackageTableCache = new HashMap<>();

    private FlagTable mFlagTable;
    private FlagValueList mFlagValueList;

@@ -59,6 +59,9 @@ public class PlatformAconfigPackage {

    private PlatformAconfigPackage() {}

    /** @hide */
    static final Map<String, StorageFilesBundle> sStorageFilesCache = new HashMap<>();

    /** @hide */
    @UnsupportedAppUsage
    public static final Set<String> PLATFORM_PACKAGE_MAP_FILES =
@@ -68,8 +71,14 @@ public class PlatformAconfigPackage {
        for (String pf : PLATFORM_PACKAGE_MAP_FILES) {
            try {
                PackageTable pTable = PackageTable.fromBytes(mapStorageFile(MAP_PATH + pf));
                String container = pTable.getHeader().getContainer();
                FlagTable fTable =
                        FlagTable.fromBytes(mapStorageFile(MAP_PATH + container + ".flag.map"));
                FlagValueList fValueList =
                        FlagValueList.fromBytes(mapStorageFile(BOOT_PATH + container + ".val"));
                StorageFilesBundle files = new StorageFilesBundle(pTable, fTable, fValueList);
                for (String packageName : pTable.getPackageList()) {
                    sPackageTableCache.put(packageName, pTable);
                    sStorageFilesCache.put(packageName, files);
                }
            } catch (Exception e) {
                // pass
@@ -95,16 +104,13 @@ public class PlatformAconfigPackage {
    public static PlatformAconfigPackage load(String packageName) {
        try {
            PlatformAconfigPackage aconfigPackage = new PlatformAconfigPackage();
            PackageTable pTable = sPackageTableCache.get(packageName);
            if (pTable == null) {
            StorageFilesBundle files = sStorageFilesCache.get(packageName);
            if (files == null) {
                return null;
            }
            PackageTable.Node pNode = pTable.get(packageName);
            String container = pTable.getHeader().getContainer();
            aconfigPackage.mFlagTable =
                    FlagTable.fromBytes(mapStorageFile(MAP_PATH + container + ".flag.map"));
            aconfigPackage.mFlagValueList =
                    FlagValueList.fromBytes(mapStorageFile(BOOT_PATH + container + ".val"));
            PackageTable.Node pNode = files.packageTable.get(packageName);
            aconfigPackage.mFlagTable = files.flagTable;
            aconfigPackage.mFlagValueList = files.flagValueList;
            aconfigPackage.mPackageBooleanStartOffset = pNode.getBooleanStartIndex();
            aconfigPackage.mPackageId = pNode.getPackageId();
            return aconfigPackage;
Loading