0

Added region cache invalidation & reloading. Cached region mtimes.

This commit is contained in:
Xon
2011-03-20 08:24:43 +08:00
parent d534e7137d
commit ec255bf29b
2 changed files with 10 additions and 14 deletions

View File

@@ -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

View File

@@ -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