mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 02:38:04 +02:00
python/retrace: Process the trace call-by-call (instead of reading everything into memory).
This commit is contained in:
parent
10624065b0
commit
7f3c3683ce
2 changed files with 23 additions and 27 deletions
|
|
@ -22,7 +22,7 @@
|
|||
import sys
|
||||
import gallium
|
||||
import model
|
||||
from parser import TraceParser
|
||||
import parser
|
||||
|
||||
|
||||
def make_image(surface):
|
||||
|
|
@ -426,9 +426,10 @@ class Context(Object):
|
|||
show_image(self.cbufs[0])
|
||||
|
||||
|
||||
class Interpreter:
|
||||
class Interpreter(parser.TraceParser):
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, stream):
|
||||
parser.TraceParser.__init__(self, stream)
|
||||
self.objects = {}
|
||||
self.result = None
|
||||
self.globl = Global(self, None)
|
||||
|
|
@ -447,7 +448,7 @@ class Interpreter:
|
|||
for call in trace.calls:
|
||||
self.interpret_call(call)
|
||||
|
||||
def interpret_call(self, call):
|
||||
def handle_call(self, call):
|
||||
sys.stderr.write("%s\n" % call)
|
||||
|
||||
args = [self.interpret_arg(arg) for name, arg in call.args]
|
||||
|
|
@ -469,18 +470,5 @@ class Interpreter:
|
|||
return translator.visit(node)
|
||||
|
||||
|
||||
def main():
|
||||
for arg in sys.argv[1:]:
|
||||
if arg.endswith('.gz'):
|
||||
import gzip
|
||||
stream = gzip.GzipFile(arg, 'rt')
|
||||
else:
|
||||
stream = open(arg, 'rt')
|
||||
parser = TraceParser(stream)
|
||||
trace = parser.parse()
|
||||
interpreter = Interpreter()
|
||||
interpreter.interpret(trace)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
parser.main(Interpreter)
|
||||
|
|
|
|||
|
|
@ -183,12 +183,11 @@ class TraceParser(XmlParser):
|
|||
|
||||
def parse(self):
|
||||
self.element_start('trace')
|
||||
calls = []
|
||||
while self.token.type not in (ELEMENT_END, EOF):
|
||||
calls.append(self.parse_call())
|
||||
call = self.parse_call()
|
||||
self.handle_call(call)
|
||||
if self.token.type != EOF:
|
||||
self.element_end('trace')
|
||||
return Trace(calls)
|
||||
|
||||
def parse_call(self):
|
||||
attrs = self.element_start('call')
|
||||
|
|
@ -319,19 +318,28 @@ class TraceParser(XmlParser):
|
|||
|
||||
return Pointer(address)
|
||||
|
||||
def handle_call(self, call):
|
||||
|
||||
pass
|
||||
|
||||
|
||||
class TraceDumper(TraceParser):
|
||||
|
||||
|
||||
def main():
|
||||
def handle_call(self, call):
|
||||
print call
|
||||
|
||||
|
||||
def main(ParserFactory):
|
||||
for arg in sys.argv[1:]:
|
||||
if arg.endswith('.gz'):
|
||||
import gzip
|
||||
stream = gzip.GzipFile(arg, 'rt')
|
||||
else:
|
||||
stream = open(arg, 'rt')
|
||||
parser = TraceParser(stream)
|
||||
trace = parser.parse()
|
||||
for call in trace.calls:
|
||||
print call
|
||||
parser = ParserFactory(stream)
|
||||
parser.parse()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
main(TraceDumper)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue