Added region cache invalidation & reloading. Cached region mtimes.
This commit is contained in:
@@ -597,16 +597,10 @@ def render_worldtile(quadtree, chunks, colstart, colend, rowstart, rowend, path)
|
||||
|
||||
# check chunk mtimes to see if they are newer
|
||||
try:
|
||||
#tile_mtime = os.path.getmtime(imgpath)
|
||||
regionMtimes = {}
|
||||
needs_rerender = False
|
||||
for col, row, chunkx, chunky, regionfile in chunks:
|
||||
# check region file mtime first.
|
||||
# Note: we cache the value since it's actually very likely we will have multipule chunks in the same region, and syscalls are expensive
|
||||
regionMtime = regionMtimes.get(regionfile,None)
|
||||
if regionMtime is None:
|
||||
regionMtime = os.path.getmtime(regionfile)
|
||||
regionMtimes[regionfile] = regionMtime
|
||||
regionMtime = world.get_region_mtime(regionfile)
|
||||
if regionMtime <= tile_mtime:
|
||||
continue
|
||||
|
||||
|
||||
16
world.py
16
world.py
@@ -78,7 +78,7 @@ class World(object):
|
||||
for x, y, regionfile in self._iterate_regionfiles():
|
||||
mcr = nbt.MCRFileReader(regionfile)
|
||||
mcr.get_chunk_info()
|
||||
regions[regionfile] = mcr
|
||||
regions[regionfile] = (mcr,os.path.getmtime(regionfile))
|
||||
regionfiles[(x,y)] = (x,y,regionfile)
|
||||
self.regionfiles = regionfiles
|
||||
self.regions = regions
|
||||
@@ -117,8 +117,6 @@ class World(object):
|
||||
_, _, regionfile = self.regionfiles.get((chunkX//32, chunkY//32),(None,None,None));
|
||||
return regionfile
|
||||
|
||||
|
||||
|
||||
def load_from_region(self,filename, x, y):
|
||||
nbt = self.load_region(filename).load_chunk(x, y)
|
||||
if nbt is None:
|
||||
@@ -127,11 +125,15 @@ class World(object):
|
||||
return nbt.read_all()
|
||||
|
||||
|
||||
#filo region cache
|
||||
def load_region(self,filename):
|
||||
#return nbt.MCRFileReader(filename)
|
||||
return self.regions[filename]
|
||||
#used to reload a changed region
|
||||
def reload_region(self,filename):
|
||||
self.regions[filename] = (nbt.MCRFileReader(filename),os.path.getmtime(regionfile))
|
||||
|
||||
def load_region(self,filename):
|
||||
return self.regions[filename][0]
|
||||
|
||||
def get_region_mtime(self,filename):
|
||||
return self.regions[filename][1]
|
||||
|
||||
def convert_coords(self, chunkx, chunky):
|
||||
"""Takes a coordinate (chunkx, chunky) where chunkx and chunky are
|
||||
|
||||
Reference in New Issue
Block a user