- Results that take less than 0.1 seconds are not cached anymore. I

wonder if any protocols are that fast :)
This commit is contained in:
ccremers 2005-03-04 13:40:23 +00:00
parent 533cf46080
commit 76ad1ec696

View File

@ -12,15 +12,25 @@
# - Maybe it is an idea to time the output. If Scyther takes less
# than a second, we don't need to cache the output. That would
# reduce the required cache size significantly.
# If so, we only need to create directories for the cached files
# we actually create.
#
import md5
import commands
import os
import sys
import time
from tempfile import NamedTemporaryFile, gettempdir
from optparse import OptionParser
#----------------------------------------------------------------------------
# Global definitions
#----------------------------------------------------------------------------
# Minimum duration for something to get into the cache
CacheTimer = 0.1
#----------------------------------------------------------------------------
# How to call Scyther
#----------------------------------------------------------------------------
@ -75,7 +85,7 @@ def evaluate (argumentstring, inputstring):
# Determine name
def cachefilename(id):
fn = gettempdir() + "/scyther/"
fn = fn + slashcutter(id,"/",2,4)
fn = fn + slashcutter(id,"/",3,2)
fn = fn + ".txt"
return fn
@ -93,7 +103,6 @@ def evaluate (argumentstring, inputstring):
# Determine the unique filename for this test
cachefile = cachefilename(cacheid())
ensureDirectories(cachefile)
# Does it already exist?
if os.path.exists(cachefile):
@ -101,19 +110,27 @@ def evaluate (argumentstring, inputstring):
f = open(cachefile,'r')
res = f.read()
f.close()
# TODO technically, we should store the status in the
# cache file as well. For now, we just return 0 status.
return (0,res)
else:
# Hmm, we need to compute this result
# Compute duration (in seconds)
h = NamedTemporaryFile()
h.write(inputstring)
h.flush()
starttime = time.time()
(status, scout) = scythercall (argumentstring, h.name)
duration = time.time() - starttime
h.close()
# Write cache file even if it's wrong
f = open(cachefile,'w')
f.write(scout)
f.close()
# Only cache if it took some time
if duration >= CacheTimer:
# Write cache file even if it's wrong
ensureDirectories(cachefile)
f = open(cachefile,'w')
f.write(scout)
f.close()
return (status,scout)
@ -168,11 +185,11 @@ def default_arguments(plist,match,bounds):
if bounds == 0:
timer = nmin**2
maxruns = 2*nmin
maxlength = 2 + maxruns * 3
maxlength = 2 + maxruns * 4
elif bounds == 1:
timer = nmin**3
maxruns = 3*nmin
maxlength = 2 + maxruns * 4
maxlength = 2 + maxruns * 6
else:
print "Don't know bounds method", bounds
sys.exit()