Package gaiasky.data
Class StreamingOctreeLoader
java.lang.Object
gaiasky.data.StreamingOctreeLoader
- All Implemented Interfaces:
ISceneGraphLoader,IObserver
- Direct Known Subclasses:
OctreeGroupLoader
Contains the infrastructure common to all multi-file octree loaders which
streams data on-demand from disk and unloads unused data.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static classThe daemon loader thread. -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected StreamingOctreeLoader.OctreeLoaderThreadDaemon thread that gets the data loading requests and serves them.protected Stringprotected intstatic StreamingOctreeLoaderprotected longLast time of a queue clear event went through.protected static final intDefault load queue size in octants.protected long[]Loaded octant ids, for logging.protected intprotected booleanWhether loading is paused or not.protected static final intMaximum number of pages to send to load every batch.protected intprotected final longMax number of stars loaded at once.protected Stringprotected static final longMinimum time to pass to be able to clear the queue again.protected Stringprotected intCurrent number of stars that are loaded.protected Stringprotected static final intData will be pre-loaded at startup down to this octree depth.protected Queue<OctreeNode>The octant loading queue.protected Queue<OctreeNode>This queue is sorted ascending by access date, so that we know which element to release if needed (oldest). -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidTells the daemon to immediately stop the loading of octants and wait for new dataprotected voidaddLoadedInfo(long id, int nobjects) voidaddToQueue(OctreeNode octant) static voidClears the current load queue.voidRemoves all octants from the current load queue.protected voidvoidTells the loader to start loading the octants in the queue.static intstatic intvoidinitialize(String[] files) voidinitialize(uk.ac.starlink.util.DataSource ds) com.badlogic.gdx.utils.Array<? extends SceneGraphNode>loadData()voidloadLod(Integer lod, AbstractOctreeWrapper octreeWrapper) Loads all the levels of detail until the given one.abstract booleanloadOctant(OctreeNode octant, AbstractOctreeWrapper octreeWrapper, boolean fullInit) Loads the data of the given octant.voidloadOctant(OctreeNode octant, AbstractOctreeWrapper octreeWrapper, Integer level) Loads the data of the given octant and its children down to the given level.intloadOctants(com.badlogic.gdx.utils.Array<OctreeNode> octants, AbstractOctreeWrapper octreeWrapper, AtomicBoolean abort) Loads the objects of the given octants.protected abstract AbstractOctreeWrapperLoads the nodes and the octree.voidEvent notification call.static voidqueue(OctreeNode octant) Adds the octant to the load queue.voidsetDescription(String description) voidvoidstatic voidtouch(OctreeNode octant) Moves the octant to the end of the unload queue.voidtouchOctant(OctreeNode octant) Puts it at the end of the toUnloadQueue.voidunloadOctant(OctreeNode octant, AbstractOctreeWrapper octreeWrapper) Unloads the given octant.
-
Field Details
-
PRELOAD_DEPTH
protected static final int PRELOAD_DEPTHData will be pre-loaded at startup down to this octree depth.- See Also:
-
LOAD_QUEUE_MAX_SIZE
protected static final int LOAD_QUEUE_MAX_SIZEDefault load queue size in octants.- See Also:
-
MIN_QUEUE_CLEAR_MS
protected static final long MIN_QUEUE_CLEAR_MSMinimum time to pass to be able to clear the queue again.- See Also:
-
MAX_LOAD_CHUNK
protected static final int MAX_LOAD_CHUNKMaximum number of pages to send to load every batch.- See Also:
-
instance
-
nLoadedStars
protected int nLoadedStarsCurrent number of stars that are loaded. -
maxLoadedStars
protected final long maxLoadedStarsMax number of stars loaded at once. -
toLoadQueue
The octant loading queue. -
loadingPaused
protected boolean loadingPausedWhether loading is paused or not. -
lastQueueClearMs
protected long lastQueueClearMsLast time of a queue clear event went through. -
name
-
description
-
params
-
toUnloadQueue
This queue is sorted ascending by access date, so that we know which element to release if needed (oldest). -
loadedIds
protected long[] loadedIdsLoaded octant ids, for logging. -
loadedObjects
protected int loadedObjects -
maxLoadedIds
protected int maxLoadedIds -
idxLoadedIds
protected int idxLoadedIds -
metadata
-
particles
-
daemon
Daemon thread that gets the data loading requests and serves them.
-
-
Constructor Details
-
StreamingOctreeLoader
public StreamingOctreeLoader()
-
-
Method Details
-
initialize
public void initialize(uk.ac.starlink.util.DataSource ds) - Specified by:
initializein interfaceISceneGraphLoader
-
initialize
- Specified by:
initializein interfaceISceneGraphLoader- Throws:
RuntimeException
-
loadData
- Specified by:
loadDatain interfaceISceneGraphLoader
-
addLoadedInfo
protected void addLoadedInfo(long id, int nobjects) -
flushLoadedIds
protected void flushLoadedIds() -
loadOctreeData
Loads the nodes and the octree. -
queue
Adds the octant to the load queue. -
clearQueue
public static void clearQueue()Clears the current load queue. -
getLoadQueueSize
public static int getLoadQueueSize() -
getNLoadedStars
public static int getNLoadedStars() -
touch
Moves the octant to the end of the unload queue. -
emptyLoadQueue
public void emptyLoadQueue()Removes all octants from the current load queue. This happens when the camera viewport changes radically (velocity is high, direction changes a lot, etc.) so that the old octants are dropped and newly observed octants are loaded right away. -
addToQueue
-
touchOctant
Puts it at the end of the toUnloadQueue. -
flushLoadQueue
public void flushLoadQueue()Tells the loader to start loading the octants in the queue. -
abortCurrentLoading
public void abortCurrentLoading()Tells the daemon to immediately stop the loading of octants and wait for new data -
loadLod
Loads all the levels of detail until the given one.- Parameters:
lod- The level of detail to load.octreeWrapper- The octree wrapper.- Throws:
IOException- When any of the level's files fails to load.
-
loadOctant
public void loadOctant(OctreeNode octant, AbstractOctreeWrapper octreeWrapper, Integer level) throws IOException Loads the data of the given octant and its children down to the given level.- Parameters:
octant- The octant to load.octreeWrapper- The octree wrapper.level- The depth to load.- Throws:
IOException- When the octant's file fails to load.
-
loadOctants
public int loadOctants(com.badlogic.gdx.utils.Array<OctreeNode> octants, AbstractOctreeWrapper octreeWrapper, AtomicBoolean abort) throws IOException Loads the objects of the given octants.- Parameters:
octants- The list holding the octants to load.octreeWrapper- The octree wrapper.abort- State variable that will be set to true if an abort is called.- Returns:
- The actual number of loaded octants.
- Throws:
IOException- When any of the octants' files fail to load.
-
unloadOctant
Unloads the given octant. -
loadOctant
public abstract boolean loadOctant(OctreeNode octant, AbstractOctreeWrapper octreeWrapper, boolean fullInit) throws IOException Loads the data of the given octant.- Parameters:
octant- The octant to load.octreeWrapper- The octree wrapper.fullInit- Whether to fully initialise the objects (on-demand load) or not (startup)- Returns:
- True if the octant was loaded, false otherwise
- Throws:
IOException- When the octant file could not be read.
-
notify
Description copied from interface:IObserverEvent notification call. -
setName
- Specified by:
setNamein interfaceISceneGraphLoader
-
setDescription
- Specified by:
setDescriptionin interfaceISceneGraphLoader
-
setParams
- Specified by:
setParamsin interfaceISceneGraphLoader
-