public static final class Builder<OriginalInput, Output>
      implements ProcessingResultListener<OriginalInput, Output> {

    private final Counts.Builder fetch = Counts.builder();
    private final Counts.Builder processing = Counts.builder();
    private boolean hasListenerDelegationFailures = false;

    public ResultStatistics build() {
      return new ResultStatistics(fetch.build(), processing.build(), hasListenerDelegationFailures);
    }

    public void setListenerDelegationFailures(final boolean b) {
      hasListenerDelegationFailures = b;
    }

    @Override
    public void onFetchResult(final Result<FetchedItem<OriginalInput>, OriginalInput> result) {
      fetch.add(result);
    }

    @Override
    public void onProcessingResult(final Result<FetchedItem<OriginalInput>, Output> result) {
      processing.add(result);
    }
  }