Hi Mike
This code snippet should do what you want. dataSourcesLoaded will become false whenever a data source is being prepared (this includes both loading the data and then creating the geometry). When dataSourcesLoaded is true, you can be sure that all primitives and geometry are being shown in the viewer.
var dataSourcesLoaded = true;
var originalFunction = viewer.dataSourceDisplay.update;
viewer.dataSourceDisplay.update = function(time) {
dataSourcesLoaded = originalFunction.apply(viewer.dataSourceDisplay, [time]);
return dataSourcesLoaded;
};