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
|
# check chunk mtimes to see if they are newer
|
||||||
try:
|
try:
|
||||||
#tile_mtime = os.path.getmtime(imgpath)
|
|
||||||
regionMtimes = {}
|
|
||||||
needs_rerender = False
|
needs_rerender = False
|
||||||
for col, row, chunkx, chunky, regionfile in chunks:
|
for col, row, chunkx, chunky, regionfile in chunks:
|
||||||
# check region file mtime first.
|
# 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 = world.get_region_mtime(regionfile)
|
||||||
regionMtime = regionMtimes.get(regionfile,None)
|
|
||||||
if regionMtime is None:
|
|
||||||
regionMtime = os.path.getmtime(regionfile)
|
|
||||||
regionMtimes[regionfile] = regionMtime
|
|
||||||
if regionMtime <= tile_mtime:
|
if regionMtime <= tile_mtime:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|||||||
16
world.py
16
world.py
@@ -78,7 +78,7 @@ class World(object):
|
|||||||
for x, y, regionfile in self._iterate_regionfiles():
|
for x, y, regionfile in self._iterate_regionfiles():
|
||||||
mcr = nbt.MCRFileReader(regionfile)
|
mcr = nbt.MCRFileReader(regionfile)
|
||||||
mcr.get_chunk_info()
|
mcr.get_chunk_info()
|
||||||
regions[regionfile] = mcr
|
regions[regionfile] = (mcr,os.path.getmtime(regionfile))
|
||||||
regionfiles[(x,y)] = (x,y,regionfile)
|
regionfiles[(x,y)] = (x,y,regionfile)
|
||||||
self.regionfiles = regionfiles
|
self.regionfiles = regionfiles
|
||||||
self.regions = regions
|
self.regions = regions
|
||||||
@@ -117,8 +117,6 @@ class World(object):
|
|||||||
_, _, regionfile = self.regionfiles.get((chunkX//32, chunkY//32),(None,None,None));
|
_, _, regionfile = self.regionfiles.get((chunkX//32, chunkY//32),(None,None,None));
|
||||||
return regionfile
|
return regionfile
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def load_from_region(self,filename, x, y):
|
def load_from_region(self,filename, x, y):
|
||||||
nbt = self.load_region(filename).load_chunk(x, y)
|
nbt = self.load_region(filename).load_chunk(x, y)
|
||||||
if nbt is None:
|
if nbt is None:
|
||||||
@@ -127,11 +125,15 @@ class World(object):
|
|||||||
return nbt.read_all()
|
return nbt.read_all()
|
||||||
|
|
||||||
|
|
||||||
#filo region cache
|
#used to reload a changed region
|
||||||
def load_region(self,filename):
|
def reload_region(self,filename):
|
||||||
#return nbt.MCRFileReader(filename)
|
self.regions[filename] = (nbt.MCRFileReader(filename),os.path.getmtime(regionfile))
|
||||||
return self.regions[filename]
|
|
||||||
|
|
||||||
|
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):
|
def convert_coords(self, chunkx, chunky):
|
||||||
"""Takes a coordinate (chunkx, chunky) where chunkx and chunky are
|
"""Takes a coordinate (chunkx, chunky) where chunkx and chunky are
|
||||||
|
|||||||
Reference in New Issue
Block a user