Merge "Add support for ICU data pinning in the Zygote"

am: 9b1d64410d

* commit '9b1d64410dfddc38ade15d1581de2c89ad79948a':
  Add support for ICU data pinning in the Zygote

Change-Id: I53a2d5f885df5cf633a4a63cb2e3c2bc5c75959e
This commit is contained in:
Neil Fuller
2016-05-18 11:51:05 +00:00
committed by android-build-merger

View File

@@ -22,6 +22,9 @@ import static android.system.OsConstants.S_IRWXO;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.icu.impl.CacheValue;
import android.icu.text.DecimalFormatSymbols;
import android.icu.util.ULocale;
import android.net.LocalServerSocket;
import android.opengl.EGL14;
import android.os.Process;
@@ -181,6 +184,9 @@ public class ZygoteInit {
static void preload() {
Log.d(TAG, "begin preload");
Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "BeginIcuCachePinning");
beginIcuCachePinning();
Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
Trace.traceBegin(Trace.TRACE_TAG_DALVIK, "PreloadClasses");
preloadClasses();
Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
@@ -195,10 +201,34 @@ public class ZygoteInit {
// Ask the WebViewFactory to do any initialization that must run in the zygote process,
// for memory sharing purposes.
WebViewFactory.prepareWebViewInZygote();
endIcuCachePinning();
warmUpJcaProviders();
Log.d(TAG, "end preload");
}
private static void beginIcuCachePinning() {
// Pin ICU data in memory from this point that would normally be held by soft references.
// Without this, any references created immediately below or during class preloading
// would be collected when the Zygote GC runs in gcAndFinalize().
Log.i(TAG, "Installing ICU cache reference pinning...");
CacheValue.setStrength(CacheValue.Strength.STRONG);
Log.i(TAG, "Preloading ICU data...");
// Explicitly exercise code to cache data apps are likely to need.
ULocale[] localesToPin = { ULocale.ROOT, ULocale.US, ULocale.getDefault() };
for (ULocale uLocale : localesToPin) {
new DecimalFormatSymbols(uLocale);
}
}
private static void endIcuCachePinning() {
// All cache references created by ICU from this point will be soft.
CacheValue.setStrength(CacheValue.Strength.SOFT);
Log.i(TAG, "Uninstalled ICU cache reference pinning...");
}
private static void preloadSharedLibraries() {
Log.i(TAG, "Preloading shared libraries...");
System.loadLibrary("android");