Use another cache to store preprocessing results instead of redoing the work.
This should have no effect.
--
MOS_MIGRATED_REVID=102342697
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
index 2c7b068..9e3b8d5 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/PackageFunction.java
@@ -84,6 +84,7 @@
private final PackageFactory packageFactory;
private final CachingPackageLocator packageLocator;
private final Cache<PackageIdentifier, Package.LegacyBuilder> packageFunctionCache;
+ private final Cache<PackageIdentifier, Preprocessor.Result> preprocessCache;
private final AtomicBoolean showLoadingProgress;
private final AtomicInteger numPackagesLoaded;
private final Profiler profiler = Profiler.instance();
@@ -96,6 +97,7 @@
public PackageFunction(Reporter reporter, PackageFactory packageFactory,
CachingPackageLocator pkgLocator, AtomicBoolean showLoadingProgress,
Cache<PackageIdentifier, Package.LegacyBuilder> packageFunctionCache,
+ Cache<PackageIdentifier, Preprocessor.Result> preprocessCache,
AtomicInteger numPackagesLoaded) {
this.reporter = reporter;
@@ -107,6 +109,7 @@
this.packageLocator = pkgLocator;
this.showLoadingProgress = showLoadingProgress;
this.packageFunctionCache = packageFunctionCache;
+ this.preprocessCache = preprocessCache;
this.numPackagesLoaded = numPackagesLoaded;
}
@@ -795,10 +798,14 @@
Globber globber = packageFactory.createLegacyGlobber(buildFilePath.getParentDirectory(),
packageId, packageLocator);
StoredEventHandler localReporter = new StoredEventHandler();
- Preprocessor.Result preprocessingResult = replacementSource == null
- ? packageFactory.preprocess(packageId, buildFilePath, inputSource, globber,
- localReporter)
- : Preprocessor.Result.noPreprocessing(replacementSource);
+ Preprocessor.Result preprocessingResult = preprocessCache.getIfPresent(packageId);
+ if (preprocessingResult == null) {
+ preprocessingResult = replacementSource == null
+ ? packageFactory.preprocess(packageId, buildFilePath, inputSource, globber,
+ localReporter)
+ : Preprocessor.Result.noPreprocessing(replacementSource);
+ preprocessCache.put(packageId, preprocessingResult);
+ }
SkylarkImportResult importResult =
discoverSkylarkImports(
@@ -811,6 +818,7 @@
if (importResult == null) {
return null;
}
+ preprocessCache.invalidate(packageId);
pkgBuilder = packageFactory.createPackageFromPreprocessingResult(externalPkg, packageId,
buildFilePath, preprocessingResult, localReporter.getEvents(), preludeStatements,