diff options
author | Dave Allison <dallison@google.com> | 2014-03-08 07:26:41 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-03-08 07:26:41 +0000 |
commit | 2d3ddc2ba9f86d795e437ea90dccb59cf1ebfd11 (patch) | |
tree | 00888f18d44e2979ed306ec884d250e83f54a465 | |
parent | 9eaaaf0fe3917f4fec85d3e45da37914654847ec (diff) | |
parent | 199670c46a9950bd2e06af43ea082427b542060a (diff) | |
download | frameworks_base-2d3ddc2ba9f86d795e437ea90dccb59cf1ebfd11.zip frameworks_base-2d3ddc2ba9f86d795e437ea90dccb59cf1ebfd11.tar.gz frameworks_base-2d3ddc2ba9f86d795e437ea90dccb59cf1ebfd11.tar.bz2 |
am 199670c4: am 324aa693: am b94904ab: am 3fc3b9fd: Merge "ART profiler usage."
* commit '199670c46a9950bd2e06af43ea082427b542060a':
ART profiler usage.
-rw-r--r-- | core/java/android/app/ActivityThread.java | 38 | ||||
-rw-r--r-- | core/jni/AndroidRuntime.cpp | 43 | ||||
-rw-r--r-- | services/core/java/com/android/server/pm/Installer.java | 13 | ||||
-rwxr-xr-x | services/core/java/com/android/server/pm/PackageManagerService.java | 10 |
4 files changed, 98 insertions, 6 deletions
diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index ce2d806..138eea2 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -752,8 +752,42 @@ public final class ActivityThread { setCoreSettings(coreSettings); - // Tell the VMRuntime about the application. - VMRuntime.registerAppInfo(appInfo.dataDir, appInfo.processName); + /* + * Two possible indications that this package could be + * sharing its runtime with other packages: + * + * 1.) the sharedUserId attribute is set in the manifest, + * indicating a request to share a VM with other + * packages with the same sharedUserId. + * + * 2.) the application element of the manifest has an + * attribute specifying a non-default process name, + * indicating the desire to run in another packages VM. + * + * If sharing is enabled we do not have a unique application + * in a process and therefore cannot rely on the package + * name inside the runtime. + */ + IPackageManager pm = getPackageManager(); + android.content.pm.PackageInfo pi = null; + try { + pi = pm.getPackageInfo(appInfo.packageName, 0, UserHandle.myUserId()); + } catch (RemoteException e) { + } + if (pi != null) { + boolean sharedUserIdSet = (pi.sharedUserId != null); + boolean processNameNotDefault = + (pi.applicationInfo != null && + !appInfo.packageName.equals(pi.applicationInfo.processName)); + boolean sharable = (sharedUserIdSet || processNameNotDefault); + + // Tell the VMRuntime about the application, unless it is shared + // inside a process. + if (!sharable) { + VMRuntime.registerAppInfo(appInfo.packageName, appInfo.dataDir, + appInfo.processName); + } + } AppBindData data = new AppBindData(); data.processName = processName; diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index ee9c18d..06e4717 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -781,6 +781,49 @@ int AndroidRuntime::startVm(JavaVM** pJavaVM, JNIEnv** pEnv) mOptions.add(opt); } + /* + * Set profiler options + */ + { + char period[sizeof("-Xprofile-period:") + PROPERTY_VALUE_MAX]; + char duration[sizeof("-Xprofile-duration:") + PROPERTY_VALUE_MAX]; + char interval[sizeof("-Xprofile-interval:") + PROPERTY_VALUE_MAX]; + char backoff[sizeof("-Xprofile-backoff:") + PROPERTY_VALUE_MAX]; + + // Number of seconds during profile runs. + strcpy(period, "-Xprofile-period:"); + property_get("dalvik.vm.profile.period_secs", period+17, "10"); + opt.optionString = period; + mOptions.add(opt); + + // Length of each profile run (seconds). + strcpy(duration, "-Xprofile-duration:"); + property_get("dalvik.vm.profile.duration_secs", duration+19, "30"); + opt.optionString = duration; + mOptions.add(opt); + + + // Polling interval during profile run (microseconds). + strcpy(interval, "-Xprofile-interval:"); + property_get("dalvik.vm.profile.interval_us", interval+19, "10000"); + opt.optionString = interval; + mOptions.add(opt); + + // Coefficient for period backoff. The the period is multiplied + // by this value after each profile run. + strcpy(backoff, "-Xprofile-backoff:"); + property_get("dalvik.vm.profile.backoff_coeff", backoff+18, "2.0"); + opt.optionString = backoff; + mOptions.add(opt); + } + + /* + * We don't have /tmp on the device, but we often have an SD card. Apps + * shouldn't use this, but some test suites might want to exercise it. + */ + opt.optionString = "-Djava.io.tmpdir=/sdcard"; + mOptions.add(opt); + initArgs.version = JNI_VERSION_1_4; initArgs.options = mOptions.editArray(); initArgs.nOptions = mOptions.size(); diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java index ad6eabd..b7e367b 100644 --- a/services/core/java/com/android/server/pm/Installer.java +++ b/services/core/java/com/android/server/pm/Installer.java @@ -218,6 +218,19 @@ public final class Installer extends SystemService { builder.append(' '); builder.append(uid); builder.append(isPublic ? " 1" : " 0"); + builder.append(" *"); // No pkgName arg present + return execute(builder.toString()); + } + + public int dexopt(String apkPath, int uid, boolean isPublic, String pkgName) { + StringBuilder builder = new StringBuilder("dexopt"); + builder.append(' '); + builder.append(apkPath); + builder.append(' '); + builder.append(uid); + builder.append(isPublic ? " 1" : " 0"); + builder.append(' '); + builder.append(pkgName); return execute(builder.toString()); } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 7f00ce7..cbcf408 100755 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -1216,7 +1216,7 @@ public class PackageManagerService extends IPackageManager.Stub { continue; } try { - if (dalvik.system.DexFile.isDexOptNeeded(lib)) { + if (dalvik.system.DexFile.isDexOptNeededInternal(lib, null, false)) { alreadyDexOpted.add(lib); mInstaller.dexopt(lib, Process.SYSTEM_UID, true); didDexOpt = true; @@ -1260,7 +1260,7 @@ public class PackageManagerService extends IPackageManager.Stub { continue; } try { - if (dalvik.system.DexFile.isDexOptNeeded(path)) { + if (dalvik.system.DexFile.isDexOptNeededInternal(path, null, false)) { mInstaller.dexopt(path, Process.SYSTEM_UID, true); didDexOpt = true; } @@ -4088,7 +4088,8 @@ public class PackageManagerService extends IPackageManager.Stub { String path = pkg.mScanPath; int ret = 0; try { - if (forceDex || dalvik.system.DexFile.isDexOptNeeded(path)) { + if (forceDex || dalvik.system.DexFile.isDexOptNeededInternal(path, pkg.packageName, + defer)) { if (!forceDex && defer) { if (mDeferredDexOpt == null) { mDeferredDexOpt = new HashSet<PackageParser.Package>(); @@ -4098,7 +4099,8 @@ public class PackageManagerService extends IPackageManager.Stub { } else { Log.i(TAG, "Running dexopt on: " + pkg.applicationInfo.packageName); final int sharedGid = UserHandle.getSharedAppGid(pkg.applicationInfo.uid); - ret = mInstaller.dexopt(path, sharedGid, !isForwardLocked(pkg)); + ret = mInstaller.dexopt(path, sharedGid, !isForwardLocked(pkg), + pkg.packageName); pkg.mDidDexOpt = true; performed = true; } |