python: Use a sequential number to identify each call.
authorJosé Fonseca <jfonseca@vmware.com>
Wed, 25 Mar 2009 13:44:32 +0000 (13:44 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Wed, 25 Mar 2009 21:03:40 +0000 (21:03 +0000)
TODO: Modify the trace driver to generate these on the XML file itself.

src/gallium/state_trackers/python/retrace/model.py
src/gallium/state_trackers/python/retrace/parser.py

index ae0f4327d7636b513d7e23aaa06e3e4dddc1298f..d4a079fb1e56c774bd596cfdaad8cef09b6854fa 100755 (executable)
@@ -101,7 +101,8 @@ class Pointer(Node):
 
 class Call:
     
-    def __init__(self, klass, method, args, ret):
+    def __init__(self, no, klass, method, args, ret):
+        self.no = no
         self.klass = klass
         self.method = method
         self.args = args
@@ -187,6 +188,7 @@ class PrettyPrinter:
         self.formatter.address(node.address)
     
     def visit_call(self, node):
+        self.formatter.text('%s ' % node.no)
         if node.klass is not None:
             self.formatter.function(node.klass + '::' + node.method)
         else:
index db9bcc8226cf90efaf286ea8f007719a68fa52ef..b0f3e8a432f2939c5648c6ba7a296c56f2fec384 100755 (executable)
@@ -190,6 +190,10 @@ class XmlParser:
 
 class TraceParser(XmlParser):
 
+    def __init__(self, fp):
+        XmlParser.__init__(self, fp)
+        self.last_call_no = 0
+    
     def parse(self):
         self.element_start('trace')
         while self.token.type not in (ELEMENT_END, EOF):
@@ -200,6 +204,13 @@ class TraceParser(XmlParser):
 
     def parse_call(self):
         attrs = self.element_start('call')
+        try:
+            no = int(attrs['no'])
+        except KeyError:
+            self.last_call_no += 1
+            no = self.last_call_no
+        else:
+            self.last_call_no = no
         klass = attrs['class']
         method = attrs['method']
         args = []
@@ -217,7 +228,7 @@ class TraceParser(XmlParser):
                 raise TokenMismatch("<arg ...> or <ret ...>", self.token)
         self.element_end('call')
         
-        return Call(klass, method, args, ret)
+        return Call(no, klass, method, args, ret)
 
     def parse_arg(self):
         attrs = self.element_start('arg')