Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(449)

Unified Diff: third_party/WebKit/Source/devtools/scripts/closure/closure_runner/src/org/chromium/devtools/compiler/Runner.java

Issue 2588843002: DevTools: speed up closure dependency checking (Closed)
Patch Set: update compile_frontend Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/scripts/closure/closure_runner/src/org/chromium/devtools/compiler/Runner.java
diff --git a/third_party/WebKit/Source/devtools/scripts/closure/closure_runner/src/org/chromium/devtools/compiler/Runner.java b/third_party/WebKit/Source/devtools/scripts/closure/closure_runner/src/org/chromium/devtools/compiler/Runner.java
deleted file mode 100644
index 06c0d74b1a7113bdd627017f7f60f2db2820d2e0..0000000000000000000000000000000000000000
--- a/third_party/WebKit/Source/devtools/scripts/closure/closure_runner/src/org/chromium/devtools/compiler/Runner.java
+++ /dev/null
@@ -1,243 +0,0 @@
-package org.chromium.devtools.compiler;
-
-import com.google.common.collect.Lists;
-import com.google.common.io.Resources;
-import com.google.javascript.jscomp.*;
-
-import org.kohsuke.args4j.CmdLineException;
-import org.kohsuke.args4j.CmdLineParser;
-import org.kohsuke.args4j.Option;
-
-import javax.xml.transform.Source;
-import java.io.*;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Prepares and executes several instances of the closure compiler.
- */
-public class Runner {
- protected final Flags flags = new Flags();
- private final PrintStream err;
- private boolean isConfigValid;
-
- public Runner(String[] args, PrintStream err) {
- this.err = err;
- List<String> argList = processArgs(args);
- CmdLineParser parser = new CmdLineParser(flags);
- isConfigValid = true;
- try {
- parser.parseArgument(argList.toArray(new String[] {}));
- if (flags.compilerArgsFile == null) {
- isConfigValid = false;
- }
- } catch (CmdLineException e) {
- err.println(e.getMessage());
- isConfigValid = false;
- }
-
- if (!isConfigValid) {
- parser.printUsage(err);
- }
- }
-
- private List<String> processArgs(String[] args) {
- Pattern argPattern = Pattern.compile("(--[a-zA-Z_]+)=(.*)");
- Pattern quotesPattern = Pattern.compile("^['\"](.*)['\"]$");
- List<String> processedArgs = Lists.newArrayList();
-
- for (String arg : args) {
- Matcher matcher = argPattern.matcher(arg);
- if (matcher.matches()) {
- processedArgs.add(matcher.group(1));
-
- String value = matcher.group(2);
- Matcher quotesMatcher = quotesPattern.matcher(value);
- if (quotesMatcher.matches()) {
- processedArgs.add(quotesMatcher.group(1));
- } else {
- processedArgs.add(value);
- }
- } else {
- processedArgs.add(arg);
- }
- }
-
- return processedArgs;
- }
-
- private boolean shouldRunCompiler() {
- return isConfigValid;
- }
-
- protected void logError(String message, Exception e) {
- err.println("ERROR: " + message);
- if (e != null) {
- e.printStackTrace(err);
- }
- }
-
- private void run() {
- List<CompilerInstanceDescriptor> descriptors = getDescriptors();
- if (descriptors == null) {
- return;
- }
- ExecutorService executor = Executors.newFixedThreadPool(
- Math.min(descriptors.size(), Runtime.getRuntime().availableProcessors() / 2 + 1));
- try {
- runWithExecutor(descriptors, executor);
- } finally {
- executor.shutdown();
- }
- }
-
- private void runWithExecutor(
- List<CompilerInstanceDescriptor> descriptors, ExecutorService executor) {
- List<Future<CompilerRunner>> futures = new ArrayList<>(descriptors.size());
- for (CompilerInstanceDescriptor descriptor : descriptors) {
- try {
- ByteArrayOutputStream rawStream = new ByteArrayOutputStream(512);
- PrintStream errPrintStream = new PrintStream(rawStream, false, "UTF-8");
- // We have to create instance of LocalCommandLineRunner object here,
- // because its constructor should be executed on a single thread.
- // Constructor is parsing flags and creating options object that can
- // be used later in parallel during compilation.
- LocalCommandLineRunner runner = new LocalCommandLineRunner(
- descriptor.commandLine.split(" +"), System.out, errPrintStream);
-
- CompilerRunner task = new CompilerRunner(descriptor, rawStream, runner);
- futures.add(executor.submit(task));
- } catch (Exception e) {
- System.err.println("ERROR - " + e.getMessage());
- e.printStackTrace(System.err);
- }
- }
-
- for (Future<CompilerRunner> future : futures) {
- try {
- CompilerRunner task = future.get();
- int result = task.result;
- if (result != 0) {
- System.err.println("ERROR: Compiler returned " + result);
- }
- task.errStream.flush();
- System.err.println("@@ START_MODULE:" + task.descriptor.moduleName + " @@");
- System.err.println(task.errStream.toString("UTF-8"));
- System.err.println("@@ END_MODULE @@");
- } catch (Exception e) {
- System.err.println("ERROR - " + e.getMessage());
- e.printStackTrace(System.err);
- }
- }
- System.exit(0);
- }
-
- private List<CompilerInstanceDescriptor> getDescriptors() {
- List<CompilerInstanceDescriptor> result = new ArrayList<>();
- try (BufferedReader reader = new BufferedReader(
- new InputStreamReader(new FileInputStream(flags.compilerArgsFile), "UTF-8"))) {
- int lineIndex = 0;
- while (true) {
- ++lineIndex;
- String line = reader.readLine();
- if (line == null) {
- break;
- }
- if (line.length() == 0) {
- continue;
- }
- String[] moduleAndArgs = line.split(" +", 2);
- if (moduleAndArgs.length != 2) {
- logError(String.format(
- "Line %d does not contain module name and compiler arguments",
- lineIndex),
- null);
- continue;
- }
- result.add(new CompilerInstanceDescriptor(moduleAndArgs[0], moduleAndArgs[1]));
- }
- } catch (IOException e) {
- logError("Failed to read compiler arguments file", e);
- return null;
- }
-
- return result;
- }
-
- public static void main(String[] args) {
- Runner runner = new Runner(args, System.err);
- if (runner.shouldRunCompiler()) {
- runner.run();
- } else {
- System.exit(-1);
- }
- }
-
- private static class LocalCommandLineRunner extends CommandLineRunner {
- protected LocalCommandLineRunner(String[] args, PrintStream out, PrintStream err) {
- super(args, out, err);
- }
-
- @Override
- protected void setRunOptions(CompilerOptions options)
- throws FlagUsageException, IOException {
- super.setRunOptions(options);
- options.setCodingConvention(new DevToolsCodingConvention());
- }
-
- int execute() {
- try {
- return doRun();
- } catch (Throwable t) {
- t.printStackTrace();
- return -2;
- }
- }
- }
-
- private static class CompilerRunner implements Callable<CompilerRunner> {
- private final CompilerInstanceDescriptor descriptor;
- private final ByteArrayOutputStream errStream;
- private int result;
- private final LocalCommandLineRunner runner;
-
- public CompilerRunner(CompilerInstanceDescriptor descriptor,
- ByteArrayOutputStream errStream, LocalCommandLineRunner runner) {
- this.descriptor = descriptor;
- this.errStream = errStream;
- this.runner = runner;
- }
-
- @Override
- public CompilerRunner call() throws Exception {
- if (!this.runner.shouldRunCompiler()) {
- this.result = -1;
- }
- this.result = this.runner.execute();
- return this;
- }
- }
-
- private static class Flags {
- @Option(name = "--compiler-args-file",
- usage = "Full path to file containing compiler arguments (one line per instance)")
- private String compilerArgsFile = null;
- }
-
- private static class CompilerInstanceDescriptor {
- private final String moduleName;
- private final String commandLine;
-
- public CompilerInstanceDescriptor(String moduleName, String commandLine) {
- this.moduleName = moduleName;
- this.commandLine = commandLine;
- }
- }
-}

Powered by Google App Engine
This is Rietveld 408576698