aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com
diff options
context:
space:
mode:
authorGravatar shahan <shahan@google.com>2018-06-29 07:31:06 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-06-29 07:32:37 -0700
commitecba1495767154f8ad74eac2ce565db1218992e5 (patch)
tree84bb6c3ea7a25678be372b8e72985d53d3b53697 /src/main/java/com
parentc49c9e872ddb8d6fdf88ae6eb16f36eb27b9ede6 (diff)
Eliminates unnecessary comparisons in ActionInputMap.resize.
PiperOrigin-RevId: 202644128
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/google/devtools/build/lib/actions/ActionInputMap.java19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/actions/ActionInputMap.java b/src/main/java/com/google/devtools/build/lib/actions/ActionInputMap.java
index 09014fe25a..f8fec0d7c0 100644
--- a/src/main/java/com/google/devtools/build/lib/actions/ActionInputMap.java
+++ b/src/main/java/com/google/devtools/build/lib/actions/ActionInputMap.java
@@ -110,19 +110,26 @@ public final class ActionInputMap implements MetadataProvider {
private void resize() {
Object[] oldData = data;
- int oldSize = size;
data = new Object[data.length * 2];
- size = 0;
++numBits;
mask = (1 << numBits) - 1;
for (int i = 0; i < oldData.length; i += 2) {
ActionInput key = (ActionInput) oldData[i];
- if (key != null) {
- FileArtifactValue value = (FileArtifactValue) oldData[i + 1];
- putImpl(key, value);
+ if (key == null) {
+ continue;
+ }
+ int hashCode = key.getExecPathString().hashCode();
+ int probe = getProbe(hashCode);
+ while (true) {
+ // Only checks for empty slots because all map keys are known to be unique.
+ if (data[probe] == null) {
+ data[probe] = key;
+ data[probe + 1] = oldData[i + 1];
+ break;
+ }
+ probe = incProbe(probe);
}
}
- Preconditions.checkState(size == oldSize, "size = %s, oldSize = %s", size, oldSize);
}
/**