Merge "Break some dependencies on libcore internals"

am: f672c2bcb8

Change-Id: I234d938606b07a5116c39dfcc378d55bcd521c2d
This commit is contained in:
Neil Fuller
2018-07-24 02:33:02 -07:00
committed by android-build-merger
2 changed files with 16 additions and 44 deletions

View File

@@ -30,14 +30,13 @@ import android.util.Log;
import android.util.Slog;
import com.android.internal.logging.AndroidConfig;
import com.android.server.NetworkManagementSocketTagger;
import dalvik.system.RuntimeHooks;
import dalvik.system.VMRuntime;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.Objects;
import java.util.TimeZone;
import java.util.logging.LogManager;
import org.apache.harmony.luni.internal.util.TimezoneGetter;
/**
* Main entry point for runtime initialization. Not for
@@ -195,19 +194,13 @@ public class RuntimeInit {
* the default handler, but not the pre handler.
*/
LoggingHandler loggingHandler = new LoggingHandler();
Thread.setUncaughtExceptionPreHandler(loggingHandler);
RuntimeHooks.setUncaughtExceptionPreHandler(loggingHandler);
Thread.setDefaultUncaughtExceptionHandler(new KillApplicationHandler(loggingHandler));
/*
* Install a TimezoneGetter subclass for ZoneInfo.db
* Install a time zone supplier that uses the Android persistent time zone system property.
*/
TimezoneGetter.setInstance(new TimezoneGetter() {
@Override
public String getId() {
return SystemProperties.get("persist.sys.timezone");
}
});
TimeZone.setDefault(null);
RuntimeHooks.setTimeZoneIdSupplier(() -> SystemProperties.get("persist.sys.timezone"));
/*
* Sets handler for java.util.logging to use Android log facilities.

View File

@@ -21,9 +21,6 @@ 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.opengl.EGL14;
import android.os.Build;
import android.os.Environment;
@@ -122,9 +119,9 @@ public class ZygoteInit {
static void preload(TimingsTraceLog bootTimingsTraceLog) {
Log.d(TAG, "begin preload");
bootTimingsTraceLog.traceBegin("BeginIcuCachePinning");
beginIcuCachePinning();
bootTimingsTraceLog.traceEnd(); // BeginIcuCachePinning
bootTimingsTraceLog.traceBegin("BeginPreload");
beginPreload();
bootTimingsTraceLog.traceEnd(); // BeginPreload
bootTimingsTraceLog.traceBegin("PreloadClasses");
preloadClasses();
bootTimingsTraceLog.traceEnd(); // PreloadClasses
@@ -142,7 +139,7 @@ public class ZygoteInit {
// Ask the WebViewFactory to do any initialization that must run in the zygote process,
// for memory sharing purposes.
WebViewFactory.prepareWebViewInZygote();
endIcuCachePinning();
endPreload();
warmUpJcaProviders();
Log.d(TAG, "end preload");
@@ -156,27 +153,16 @@ public class ZygoteInit {
preload(new TimingsTraceLog("ZygoteInitTiming_lazy", Trace.TRACE_TAG_DALVIK));
}
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...");
private static void beginPreload() {
Log.i(TAG, "Calling ZygoteHooks.beginPreload()");
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);
}
ZygoteHooks.onBeginPreload();
}
private static void endIcuCachePinning() {
// All cache references created by ICU from this point will be soft.
CacheValue.setStrength(CacheValue.Strength.SOFT);
private static void endPreload() {
ZygoteHooks.onEndPreload();
Log.i(TAG, "Uninstalled ICU cache reference pinning...");
Log.i(TAG, "Called ZygoteHooks.endPreload()");
}
private static void preloadSharedLibraries() {
@@ -436,15 +422,8 @@ public class ZygoteInit {
* softly- and final-reachable objects, along with any other garbage.
* This is only useful just before a fork().
*/
/*package*/ static void gcAndFinalize() {
final VMRuntime runtime = VMRuntime.getRuntime();
/* runFinalizationSync() lets finalizers be called in Zygote,
* which doesn't have a HeapWorker thread.
*/
System.gc();
runtime.runFinalizationSync();
System.gc();
private static void gcAndFinalize() {
ZygoteHooks.gcAndFinalize();
}
/**