From 991f134df3bca4d436d2da24761f915c486f5b4a Mon Sep 17 00:00:00 2001 From: Seigo Nonaka Date: Tue, 9 Mar 2021 17:50:25 -0800 Subject: [PATCH] Expose shared memory related APIs for testing purpose Bug: 179697509 Test: atest TypefaceTest Change-Id: Ie1729574f46d653ce07263581626e0483f1bdd3b --- core/api/test-current.txt | 6 ++++ graphics/java/android/graphics/Typeface.java | 36 +++++++++++++++++--- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/core/api/test-current.txt b/core/api/test-current.txt index b1db6c17e1c28..04d2e6081d3d7 100644 --- a/core/api/test-current.txt +++ b/core/api/test-current.txt @@ -938,6 +938,12 @@ package android.graphics { method public void splitVertically(@NonNull android.graphics.Rect...); } + public class Typeface { + method @NonNull public static java.util.Map deserializeFontMap(@NonNull java.nio.ByteBuffer) throws java.io.IOException; + method @Nullable public static android.os.SharedMemory getSystemFontMapSharedMemory(); + method @NonNull public static android.os.SharedMemory serializeFontMap(@NonNull java.util.Map) throws android.system.ErrnoException, java.io.IOException; + } + } package android.graphics.drawable { diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java index c80788269c249..2a6bbf36ef76a 100644 --- a/graphics/java/android/graphics/Typeface.java +++ b/graphics/java/android/graphics/Typeface.java @@ -25,6 +25,7 @@ import android.annotation.IntDef; import android.annotation.IntRange; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.TestApi; import android.annotation.UiThread; import android.compat.annotation.UnsupportedAppUsage; import android.content.res.AssetManager; @@ -168,6 +169,21 @@ public class Typeface { static final Map sSystemFallbackMap = Collections.emptyMap(); + /** + * Returns the shared memory that used for creating Typefaces. + * + * @return A SharedMemory used for creating Typeface. Maybe null if the lazy initialization is + * disabled or inside SystemServer or Zygote. + * @hide + */ + @TestApi + public static @Nullable SharedMemory getSystemFontMapSharedMemory() { + if (ENABLE_LAZY_TYPEFACE_INITIALIZATION) { + Objects.requireNonNull(sSystemFontMapSharedMemory); + } + return sSystemFontMapSharedMemory; + } + /** * @hide */ @@ -1196,8 +1212,13 @@ public class Typeface { } } - /** @hide */ - public static SharedMemory serializeFontMap(Map fontMap) + /** + * Create a serialized system font mappings. + * + * @hide + */ + @TestApi + public static @NonNull SharedMemory serializeFontMap(@NonNull Map fontMap) throws IOException, ErrnoException { long[] nativePtrs = new long[fontMap.size()]; // The name table will not be large, so let's create a byte array in memory. @@ -1229,9 +1250,14 @@ public class Typeface { } // buffer's byte order should be BIG_ENDIAN. - /** @hide */ - @VisibleForTesting - public static Map deserializeFontMap(ByteBuffer buffer) throws IOException { + /** + * Deserialize the font mapping from the serialized byte buffer. + * + * @hide + */ + @TestApi + public static @NonNull Map deserializeFontMap(@NonNull ByteBuffer buffer) + throws IOException { Map fontMap = new ArrayMap<>(); int typefacesBytesCount = buffer.getInt(); long[] nativePtrs = nativeReadTypefaces(buffer.slice());