Pass filter for what events should be stored in the Skyframe graph into the ParallelEvaluator, to allow users to customize which events they want to store.

--
MOS_MIGRATED_REVID=98299604
diff --git a/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java b/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java
index e3c1069..dfd14d4 100644
--- a/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java
+++ b/src/test/java/com/google/devtools/build/skyframe/ParallelEvaluatorTest.java
@@ -25,6 +25,7 @@
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
@@ -89,12 +90,19 @@
   }
 
   private ParallelEvaluator makeEvaluator(ProcessableGraph graph,
-      ImmutableMap<SkyFunctionName, ? extends SkyFunction> builders, boolean keepGoing) {
+      ImmutableMap<SkyFunctionName, ? extends SkyFunction> builders, boolean keepGoing,
+      Predicate<Event> storedEventFilter) {
     Version oldGraphVersion = graphVersion;
     graphVersion = graphVersion.next();
     return new ParallelEvaluator(graph, oldGraphVersion,
-        builders, reporter,  new MemoizingEvaluator.EmittedEventState(), keepGoing,
-        150, revalidationReceiver, new DirtyKeyTrackerImpl());
+        builders, reporter,  new MemoizingEvaluator.EmittedEventState(), storedEventFilter,
+        keepGoing, 150, revalidationReceiver, new DirtyKeyTrackerImpl());
+  }
+
+  private ParallelEvaluator makeEvaluator(ProcessableGraph graph,
+      ImmutableMap<SkyFunctionName, ? extends SkyFunction> builders, boolean keepGoing) {
+    return makeEvaluator(graph, builders, keepGoing,
+        InMemoryMemoizingEvaluator.DEFAULT_STORED_EVENT_FILTER);
   }
 
   /** Convenience method for eval-ing a single value. */
@@ -457,6 +465,51 @@
   }
 
   @Test
+  public void storedEventFilter() throws Exception {
+    graph = new InMemoryGraph();
+    SkyKey a = GraphTester.toSkyKey("a");
+    final AtomicBoolean evaluated = new AtomicBoolean(false);
+    tester.getOrCreate(a).setBuilder(new SkyFunction() {
+      @Nullable
+      @Override
+      public SkyValue compute(SkyKey skyKey, Environment env) {
+        evaluated.set(true);
+        env.getListener().handle(Event.error(null, "boop"));
+        env.getListener().handle(Event.warn(null, "beep"));
+        return new StringValue("a");
+      }
+
+      @Nullable
+      @Override
+      public String extractTag(SkyKey skyKey) {
+        return null;
+      }
+    });
+    ParallelEvaluator evaluator = makeEvaluator(graph,
+        ImmutableMap.of(GraphTester.NODE_TYPE, tester.createDelegatingFunction()),
+        /*keepGoing=*/false, new Predicate<Event>() {
+            @Override
+            public boolean apply(Event event) {
+              return event.getKind() == EventKind.ERROR;
+            }
+        });
+    evaluator.eval(ImmutableList.of(a));
+    assertTrue(evaluated.get());
+    JunitTestUtils.assertEventCount(2, eventCollector);
+    JunitTestUtils.assertContainsEvent(eventCollector, "boop");
+    JunitTestUtils.assertContainsEvent(eventCollector, "beep");
+    eventCollector.clear();
+    evaluator = makeEvaluator(graph,
+        ImmutableMap.of(GraphTester.NODE_TYPE, tester.createDelegatingFunction()),
+        /*keepGoing=*/false);
+    evaluated.set(false);
+    evaluator.eval(ImmutableList.of(a));
+    assertFalse(evaluated.get());
+    JunitTestUtils.assertEventCount(1, eventCollector);
+    JunitTestUtils.assertContainsEvent(eventCollector, "boop");
+  }
+
+  @Test
   public void shouldCreateErrorValueWithRootCause() throws Exception {
     graph = new InMemoryGraph();
     set("a", "a");