diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index a3e41e47b2678..6d5eff62a7396 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -240,6 +240,24 @@ public class ZygoteInit { Trace.traceEnd(Trace.TRACE_TAG_DALVIK); } + /** + * 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.