Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c17f1064 authored by Nicolas Geoffray's avatar Nicolas Geoffray Committed by Automerger Merge Worker
Browse files

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

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1646526

Change-Id: I73ee02845783e7869fc3f941fe2c81bc155f3846
parents dfcdeef5 03faaa58
Loading
Loading
Loading
Loading
+26 −13
Original line number Diff line number Diff line
@@ -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(
        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);
                    }
                }
            }
        }
    }