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

Commit 8bbaeb7a authored by Seigo Nonaka's avatar Seigo Nonaka
Browse files

Fix performance regression of system_server boot time

The hash calculation of FontFamily took a time. In this case, just
using identity hash should be fine.

Bug: 263015762
Test: atest TypefaceSystemFallbackTest FontListParserTest
Test: atest UpdatableFontDirTest UpdatableSystemFontTest
Test: atest FontManagerTest
Change-Id: Id8c39e646f92977867c82a1effb93c925c909ef2
parent 60d7db22
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -22,8 +22,8 @@ import android.graphics.FontListParser;
import android.graphics.Typeface;
import android.text.FontConfig;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Log;
import android.util.SparseIntArray;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
@@ -117,17 +117,18 @@ public final class SystemFonts {
            }
        }


        final FontFamily defaultFamily = defaultFonts.isEmpty() ? null : createFontFamily(
                defaultFonts, languageTags, variant, false, cache);

        // Insert family into fallback map.
        for (int i = 0; i < fallbackMap.size(); i++) {
            final String name = fallbackMap.keyAt(i);
            final NativeFamilyListSet familyListSet = fallbackMap.valueAt(i);
            if (familyListSet.seenXmlFamilies.contains(xmlFamily)) {
            int identityHash = System.identityHashCode(xmlFamily);
            if (familyListSet.seenXmlFamilies.get(identityHash, -1) != -1) {
                continue;
            } else {
                familyListSet.seenXmlFamilies.add(xmlFamily);
                familyListSet.seenXmlFamilies.append(identityHash, 1);
            }
            final ArrayList<FontConfig.Font> fallback = specificFallbackFonts.get(name);
            if (fallback == null) {
@@ -213,7 +214,7 @@ public final class SystemFonts {
                return;
            }
            familyListSet.familyList.add(family);
            familyListSet.seenXmlFamilies.add(xmlFamily);
            familyListSet.seenXmlFamilies.append(System.identityHashCode(xmlFamily), 1);
        }
        fallbackListMap.put(familyName, familyListSet);
    }
@@ -276,7 +277,7 @@ public final class SystemFonts {

    private static final class NativeFamilyListSet {
        public List<FontFamily> familyList = new ArrayList<>();
        public Set<FontConfig.FontFamily> seenXmlFamilies = new ArraySet<>();
        public SparseIntArray seenXmlFamilies = new SparseIntArray();
    }

    /** @hide */