Revert "Only parse mapping file once for all resources"
This reverts commit 96fa290ff7b22a54437d8d2494b2e1333ca34145.
Reason for revert: Time increased on the bots.
Change-Id: I2ad584ab0e2d685b675d7e8480dd684754501c02
diff --git a/src/main/java/com/android/tools/r8/Disassemble.java b/src/main/java/com/android/tools/r8/Disassemble.java
index 1e1fffb..8c66ba5 100644
--- a/src/main/java/com/android/tools/r8/Disassemble.java
+++ b/src/main/java/com/android/tools/r8/Disassemble.java
@@ -12,7 +12,6 @@
import com.android.tools.r8.naming.ClassNameMapper;
import com.android.tools.r8.origin.CommandLineOrigin;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.Box;
import com.android.tools.r8.utils.ConsumerUtils;
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.StringDiagnostic;
@@ -29,7 +28,6 @@
import java.util.Collections;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Future;
import java.util.function.Consumer;
public class Disassemble {
@@ -247,11 +245,9 @@
throws IOException, ExecutionException {
AndroidApp app = command.getInputApp();
InternalOptions options = command.getInternalOptions();
- Box<Future<ClassNameMapper>> readMapFuture = new Box<>();
try (OutputWriter outputWriter = getOutputWriter(command)) {
for (ProgramResource computeAllProgramResource : app.computeAllProgramResources()) {
- disassembleResource(
- command, outputWriter, computeAllProgramResource, readMapFuture, options);
+ disassembleResource(command, outputWriter, computeAllProgramResource, options);
}
} catch (Exception e) {
throw new RuntimeException(e);
@@ -274,7 +270,6 @@
DisassembleCommand command,
OutputWriter outputWriter,
ProgramResource programResource,
- Box<Future<ClassNameMapper>> readMapFuture,
InternalOptions options)
throws IOException {
ExecutorService executor = ThreadUtils.getExecutorService(options);
@@ -285,8 +280,7 @@
.addProgramResourceProvider(() -> Collections.singletonList(programResource))
.build(),
options,
- Timing.empty(),
- readMapFuture)
+ Timing.empty())
.read(command.proguardMap, executor);
DexByteCodeWriter writer =
command.useSmali()
diff --git a/src/main/java/com/android/tools/r8/dex/ApplicationReader.java b/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
index f2d4053..10acb93 100644
--- a/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
+++ b/src/main/java/com/android/tools/r8/dex/ApplicationReader.java
@@ -7,7 +7,6 @@
import static com.android.tools.r8.graph.ClassKind.LIBRARY;
import static com.android.tools.r8.graph.ClassKind.PROGRAM;
import static com.android.tools.r8.utils.ExceptionUtils.unwrapExecutionException;
-import static com.android.tools.r8.utils.ExceptionUtils.unwrapInterruptedException;
import com.android.tools.r8.ClassFileResourceProvider;
import com.android.tools.r8.DataResourceProvider;
@@ -39,7 +38,6 @@
import com.android.tools.r8.shaking.MainDexInfo;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.Box;
import com.android.tools.r8.utils.ClassProvider;
import com.android.tools.r8.utils.ClasspathClassCollection;
import com.android.tools.r8.utils.DescriptorUtils;
@@ -57,7 +55,6 @@
import java.util.Collection;
import java.util.List;
import java.util.Queue;
-import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
@@ -71,7 +68,6 @@
private final DexItemFactory itemFactory;
private final Timing timing;
private final AndroidApp inputApp;
- private final Box<Future<ClassNameMapper>> readMap;
private DexApplicationReadFlags flags;
@@ -80,19 +76,10 @@
}
public ApplicationReader(AndroidApp inputApp, InternalOptions options, Timing timing) {
- this(inputApp, options, timing, new Box<>());
- }
-
- public ApplicationReader(
- AndroidApp inputApp,
- InternalOptions options,
- Timing timing,
- Box<Future<ClassNameMapper>> readMap) {
this.options = options;
itemFactory = options.itemFactory;
this.timing = timing;
this.inputApp = inputApp;
- this.readMap = readMap;
}
public LazyLoadedDexApplication read() throws IOException {
@@ -149,14 +136,10 @@
// (b) some of the class file resources don't provide information
// about class descriptor.
// TODO: try and preload less classes.
- readProguardMap(proguardMap, executorService);
+ readProguardMap(proguardMap, builder, executorService, futures);
ClassReader classReader = new ClassReader(executorService, futures);
classReader.readSources();
ThreadUtils.awaitFutures(futures);
- ClassNameMapper mapper = readMap.get().get();
- if (mapper != null) {
- builder.setProguardMap(mapper);
- }
flags = classReader.getDexApplicationReadFlags();
builder.setFlags(flags);
classReader.initializeLazyClassCollection(builder);
@@ -166,8 +149,6 @@
builder.addDataResourceProvider(dataResourceProvider);
}
}
- } catch (InterruptedException e) {
- throw unwrapInterruptedException(e);
} catch (ExecutionException e) {
throw unwrapExecutionException(e);
} catch (ResourceException e) {
@@ -284,34 +265,31 @@
+ "'.");
}
- private void readProguardMap(StringResource map, ExecutorService executorService) {
+ private void readProguardMap(
+ StringResource map,
+ DexApplication.Builder<?> builder,
+ ExecutorService executorService,
+ List<Future<?>> futures) {
// Read the Proguard mapping file in parallel with DexCode and DexProgramClass items.
- if (!readMap.isSet()) {
- synchronized (readMap) {
- if (readMap.isSet()) {
- return;
- }
- if (map == null) {
- readMap.set(CompletableFuture.completedFuture(null));
- return;
- }
- readMap.set(
- executorService.submit(
- () -> {
- try {
- return ClassNameMapper.mapperFromString(
- map.getString(),
+ if (map == null) {
+ return;
+ }
+ futures.add(
+ executorService.submit(
+ () -> {
+ try {
+ String content = map.getString();
+ builder.setProguardMap(
+ ClassNameMapper.mapperFromString(
+ content,
options.reporter,
false,
options.testing.enableExperimentalMapFileVersion,
- false);
- } catch (IOException | ResourceException e) {
- throw new CompilationError(
- "Failure to read proguard map file", e, map.getOrigin());
- }
- }));
- }
- }
+ false));
+ } catch (IOException | ResourceException e) {
+ throw new CompilationError("Failure to read proguard map file", e, map.getOrigin());
+ }
+ }));
}
private final class ClassReader {
diff --git a/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java b/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java
index 8cb08c0..ef5c3ca 100644
--- a/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/ExceptionUtils.java
@@ -221,11 +221,6 @@
return new RuntimeException(executionException);
}
- public static RuntimeException unwrapInterruptedException(
- InterruptedException interruptedException) {
- return new RuntimeException(interruptedException);
- }
-
public static void withOriginAttachmentHandler(Origin origin, Runnable action) {
withOriginAndPositionAttachmentHandler(origin, Position.UNKNOWN, action);
}