private void bookmarkLifespanChanged(TraceAddressSpace space, TraceBookmark bm,
				Lifespan oldSpan, Lifespan newSpan) {
			DomainObjectEventQueues queues = getEventQueues(space);
			if (queues == null) {
				return;
			}
			boolean inOld = isBookmarkVisible(bm, oldSpan);
			boolean inNew = isBookmarkVisible(bm, newSpan);
			if (inOld && !inNew) {
				fireBookmarkRemoved(queues, bm);
			}
			if (!inOld && inNew) {
				fireBookmarkAdded(queues, bm);
			}
		}
A wrapper on a trace, which given a snap, implements the {@link Program} interface

<p>
NOTE: Calling {@link CodeUnit#getProgram()} from units contained in this view may not necessarily
return this same view. If the code unit comes from a less-recent snap than the snap associated
with this view, the view for that snap is returned instead.

<p>
TODO: Unit tests for all of this.
Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/program/DBTraceProgramView.java