Merge "When a pinned file is a jar or apk, ask the runtime for other files."

This commit is contained in:
Nicolas Geoffray
2021-03-29 07:47:43 +00:00
committed by Gerrit Code Review

View File

@@ -270,18 +270,9 @@ public final class PinnerService extends SystemService {
* Handler for on start pinning message
*/
private void handlePinOnStart() {
final String bootImage = SystemProperties.get("dalvik.vm.boot-image", "");
String[] filesToPin = null;
if (bootImage.endsWith("boot-image.prof")) {
// Use the files listed for that specific boot image.
// TODO: find a better way to know we're using the JIT zygote configuration.
filesToPin = mContext.getResources().getStringArray(
com.android.internal.R.array.config_jitzygoteBootImagePinnerServiceFiles);
} else {
// Files to pin come from the overlay and can be specified per-device config
filesToPin = mContext.getResources().getStringArray(
com.android.internal.R.array.config_defaultPinnerServiceFiles);
}
// Files to pin come from the overlay and can be specified per-device config
String[] filesToPin = mContext.getResources().getStringArray(
com.android.internal.R.array.config_defaultPinnerServiceFiles);
// Continue trying to pin each file even if we fail to pin some of them
for (String fileToPin : filesToPin) {
PinnedFile pf = pinFile(fileToPin,
@@ -291,10 +282,32 @@ public final class PinnerService extends SystemService {
Slog.e(TAG, "Failed to pin file = " + fileToPin);
continue;
}
synchronized (this) {
mPinnedFiles.add(pf);
}
if (fileToPin.endsWith(".jar") | fileToPin.endsWith(".apk")) {
// Check whether the runtime has compilation artifacts to pin.
String arch = VMRuntime.getInstructionSet(Build.SUPPORTED_ABIS[0]);
String[] files = null;
try {
files = DexFile.getDexFileOutputPaths(fileToPin, arch);
} catch (IOException ioe) { }
if (files == null) {
continue;
}
for (String file : files) {
PinnedFile df = pinFile(file,
Integer.MAX_VALUE,
/*attemptPinIntrospection=*/false);
if (df == null) {
Slog.i(TAG, "Failed to pin ART file = " + file);
continue;
}
synchronized (this) {
mPinnedFiles.add(df);
}
}
}
}
}