@Override
	public void domainObjectChanged(DomainObjectChangedEvent ev) {
		if (!isVisible()) {
			return;
		}

		if (controller.getGraphedFunction() == null) {
			return;
		}

		boolean graphChangedButNotRebuilt = false;
		boolean rebuildGraphOnChanges = isPerformingGraphRebuildOnDataChanges();

		//
		// Note: since we are not looping and we are using 'else if's, order is important!
		//

		if (ev.contains(RESTORED, FUNCTION_BODY_CHANGED)) {
			if (graphDataMissing()) {
				controller.clear();
				return; // something really destructive has happened--give up!
			}
			graphChangedButNotRebuilt = !handleObjectRestored(ev, rebuildGraphOnChanges);
		}
		else if (ev.contains(SYMBOL_ADDED, SYMBOL_REMOVED)) {

			if (currentGraphContainsEventAddress(ev)) {
				graphChangedButNotRebuilt = !handleSymbolAddedRemoved(ev, rebuildGraphOnChanges);
			}
		}
		else if (ev.contains(REFERENCE_ADDED, REFERENCE_REMOVED)) {

			if (currentGraphContainsReferenceChangedEvent(ev)) {
				graphChangedButNotRebuilt = !handleReferenceAddedRemoved(ev, rebuildGraphOnChanges);
			}
		}
		else if (ev.contains(SYMBOL_RENAMED)) {
			handleSymbolRenamed(ev);
		}

		if (graphChangedButNotRebuilt) {
			updateGraphForAffectedAddresses(ev);
		}

		// force a repaint for any type of event to make sure we are up-to-date, even for events
		// we are not directly interested in.
		controller.repaint();
	}
Tells the graph that some display data may have changed, but the changes are not worth
performing a full rebuild
Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/FGProvider.java