Merge "Add support for ICU data pinning in the Zygote" am: 9b1d64410d

am: 8491b4c05d

* commit '8491b4c05d35b15e0a4c1a0ef2396cbb7169698a':
  Add support for ICU data pinning in the Zygote

Change-Id: I64ba8a96ab8990a051a68cbdb35f4b1de3738d09
This commit is contained in:
Neil Fuller
2016-05-18 11:55:44 +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;
@@ -186,6 +189,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);
@@ -200,10 +206,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");