private CompletableFuture<ChkDominanceAlgorithm<V, E>> lazyCreateDominaceFuture() {

		// lazy-load
		if (dominanceFuture != null) {
			return dominanceFuture;
		}

		// we use an executor to restrict thread usage by the Graph API
		Executor executor = getGraphExecutor();
		dominanceFuture = CompletableFuture.supplyAsync(() -> {

			// this operation is fast enough that it shouldn't timeout, but just in case...
			TaskMonitor timeoutMonitor = TimeoutTaskMonitor.timeoutIn(ALGORITHM_TIMEOUT,
				TimeUnit.SECONDS, new TaskMonitorAdapter(true));

			GDirectedGraph<V, E> dominanceGraph = getDominanceGraph(graph, true);
			if (dominanceGraph == null) {
				Msg.debug(this, "No sources found for graph; cannot calculate dominance: " +
					graph.getClass().getSimpleName());
				return null;
			}

			try {
				// note: calling the constructor performs the work
				return new ChkDominanceAlgorithm<>(dominanceGraph, timeoutMonitor);
			}
			catch (CancelledException e) {
				// shouldn't happen
				Msg.debug(VisualGraphPathHighlighter.this,
					"Domiance calculation timed-out for " + graph.getClass().getSimpleName());
			}
			return null;
		}, executor);
		return dominanceFuture;
	}
Sets the callback that signals when this path highlighter should not be performing any
work

@param pauser the callback that returns a boolean of true when this class should pause
       its work.
Ghidra/Framework/Graph/src/main/java/ghidra/graph/viewer/edge/VisualGraphPathHighlighter.java