Stop using finalizer in Typeface and FontFamily
Use NativeAllocationRegistry instead.
Verified this doesn't cause performance regressions:
StaticLayout creation time:
MeasuredText Balanced Hyphenation : 721,055 -> 723,812: (+0.4%)
MeasuredText Balanced NoHyphenation: 527,880 -> 505,843: (-4.2%)
MeasuredText Greedy Hyphenation : 476,982 -> 460,241: (-3.5%)
MeasuredText Greedy NoHyphenation : 471,074 -> 459,013: (-2.6%)
RandomText Balanced Hyphenation : 18,566,915 -> 18,514,633: (-0.3%)
RandomText Balanced NoHyphenation : 7,697,772 -> 7,658,458: (-0.5%)
RandomText Greedy Hyphenation : 7,648,606 -> 7,602,026: (-0.6%)
RandomText Greedy NoHyphenation : 7,643,946 -> 7,618,898: (-0.3%)
MeasuredText creation time:
NoStyled Hyphenation : 18,377,293 -> 18,521,296: (+0.8%)
NoStyled Hyphenation WidthOnly : 17,852,099 -> 17,889,073: (+0.2%)
NoStyled NoHyphenation : 7,608,972 -> 7,614,311: (+0.1%)
NoStyled NoHyphenation WidthOnly : 7,194,461 -> 7,192,043: (-0.0%)
Styled Hyphenation : 15,396,698 -> 15,352,501: (-0.3%)
Styled Hyphenation WidthOnly : 14,356,020 -> 14,379,205: (+0.2%)
Styled NoHyphenation : 14,926,657 -> 14,971,723: (+0.3%)
Styled NoHyphenation WidthOnly : 13,964,537 -> 13,874,324: (-0.6%)
StaticLayout draw time:
MeasuredText NoStyled : 644,795 -> 635,241: (-1.5%)
MeasuredText NoStyled WithoutCache : 637,943 -> 616,369: (-3.4%)
MeasuredText Styled : 866,664 -> 860,322: (-0.7%)
MeasuredText Styled WithoutCache : 917,795 -> 897,164: (-2.2%)
RandomText NoStyled : 538,196 -> 533,253: (-0.9%)
RandomText NoStyled WithoutCache : 7,012,076 -> 7,047,498: (+0.5%)
RandomText Styled : 3,011,941 -> 2,999,661: (-0.4%)
RandomText Styled WithoutCache : 3,486,225 -> 3,462,493: (-0.7%)
Bug: 70185027
Test: atest CtsWidgetTestCases:EditTextTest
CtsWidgetTestCases:TextViewFadingEdgeTest
FrameworksCoreTests:TextViewFallbackLineSpacingTest
FrameworksCoreTests:TextViewTest FrameworksCoreTests:TypefaceTest
CtsGraphicsTestCases:TypefaceTest CtsWidgetTestCases:TextViewTest
CtsTextTestCases
Change-Id: I7ebb8a219a8eb07c8ad9fa432e8454e4e06be386
This commit is contained in:
@@ -24,6 +24,8 @@ import android.util.Log;
|
||||
|
||||
import dalvik.annotation.optimization.CriticalNative;
|
||||
|
||||
import libcore.util.NativeAllocationRegistry;
|
||||
|
||||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
@@ -38,6 +40,14 @@ public class FontFamily {
|
||||
|
||||
private static String TAG = "FontFamily";
|
||||
|
||||
private static final NativeAllocationRegistry sBuilderRegistry = new NativeAllocationRegistry(
|
||||
FontFamily.class.getClassLoader(), nGetBuilderReleaseFunc(), 64);
|
||||
|
||||
private @Nullable Runnable mNativeBuilderCleaner;
|
||||
|
||||
private static final NativeAllocationRegistry sFamilyRegistry = new NativeAllocationRegistry(
|
||||
FontFamily.class.getClassLoader(), nGetFamilyReleaseFunc(), 64);
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@@ -48,6 +58,7 @@ public class FontFamily {
|
||||
|
||||
public FontFamily() {
|
||||
mBuilderPtr = nInitBuilder(null, 0);
|
||||
mNativeBuilderCleaner = sBuilderRegistry.registerNativeAllocation(this, mBuilderPtr);
|
||||
}
|
||||
|
||||
public FontFamily(@Nullable String[] langs, int variant) {
|
||||
@@ -60,6 +71,7 @@ public class FontFamily {
|
||||
langsString = TextUtils.join(",", langs);
|
||||
}
|
||||
mBuilderPtr = nInitBuilder(langsString, variant);
|
||||
mNativeBuilderCleaner = sBuilderRegistry.registerNativeAllocation(this, mBuilderPtr);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -73,7 +85,11 @@ public class FontFamily {
|
||||
throw new IllegalStateException("This FontFamily is already frozen");
|
||||
}
|
||||
mNativePtr = nCreateFamily(mBuilderPtr);
|
||||
mNativeBuilderCleaner.run();
|
||||
mBuilderPtr = 0;
|
||||
if (mNativePtr != 0) {
|
||||
sFamilyRegistry.registerNativeAllocation(this, mNativePtr);
|
||||
}
|
||||
return mNativePtr != 0;
|
||||
}
|
||||
|
||||
@@ -81,24 +97,10 @@ public class FontFamily {
|
||||
if (mBuilderPtr == 0) {
|
||||
throw new IllegalStateException("This FontFamily is already frozen or abandoned");
|
||||
}
|
||||
nAbort(mBuilderPtr);
|
||||
mNativeBuilderCleaner.run();
|
||||
mBuilderPtr = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void finalize() throws Throwable {
|
||||
try {
|
||||
if (mNativePtr != 0) {
|
||||
nUnrefFamily(mNativePtr);
|
||||
}
|
||||
if (mBuilderPtr != 0) {
|
||||
nAbort(mBuilderPtr);
|
||||
}
|
||||
} finally {
|
||||
super.finalize();
|
||||
}
|
||||
}
|
||||
|
||||
public boolean addFont(String path, int ttcIndex, FontVariationAxis[] axes, int weight,
|
||||
int italic) {
|
||||
if (mBuilderPtr == 0) {
|
||||
@@ -171,10 +173,10 @@ public class FontFamily {
|
||||
private static native long nCreateFamily(long mBuilderPtr);
|
||||
|
||||
@CriticalNative
|
||||
private static native void nAbort(long mBuilderPtr);
|
||||
private static native long nGetBuilderReleaseFunc();
|
||||
|
||||
@CriticalNative
|
||||
private static native void nUnrefFamily(long nativePtr);
|
||||
private static native long nGetFamilyReleaseFunc();
|
||||
// By passing -1 to weigth argument, the weight value is resolved by OS/2 table in the font.
|
||||
// By passing -1 to italic argument, the italic value is resolved by OS/2 table in the font.
|
||||
private static native boolean nAddFont(long builderPtr, ByteBuffer font, int ttcIndex,
|
||||
|
||||
Reference in New Issue
Block a user