From 22217f6a514079c504f9d77e23645ed04700fc09 Mon Sep 17 00:00:00 2001 From: David Brazdil Date: Tue, 18 Dec 2018 13:43:55 +0000 Subject: [PATCH] Revert "[framework] Compile secondary dex files in isolation" This reverts commit 8a5a708df18c2377c7ec3cb03d406bdc9cb99bd6. ART does not compile secondary dex files in the user process any more. The original issue of a large overhead of providing a class loader context is therefore not relevant any more and we can start passing the context to installd. Note that this also partially reverts commit 6dba50d63375b6738c6e1ad8a8758f181d295d8b which restricted visibility of methods in PackageDexUsage. The commit also removed data collection for unsupported class loaders. The logic in PackageDexOptimizer was adjusted accordingly. Bug: 64530081 Bug: 111174995 Test: manual Change-Id: Id78b5a6d8841b199c12a63a8d45d12efbcc32275 --- .../android/server/pm/PackageDexOptimizer.java | 17 +++++++++++------ .../android/server/pm/dex/PackageDexUsage.java | 6 ++---- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index cc640f03edba9..5e1ed03409730 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -404,12 +404,17 @@ public class PackageDexOptimizer { + " dexoptFlags=" + printDexoptFlags(dexoptFlags) + " target-filter=" + compilerFilter); - // TODO(calin): b/64530081 b/66984396. Use SKIP_SHARED_LIBRARY_CHECK for the context - // (instead of dexUseInfo.getClassLoaderContext()) in order to compile secondary dex files - // in isolation (and avoid to extract/verify the main apk if it's in the class path). - // Note this trades correctness for performance since the resulting slow down is - // unacceptable in some cases until b/64530081 is fixed. - String classLoaderContext = SKIP_SHARED_LIBRARY_CHECK; + String classLoaderContext; + if (dexUseInfo.isUnknownClassLoaderContext() || dexUseInfo.isVariableClassLoaderContext()) { + // If we have an unknown (not yet set), or a variable class loader chain, compile + // without a context and mark the oat file with SKIP_SHARED_LIBRARY_CHECK. Note that + // this might lead to a incorrect compilation. + // TODO(calin): We should just extract in this case. + classLoaderContext = SKIP_SHARED_LIBRARY_CHECK; + } else { + classLoaderContext = dexUseInfo.getClassLoaderContext(); + } + int reason = options.getCompilationReason(); try { for (String isa : dexUseInfo.getLoaderIsas()) { diff --git a/services/core/java/com/android/server/pm/dex/PackageDexUsage.java b/services/core/java/com/android/server/pm/dex/PackageDexUsage.java index 519a20d51ddbf..a194f57ea700b 100644 --- a/services/core/java/com/android/server/pm/dex/PackageDexUsage.java +++ b/services/core/java/com/android/server/pm/dex/PackageDexUsage.java @@ -863,15 +863,13 @@ public class PackageDexUsage extends AbstractStatsBase { public String getClassLoaderContext() { return mClassLoaderContext; } - @VisibleForTesting - /* package */ boolean isUnknownClassLoaderContext() { + public boolean isUnknownClassLoaderContext() { // The class loader context may be unknown if we loaded the data from a previous version // which didn't save the context. return UNKNOWN_CLASS_LOADER_CONTEXT.equals(mClassLoaderContext); } - @VisibleForTesting - /* package */ boolean isVariableClassLoaderContext() { + public boolean isVariableClassLoaderContext() { return VARIABLE_CLASS_LOADER_CONTEXT.equals(mClassLoaderContext); } }