From ecba1495767154f8ad74eac2ce565db1218992e5 Mon Sep 17 00:00:00 2001 From: shahan Date: Fri, 29 Jun 2018 07:31:06 -0700 Subject: Eliminates unnecessary comparisons in ActionInputMap.resize. PiperOrigin-RevId: 202644128 --- .../devtools/build/lib/actions/ActionInputMap.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'src/main/java/com') 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); } /** -- cgit v1.2.3