aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools
diff options
context:
space:
mode:
authorGravatar shreyax <shreyax@google.com>2017-11-29 11:31:49 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2017-11-29 11:33:22 -0800
commit5d6343601c3fbe301bcb76b50dbdbf9223bce69d (patch)
tree04dedfedc547fd87380d27e35ac3a2af0cb95eb9 /src/main/java/com/google/devtools
parent00bece2ac9d458f1afba8f9932a65eceb8df55d8 (diff)
Add a static method GroupedList#numElements to allow to count the number of deps from a compressed GroupedList without uncompressing it. Also some minor GC improvements.
PiperOrigin-RevId: 177338852
Diffstat (limited to 'src/main/java/com/google/devtools')
-rw-r--r--src/main/java/com/google/devtools/build/lib/util/GroupedList.java28
-rw-r--r--src/main/java/com/google/devtools/build/skyframe/DirtyBuildingState.java8
-rw-r--r--src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java5
3 files changed, 37 insertions, 4 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/util/GroupedList.java b/src/main/java/com/google/devtools/build/lib/util/GroupedList.java
index c1985cd57c..475e38518b 100644
--- a/src/main/java/com/google/devtools/build/lib/util/GroupedList.java
+++ b/src/main/java/com/google/devtools/build/lib/util/GroupedList.java
@@ -18,6 +18,7 @@ import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
import com.google.devtools.build.lib.collect.compacthashset.CompactHashSet;
import java.util.ArrayList;
import java.util.Collection;
@@ -57,6 +58,11 @@ public class GroupedList<T> implements Iterable<Collection<T>> {
this.elements = new ArrayList<>(elements);
}
+ private GroupedList(int size, Object[] elements) {
+ this.size = size;
+ this.elements = Lists.newArrayList(elements);
+ }
+
/**
* Appends the list constructed in {@code helper} to this list. Returns the elements of {@code
* helper}, uniquified.
@@ -210,18 +216,32 @@ public class GroupedList<T> implements Iterable<Collection<T>> {
return new GroupedList<>();
}
if (compressed.getClass().isArray()) {
- List<Object> elements = new ArrayList<>();
int size = 0;
- for (Object item : (Object[]) compressed) {
+ Object[] compressedArray = ((Object[]) compressed);
+ for (Object item : compressedArray) {
size += sizeOf(item);
- elements.add(item);
}
- return new GroupedList<>(size, elements);
+ return new GroupedList<>(size, compressedArray);
}
// Just a single element.
return new GroupedList<>(1, ImmutableList.of(compressed));
}
+ public static int numElements(Object compressed) {
+ if (compressed == EMPTY_LIST) {
+ return 0;
+ }
+ if (compressed.getClass().isArray()) {
+ int size = 0;
+ for (Object item : (Object[]) compressed) {
+ size += sizeOf(item);
+ }
+ return size;
+ }
+ // Just a single element.
+ return 1;
+ }
+
@Override
public int hashCode() {
// Hashing requires getting an order-independent hash for each element of this.elements. That
diff --git a/src/main/java/com/google/devtools/build/skyframe/DirtyBuildingState.java b/src/main/java/com/google/devtools/build/skyframe/DirtyBuildingState.java
index 53e43f0513..d802c3d673 100644
--- a/src/main/java/com/google/devtools/build/skyframe/DirtyBuildingState.java
+++ b/src/main/java/com/google/devtools/build/skyframe/DirtyBuildingState.java
@@ -55,6 +55,9 @@ public abstract class DirtyBuildingState {
*/
protected abstract int getNumOfGroupsInLastBuildDirectDeps();
+ /** The number of total dependencies requested the last time the node was built. */
+ public abstract int getNumElementsInLastBuildDirectDeps();
+
/**
* The value of the node the last time it was built.
*
@@ -237,6 +240,11 @@ public abstract class DirtyBuildingState {
}
@Override
+ public int getNumElementsInLastBuildDirectDeps() {
+ return lastBuildDirectDeps.numElements();
+ }
+
+ @Override
protected MoreObjects.ToStringHelper getStringHelper() {
return super.getStringHelper()
.add("lastBuildDirectDeps", lastBuildDirectDeps)
diff --git a/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java b/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
index ee80c29637..2ad10d285e 100644
--- a/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
+++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
@@ -233,6 +233,11 @@ public class InMemoryNodeEntry implements NodeEntry {
return GroupedList.create(directDeps);
}
+ public int getNumDirectDeps() {
+ Preconditions.checkState(isDone(), "no deps until done. NodeEntry: %s", this);
+ return GroupedList.numElements(directDeps);
+ }
+
@Override
@Nullable
public synchronized ErrorInfo getErrorInfo() {