diff options
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/app/LoadedApk.java | 23 | ||||
| -rw-r--r-- | core/java/android/content/pm/dex/ArtManager.java | 28 | ||||
| -rw-r--r-- | core/java/android/os/Environment.java | 5 | ||||
| -rw-r--r-- | core/java/com/android/internal/os/ZygoteInit.java | 2 |
4 files changed, 41 insertions, 17 deletions
diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java index 26f498087786..d24d4f341aea 100644 --- a/core/java/android/app/LoadedApk.java +++ b/core/java/android/app/LoadedApk.java @@ -28,6 +28,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; +import android.content.pm.dex.ArtManager; import android.content.pm.split.SplitDependencyLoader; import android.content.res.AssetManager; import android.content.res.CompatibilityInfo; @@ -35,7 +36,6 @@ import android.content.res.Configuration; import android.content.res.Resources; import android.os.Build; import android.os.Bundle; -import android.os.Environment; import android.os.FileUtils; import android.os.Handler; import android.os.IBinder; @@ -49,13 +49,15 @@ import android.text.TextUtils; import android.util.AndroidRuntimeException; import android.util.ArrayMap; import android.util.Log; -import android.util.LogPrinter; import android.util.Slog; import android.util.SparseArray; import android.view.Display; import android.view.DisplayAdjustments; + import com.android.internal.util.ArrayUtils; + import dalvik.system.VMRuntime; + import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -749,13 +751,6 @@ public final class LoadedApk { } } - // Keep in sync with installd (frameworks/native/cmds/installd/commands.cpp). - private static File getPrimaryProfileFile(String packageName) { - File profileDir = Environment.getDataProfilesDePackageDirectory( - UserHandle.myUserId(), packageName); - return new File(profileDir, "primary.prof"); - } - private void setupJitProfileSupport() { if (!SystemProperties.getBoolean("dalvik.vm.usejitprofiles", false)) { return; @@ -783,10 +778,12 @@ public final class LoadedApk { return; } - final File profileFile = getPrimaryProfileFile(mPackageName); - - VMRuntime.registerAppInfo(profileFile.getPath(), - codePaths.toArray(new String[codePaths.size()])); + for (int i = codePaths.size() - 1; i >= 0; i--) { + String splitName = i == 0 ? null : mApplicationInfo.splitNames[i - 1]; + String profileFile = ArtManager.getCurrentProfilePath( + mPackageName, UserHandle.myUserId(), splitName); + VMRuntime.registerAppInfo(profileFile, new String[] {codePaths.get(i)}); + } // Register the app data directory with the reporter. It will // help deciding whether or not a dex file is the primary apk or a diff --git a/core/java/android/content/pm/dex/ArtManager.java b/core/java/android/content/pm/dex/ArtManager.java index aa9c46e6a52d..f979576e5315 100644 --- a/core/java/android/content/pm/dex/ArtManager.java +++ b/core/java/android/content/pm/dex/ArtManager.java @@ -19,6 +19,7 @@ package android.content.pm.dex; import android.annotation.NonNull; import android.annotation.RequiresPermission; import android.annotation.SystemApi; +import android.os.Environment; import android.os.Handler; import android.os.Looper; import android.os.Message; @@ -26,6 +27,8 @@ import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.util.Slog; +import java.io.File; + /** * Class for retrieving various kinds of information related to the runtime artifacts of * packages that are currently installed on the device. @@ -163,4 +166,29 @@ public class ArtManager { public static String getProfileName(String splitName) { return splitName == null ? "primary.prof" : splitName + ".split.prof"; } + + /** + * Return the path to the current profile corresponding to given package and split. + * + * @hide + */ + public static String getCurrentProfilePath(String packageName, int userId, String splitName) { + File profileDir = Environment.getDataProfilesDePackageDirectory(userId, packageName); + return new File(profileDir, getProfileName(splitName)).getAbsolutePath(); + } + + /** + * Return the snapshot profile file for the given package and split. + * + * KEEP in sync with installd dexopt.cpp. + * TODO(calin): inject the snapshot profile name from PM to avoid the dependency. + * + * @hide + */ + public static File getProfileSnapshotFile(String packageName, String splitName) { + File profileDir = Environment.getDataRefProfilesDePackageDirectory(packageName); + String snapshotFile = getProfileName(splitName) + ".snapshot"; + return new File(profileDir, snapshotFile); + + } } diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java index 62731e84a401..158041dd91e7 100644 --- a/core/java/android/os/Environment.java +++ b/core/java/android/os/Environment.java @@ -302,9 +302,8 @@ public class Environment { } /** {@hide} */ - public static File getProfileSnapshotPath(String packageName, String codePath) { - return buildPath(buildPath(getDataDirectory(), "misc", "profiles", "ref", packageName, - "primary.prof.snapshot")); + public static File getDataRefProfilesDePackageDirectory(String packageName) { + return buildPath(getDataDirectory(), "misc", "profiles", "ref", packageName); } /** {@hide} */ diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index 56594705082a..39279b5055b1 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -583,7 +583,7 @@ public class ZygoteInit { installd.dexopt(classPathElement, Process.SYSTEM_UID, packageName, instructionSet, dexoptNeeded, outputPath, dexFlags, compilerFilter, uuid, classLoaderContext, seInfo, false /* downgrade */, - targetSdkVersion); + targetSdkVersion, /*profileName*/ null); } catch (RemoteException | ServiceSpecificException e) { // Ignore (but log), we need this on the classpath for fallback mode. Log.w(TAG, "Failed compiling classpath element for system server: " |
