Package gaiasky.data

Class StreamingOctreeLoader

java.lang.Object
gaiasky.data.StreamingOctreeLoader
All Implemented Interfaces:
ISceneGraphLoader, IObserver
Direct Known Subclasses:
OctreeGroupLoader

public abstract class StreamingOctreeLoader extends Object implements IObserver, ISceneGraphLoader
Contains the infrastructure common to all multi-file octree loaders which streams data on-demand from disk and unloads unused data.
  • Field Details

    • PRELOAD_DEPTH

      protected static final int PRELOAD_DEPTH
      Data will be pre-loaded at startup down to this octree depth.
      See Also:
      Constant Field Values
    • LOAD_QUEUE_MAX_SIZE

      protected static final int LOAD_QUEUE_MAX_SIZE
      Default load queue size in octants.
      See Also:
      Constant Field Values
    • MIN_QUEUE_CLEAR_MS

      protected static final long MIN_QUEUE_CLEAR_MS
      Minimum time to pass to be able to clear the queue again.
      See Also:
      Constant Field Values
    • MAX_LOAD_CHUNK

      protected static final int MAX_LOAD_CHUNK
      Maximum number of pages to send to load every batch.
      See Also:
      Constant Field Values
    • instance

      public static StreamingOctreeLoader instance
    • nLoadedStars

      protected int nLoadedStars
      Current number of stars that are loaded.
    • maxLoadedStars

      protected final long maxLoadedStars
      Max number of stars loaded at once.
    • toLoadQueue

      protected Queue<OctreeNode> toLoadQueue
      The octant loading queue.
    • loadingPaused

      protected boolean loadingPaused
      Whether loading is paused or not.
    • lastQueueClearMs

      protected long lastQueueClearMs
      Last time of a queue clear event went through.
    • name

      protected String name
    • description

      protected String description
    • params

      protected Map<String,​Object> params
    • toUnloadQueue

      protected Queue<OctreeNode> toUnloadQueue
      This queue is sorted ascending by access date, so that we know which element to release if needed (oldest).
    • loadedIds

      protected long[] loadedIds
      Loaded octant ids, for logging.
    • loadedObjects

      protected int loadedObjects
    • maxLoadedIds

      protected int maxLoadedIds
    • idxLoadedIds

      protected int idxLoadedIds
    • metadata

      protected String metadata
    • particles

      protected String 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:
      initialize in interface ISceneGraphLoader
    • initialize

      public void initialize(String[] files) throws RuntimeException
      Specified by:
      initialize in interface ISceneGraphLoader
      Throws:
      RuntimeException
    • loadData

      public com.badlogic.gdx.utils.Array<? extends SceneGraphNode> loadData()
      Specified by:
      loadData in interface ISceneGraphLoader
    • addLoadedInfo

      protected void addLoadedInfo(long id, int nobjects)
    • flushLoadedIds

      protected void flushLoadedIds()
    • loadOctreeData

      protected abstract AbstractOctreeWrapper loadOctreeData()
      Loads the nodes and the octree.
    • queue

      public static void queue(OctreeNode octant)
      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

      public static void touch(OctreeNode octant)
      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

      public void addToQueue(OctreeNode octant)
    • touchOctant

      public void touchOctant(OctreeNode octant)
      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

      public void loadLod(Integer lod, AbstractOctreeWrapper octreeWrapper) throws IOException
      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

      public void unloadOctant(OctreeNode octant, AbstractOctreeWrapper octreeWrapper)
      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

      public void notify(Events event, Object... data)
      Specified by:
      notify in interface IObserver
    • setName

      public void setName(String name)
      Specified by:
      setName in interface ISceneGraphLoader
    • setDescription

      public void setDescription(String description)
      Specified by:
      setDescription in interface ISceneGraphLoader
    • setParams

      public void setParams(Map<String,​Object> params)
      Specified by:
      setParams in interface ISceneGraphLoader