summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormikaelpeltier <mikaelpeltier@google.com>2015-01-27 13:28:08 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-01-27 13:28:08 +0000
commit4d7a9d313dfa7251c9ca5cd3cf6d47cc0723fb53 (patch)
treeb01555c8bcd6b9f1e5fc6cd5ca3b81f8beeaa1dc
parent3a234ceb43fe28206490354441170e64d8e8b7bd (diff)
parent85db4597460de8fa0f7766f52ccfde7333eb3075 (diff)
downloadtoolchain_jack-4d7a9d313dfa7251c9ca5cd3cf6d47cc0723fb53.zip
toolchain_jack-4d7a9d313dfa7251c9ca5cd3cf6d47cc0723fb53.tar.gz
toolchain_jack-4d7a9d313dfa7251c9ca5cd3cf6d47cc0723fb53.tar.bz2
Merge "Add incremental logs into library representing incremental state" into ub-jack
-rw-r--r--jack/src/com/android/jack/analysis/dependency/library/LibraryDependencies.java10
-rw-r--r--jack/src/com/android/jack/incremental/IncrementalInputFilter.java39
-rw-r--r--jack/src/com/android/jack/incremental/IncrementalLogWriter.java104
-rw-r--r--jack/src/com/android/jack/library/FileType.java5
4 files changed, 156 insertions, 2 deletions
diff --git a/jack/src/com/android/jack/analysis/dependency/library/LibraryDependencies.java b/jack/src/com/android/jack/analysis/dependency/library/LibraryDependencies.java
index 6e799d9..a5ebbe2 100644
--- a/jack/src/com/android/jack/analysis/dependency/library/LibraryDependencies.java
+++ b/jack/src/com/android/jack/analysis/dependency/library/LibraryDependencies.java
@@ -83,6 +83,16 @@ public class LibraryDependencies extends Dependency {
return compare(importedLibrariesDexDigest, libraryDependencies.importedLibrariesDexDigest);
}
+ @Nonnull
+ public List<String> getDigestOfImportedLibraries() {
+ return importedLibrariesDexDigest;
+ }
+
+ @Nonnull
+ public List<String> getDigestOfLibrariesOnClasspath() {
+ return librariesOnClasspathDexDigest;
+ }
+
private static boolean compare(@Nonnull List<String> digests1, @Nonnull List<String> digests2) {
if (digests1.size() != digests2.size()) {
return false;
diff --git a/jack/src/com/android/jack/incremental/IncrementalInputFilter.java b/jack/src/com/android/jack/incremental/IncrementalInputFilter.java
index 82fa279..c21e9f9 100644
--- a/jack/src/com/android/jack/incremental/IncrementalInputFilter.java
+++ b/jack/src/com/android/jack/incremental/IncrementalInputFilter.java
@@ -33,14 +33,18 @@ import com.android.jack.library.InputJackLibrary;
import com.android.jack.library.InputLibrary;
import com.android.jack.library.JackLibraryFactory;
import com.android.jack.library.LibraryFormatException;
+import com.android.jack.library.LibraryIOException;
import com.android.jack.library.LibraryReadingException;
import com.android.jack.library.LibraryVersionException;
+import com.android.jack.library.LibraryWritingException;
import com.android.jack.library.NotJackLibraryException;
import com.android.jack.library.OutputJackLibrary;
import com.android.jack.reporting.Reporter.Severity;
import com.android.sched.util.RunnableHooks;
import com.android.sched.util.codec.ImplementationName;
+import com.android.sched.util.config.HasKeyId;
import com.android.sched.util.config.ThreadConfig;
+import com.android.sched.util.config.id.BooleanPropertyId;
import com.android.sched.util.file.CannotDeleteFileException;
import com.android.sched.util.file.CannotReadException;
import com.android.sched.util.log.Tracer;
@@ -69,9 +73,15 @@ import javax.annotation.Nonnull;
* {@link InputFilter} that returns filtered inputs required by incremental support.
*/
@ImplementationName(iface = InputFilter.class, name = "incremental")
+@HasKeyId
public class IncrementalInputFilter extends CommonFilter implements InputFilter {
@Nonnull
+ public static final BooleanPropertyId INCREMENTAL_LOG = BooleanPropertyId
+ .create("jack.incremental.log", "Enable incremental log")
+ .addDefaultValue(Boolean.FALSE);
+
+ @Nonnull
public static final StatisticId<Counter> COMPILED_FILES = new StatisticId<Counter>(
"jack.incremental.source.compiled", "Source files that will be compile", CounterImpl.class,
Counter.class);
@@ -177,6 +187,35 @@ public class IncrementalInputFilter extends CommonFilter implements InputFilter
session.getLibraryDependencies().addImportedLibraries(importedLibrariesFromCommandLine);
session.getLibraryDependencies().addLibrariesOnClasspath(librariesOnClasspathFromCommandLine);
filesToRecompile = getInternalFileNamesToCompile();
+
+ if (ThreadConfig.get(INCREMENTAL_LOG).booleanValue()) {
+ IncrementalLogWriter incLog;
+ try {
+ File incrementalFolder = options.getIncrementalFolder();
+ assert incrementalFolder != null;
+ incLog = new IncrementalLogWriter(getOutputJackLibrary(), incrementalFolder);
+ incLog.writeString("type: " + (incrementalInputLibrary == null ? "full" : "incremental"));
+ incLog.writeFiles("classpath", options.getClasspath());
+ incLog.writeStrings("classpath digests (" + (libraryDependencies.hasSameLibraryOnClasspath(
+ session.getLibraryDependencies()) ? "identical"
+ : "modified") + ")",
+ session.getLibraryDependencies().getDigestOfLibrariesOnClasspath());
+ incLog.writeFiles("import", options.getImportedLibraries());
+ incLog.writeStrings("import digests (" + (libraryDependencies.hasSameImportedLibrary(
+ session.getLibraryDependencies()) ? "identical"
+ : "modified") + ")",
+ session.getLibraryDependencies().getDigestOfImportedLibraries());
+ incLog.writeStrings("added (" + addedFileNames.size() + ")", addedFileNames);
+ incLog.writeStrings("deleted (" + deletedFileNames.size() + ")", deletedFileNames);
+ incLog.writeStrings("modified (" + modifiedFileNames.size() + ")", modifiedFileNames);
+ incLog.writeStrings("compiled (" + filesToRecompile.size() + ")", filesToRecompile);
+ incLog.close();
+ } catch (LibraryIOException e) {
+ LibraryWritingException reportable = new LibraryWritingException(e);
+ Jack.getSession().getReporter().report(Severity.FATAL, reportable);
+ throw new JackAbortException(reportable);
+ }
+ }
}
@Override
diff --git a/jack/src/com/android/jack/incremental/IncrementalLogWriter.java b/jack/src/com/android/jack/incremental/IncrementalLogWriter.java
new file mode 100644
index 0000000..696b348
--- /dev/null
+++ b/jack/src/com/android/jack/incremental/IncrementalLogWriter.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.jack.incremental;
+
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.collect.Collections2;
+
+import com.android.jack.library.FileType;
+import com.android.jack.library.FileTypeDoesNotExistException;
+import com.android.jack.library.LibraryIOException;
+import com.android.jack.library.OutputJackLibrary;
+import com.android.sched.util.file.CannotCreateFileException;
+import com.android.sched.util.file.NotFileOrDirectoryException;
+import com.android.sched.vfs.VPath;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+import java.util.Collection;
+
+import javax.annotation.Nonnull;
+
+/**
+ * Write logs of incremental runs into a section logs of the library representing the incremental
+ * state.
+ */
+class IncrementalLogWriter {
+
+ @Nonnull
+ static final VPath vpath = new VPath("logs", '/');
+
+ @Nonnull
+ private final PrintStream ps;
+
+ @Nonnull
+ private final OutputJackLibrary library;
+
+ IncrementalLogWriter(@Nonnull OutputJackLibrary library, @Nonnull File incrementalFolder)
+ throws LibraryIOException {
+ this.library = library;
+ try {
+ library.getFile(FileType.LOG, vpath);
+ } catch (FileTypeDoesNotExistException e) {
+ try {
+ library.createFile(FileType.LOG, vpath);
+ } catch (CannotCreateFileException e1) {
+ throw new LibraryIOException(library.getLocation(), e1);
+ } catch (NotFileOrDirectoryException e1) {
+ throw new LibraryIOException(library.getLocation(), e1);
+ }
+ }
+
+ File logFile = new File(incrementalFolder,
+ FileType.LOG.buildFileVPath(vpath).getPathAsString(File.separatorChar));
+ try {
+ ps = new PrintStream(new FileOutputStream(logFile, true));
+ writeString("***");
+ } catch (FileNotFoundException e) {
+ // File already creates by using VFS
+ throw new AssertionError();
+ }
+ }
+
+ void writeFiles(@Nonnull String prefixStr, @Nonnull Collection<File> files) {
+ writeStrings(prefixStr, Collections2.transform(files, new Function<File, String>() {
+ @Override
+ public String apply(File file) {
+ return file.getPath();
+ }
+ }));
+ }
+
+ void writeStrings(@Nonnull String prefixStr, @Nonnull Collection<String> strings) {
+ ps.print(prefixStr);
+ ps.print(": ");
+ ps.print(Joiner.on(",").join(strings));
+ ps.println();
+ }
+
+ void close() {
+ ps.close();
+ }
+
+ void writeString(@Nonnull String str) {
+ ps.print(str);
+ ps.println();
+ }
+}
diff --git a/jack/src/com/android/jack/library/FileType.java b/jack/src/com/android/jack/library/FileType.java
index 0bd0578..5c75a3f 100644
--- a/jack/src/com/android/jack/library/FileType.java
+++ b/jack/src/com/android/jack/library/FileType.java
@@ -49,9 +49,10 @@ public enum FileType {
},
DEPENDENCIES("dependencies", "dependencies", ".dep", "dependencies") {
@Override
- public String toString() {
- return "dependencies";
+ public void check() {
}
+ },
+ LOG("logs", "logs", ".log", "logs") {
@Override
public void check() {
}