Heavily refactor ProfileCommand to separate output and statistics generation and enable their reuse
--
MOS_MIGRATED_REVID=103634406
diff --git a/src/main/java/com/google/devtools/build/lib/profiler/ProfilerTask.java b/src/main/java/com/google/devtools/build/lib/profiler/ProfilerTask.java
index 37349b1..00e2557 100644
--- a/src/main/java/com/google/devtools/build/lib/profiler/ProfilerTask.java
+++ b/src/main/java/com/google/devtools/build/lib/profiler/ProfilerTask.java
@@ -13,6 +13,10 @@
// limitations under the License.
package com.google.devtools.build.lib.profiler;
+import com.google.common.base.Predicate;
+
+import java.util.EnumSet;
+
/**
* All possible types of profiler tasks. Each type also defines description and
* minimum duration in nanoseconds for it to be recorded as separate event and
@@ -115,4 +119,17 @@
public boolean collectsSlowestInstances() {
return slowestInstancesCount > 0;
}
+
+ /**
+ * Build a set containing all ProfilerTasks for which the given predicate is true.
+ */
+ public static EnumSet<ProfilerTask> allSatisfying(Predicate<ProfilerTask> predicate) {
+ EnumSet<ProfilerTask> set = EnumSet.noneOf(ProfilerTask.class);
+ for (ProfilerTask taskType : values()) {
+ if (predicate.apply(taskType)) {
+ set.add(taskType);
+ }
+ }
+ return set;
+ }
}