summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--graphics/java/android/graphics/Typeface.java15
-rw-r--r--libs/hwui/jni/Typeface.cpp7
2 files changed, 22 insertions, 0 deletions
diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java
index 40c75a4d2f2f..32c777cf498c 100644
--- a/graphics/java/android/graphics/Typeface.java
+++ b/graphics/java/android/graphics/Typeface.java
@@ -1346,6 +1346,19 @@ public class Typeface {
}
}
+ static {
+ // Preload Roboto-Regular.ttf in Zygote for improving app launch performance.
+ // TODO: add new attribute to fonts.xml to preload fonts in Zygote.
+ preloadFontFile("/system/fonts/Roboto-Regular.ttf");
+ }
+
+ private static void preloadFontFile(String filePath) {
+ File file = new File(filePath);
+ if (file.exists()) {
+ nativeWarmUpCache(filePath);
+ }
+ }
+
/** @hide */
@VisibleForTesting
public static void destroySystemFontMap() {
@@ -1464,4 +1477,6 @@ public class Typeface {
private static native @Nullable long[] nativeReadTypefaces(@NonNull ByteBuffer buffer);
private static native void nativeForceSetStaticFinalField(String fieldName, Typeface typeface);
+
+ private static native void nativeWarmUpCache(String fileName);
}
diff --git a/libs/hwui/jni/Typeface.cpp b/libs/hwui/jni/Typeface.cpp
index 18423562bc56..251323d34422 100644
--- a/libs/hwui/jni/Typeface.cpp
+++ b/libs/hwui/jni/Typeface.cpp
@@ -367,6 +367,12 @@ static jlong Typeface_getFamily(CRITICAL_JNI_PARAMS_COMMA jlong faceHandle, jint
return reinterpret_cast<jlong>(new FontFamilyWrapper(std::move(family)));
}
+// Regular JNI
+static void Typeface_warmUpCache(JNIEnv* env, jobject, jstring jFilePath) {
+ ScopedUtfChars filePath(env, jFilePath);
+ makeSkDataCached(filePath.c_str(), false /* fs verity */);
+}
+
///////////////////////////////////////////////////////////////////////////////
static const JNINativeMethod gTypefaceMethods[] = {
@@ -390,6 +396,7 @@ static const JNINativeMethod gTypefaceMethods[] = {
(void*)Typeface_forceSetStaticFinalField},
{"nativeGetFamilySize", "(J)I", (void*)Typeface_getFamilySize},
{"nativeGetFamily", "(JI)J", (void*)Typeface_getFamily},
+ {"nativeWarmUpCache", "(Ljava/lang/String;)V", (void*)Typeface_warmUpCache},
};
int register_android_graphics_Typeface(JNIEnv* env)