Merge "ZygoteInit: warm up JCA providers during preload" into nyc-dev am: 5a68af3840

am: d423407254

* commit 'd423407254bcdb33e6b19239096c1d5db7d6cdd5':
  ZygoteInit: warm up JCA providers during preload

Change-Id: I2295ea88e46868ded46e276cffb57c341da88d69
This commit is contained in:
Sergio Giro
2016-05-17 11:15:59 +00:00
committed by android-build-merger

View File

@@ -56,6 +56,8 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.security.Security;
import java.security.Provider;
import java.util.ArrayList;
/**
@@ -198,6 +200,7 @@ public class ZygoteInit {
// Ask the WebViewFactory to do any initialization that must run in the zygote process,
// for memory sharing purposes.
WebViewFactory.prepareWebViewInZygote();
warmUpJcaProviders();
Log.d(TAG, "end preload");
}
@@ -219,6 +222,24 @@ public class ZygoteInit {
TextView.preloadFontCache();
}
/**
* Warm up the providers that are already registered.
*
* By doing it here we avoid that each app does it when requesting a service from the
* provider for the first time.
*/
private static void warmUpJcaProviders() {
long startTime = SystemClock.uptimeMillis();
Trace.traceBegin(
Trace.TRACE_TAG_DALVIK, "Starting warm up of JCA providers");
for (Provider p : Security.getProviders()) {
p.warmUpServiceProvision();
}
Log.i(TAG, "Warmed up JCA providers in "
+ (SystemClock.uptimeMillis()-startTime) + "ms.");
Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
}
/**
* Performs Zygote process initialization. Loads and initializes
* commonly used classes.