+class SrcTraceParser(checker.SrcTraceParser):
+
+ def __init__(self, stream):
+ checker.SrcTraceParser.__init__(self, stream)
+ self.swapbuffers = 0
+
+ def handleCall(self, callNo, functionName, args, ret):
+ checker.SrcTraceParser.handleCall(self, callNo, functionName, args, ret)
+
+ if functionName.find('SwapBuffers') != -1 or \
+ repr(args).find('kCGLPFADoubleBuffer') != -1:
+ self.swapbuffers += 1
+
+
+class TraceChecker:
+
+ def __init__(self, srcStream, refFileName):
+ self.srcStream = srcStream
+ self.refFileName = refFileName
+ self.doubleBuffer = False
+ self.callNo = 0
+ self.images = []
+ self.states = []
+
+ def check(self):
+ srcParser = SrcTraceParser(self.srcStream)
+ srcTrace = srcParser.parse()
+ self.doubleBuffer = srcParser.swapbuffers > 0
+
+ if self.refFileName:
+ refParser = RefTraceParser(self.refFileName)
+ refTrace = refParser.parse()
+
+ try:
+ mo = refTrace.match(srcTrace)
+ except checker.TraceMismatch, ex:
+ self.fail(str(ex))
+
+ for paramName, imageFileName in refParser.images:
+ if isinstance(paramName, int):
+ callNo = paramName
+ else:
+ callNo = mo.params[paramName]
+ self.images.append((callNo, imageFileName))
+ for paramName, stateFileName in refParser.states:
+ if isinstance(paramName, int):
+ callNo = paramName
+ else:
+ callNo = mo.params[paramName]
+ self.states.append((callNo, stateFileName))