Loading core/java/com/android/internal/os/ZygoteInit.java +30 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -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"); Loading Loading
core/java/com/android/internal/os/ZygoteInit.java +30 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading @@ -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"); Loading