@Override
	public <T> boolean isCompletelyVisible(AddressRange range, Lifespan lifespan, T object,
			Occlusion<T> occlusion) {
		if (range == null) {
			return false;
		}
		/**
		 * NB. Because occlusion.occluded can be expensive, we should only keep the lock long enough
		 * to copy the spans.
		 */
		for (Lifespan rng : getOrderedSpans()) {
			if (lifespan.contains(rng.lmax())) {
				return true;
			}
			if (occlusion.occluded(object, range, rng)) {
				return false;
			}
		}
		return false;
	}
NB: This is also the syncing object for the viewport. If there's even a chance an operation
may need the DB's lock, esp., considering user callbacks, then it must <em>first</em> acquire
the DB lock.
Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/DBTraceTimeViewport.java