diff options
author | 2015-08-24 18:51:28 +0000 | |
---|---|---|
committer | 2015-08-25 07:47:34 +0000 | |
commit | 6925c437c2a29d57d3a1479ffbadbeef82e23c95 (patch) | |
tree | 5988c3e8327578081d421041bec4998f6e7e76d1 /src | |
parent | 11bbdcb2bdee40c6cfca81b61aea63aee08ea804 (diff) |
Memoize SkyFunctionNames
In practice there are generally very few of these, keep a chache
to avoid dups.
--
MOS_MIGRATED_REVID=101386883
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/com/google/devtools/build/skyframe/SkyFunctionName.java | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/skyframe/SkyFunctionName.java b/src/main/java/com/google/devtools/build/skyframe/SkyFunctionName.java index 4d4fba105f..9dcb379d72 100644 --- a/src/main/java/com/google/devtools/build/skyframe/SkyFunctionName.java +++ b/src/main/java/com/google/devtools/build/skyframe/SkyFunctionName.java @@ -14,16 +14,37 @@ package com.google.devtools.build.skyframe; import com.google.common.base.Predicate; +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; import java.io.Serializable; import java.util.Set; +import java.util.concurrent.ExecutionException; /** An identifier for a {@code SkyFunction}. */ public final class SkyFunctionName implements Serializable { + // In practice the number of unique SkyFunctionNames should be reasonably limited, use this cache + // to avoid accidentally creating many of the same. + private static final LoadingCache<String, SkyFunctionName> skyFunctionNameCache = + CacheBuilder.newBuilder() + .weakValues() + .build( + new CacheLoader<String, SkyFunctionName>() { + @Override + public SkyFunctionName load(String name) { + return new SkyFunctionName(name); + } + }); + /** Create a SkyFunctionName identified by {@code name}. */ public static SkyFunctionName create(String name) { - return new SkyFunctionName(name); + try { + return skyFunctionNameCache.get(name); + } catch (ExecutionException e) { + throw new IllegalStateException("Unexpected exception creating SkyFunctionName", e); + } } private final String name; |