This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
mcedit2/benchmarks/mceditlib/time_storagechain.py
2015-10-30 04:35:12 -10:00

43 lines
1.2 KiB
Python

"""
time_storagechain
"""
import logging
from timeit import timeit
from benchmarks import bench_temp_file
from mceditlib import nbt
from mceditlib.revisionhistory import RevisionHistory
log = logging.getLogger(__name__)
chain = RevisionHistory(bench_temp_file("AnvilWorld"))
chunkPositions = list(chain.getHead().chunkPositions(""))
from random import choice
def readChunk(rev, cx, cz):
return nbt.load(buf=rev.readChunkBytes(cx, cz, ""))
def writeChunk(rev, cx, cz, tag):
rev.writeChunkBytes(cx, cz, "", tag.save(compressed=False))
def addRevisions():
for i in range(1000):
rev = chain.createRevision()
cx, cz = choice(chunkPositions)
tag = readChunk(rev, cx, cz)
tag["Level"]["touched"] = nbt.TAG_Byte(1)
writeChunk(rev, cx, cz, tag)
def timeAccess():
head = chain.getHead()
for cx, cz in chunkPositions:
tag = readChunk(head, cx, cz)
print "Empty: %0.1f ms" % (timeit(timeAccess, number=1)*1000)
print "addRevisions: %0.1f ms" % (timeit(addRevisions, number=1)*1000)
print "Full: %0.1f ms" % (timeit(timeAccess, number=1)*1000)
print "Save: %0.1f ms" % (timeit(chain.writeAllChanges, number=1)*1000)