freedreno/a6xx: fix hangs with newer sqe fw
[mesa.git] / src / gallium / tools / trace / model.py
index e76aad7788b08b5572750ca8e267db5b68038d90..6a421847113f7c09029fc70eae3d8e9b8734202b 100755 (executable)
@@ -1,7 +1,7 @@
-#!/usr/bin/env python
+#!/usr/bin/env python2
 ##########################################################################
 # 
-# Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
+# Copyright 2008 VMware, Inc.
 # All Rights Reserved.
 # 
 # Permission is hereby granted, free of charge, to any person obtaining a
@@ -19,7 +19,7 @@
 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-# IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+# IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
 # ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
 # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
 # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 
 import sys
 import string
-import format
+import binascii
 
 try:
     from cStringIO import StringIO
 except ImportError:
     from StringIO import StringIO
 
+import format
+
 
 class Node:
     
@@ -62,6 +64,22 @@ class Literal(Node):
         visitor.visit_literal(self)
 
 
+class Blob(Node):
+    
+    def __init__(self, value):
+        self._rawValue = None
+        self._hexValue = value
+
+    def getValue(self):
+        if self._rawValue is None:
+            self._rawValue = binascii.a2b_hex(self._hexValue)
+            self._hexValue = None
+        return self._rawValue
+
+    def visit(self, visitor):
+        visitor.visit_blob(self)
+
+
 class NamedConstant(Node):
     
     def __init__(self, name):
@@ -101,12 +119,13 @@ class Pointer(Node):
 
 class Call:
     
-    def __init__(self, no, klass, method, args, ret):
+    def __init__(self, no, klass, method, args, ret, time):
         self.no = no
         self.klass = klass
         self.method = method
         self.args = args
         self.ret = ret
+        self.time = time
         
     def visit(self, visitor):
         visitor.visit_call(self)
@@ -126,6 +145,9 @@ class Visitor:
     def visit_literal(self, node):
         raise NotImplementedError
     
+    def visit_blob(self, node):
+        raise NotImplementedError
+    
     def visit_named_constant(self, node):
         raise NotImplementedError
     
@@ -151,17 +173,19 @@ class PrettyPrinter:
         self.formatter = formatter
     
     def visit_literal(self, node):
-        if isinstance(node.value, basestring):
-            if len(node.value) >= 4096 or node.value.strip(string.printable):
-                self.formatter.address('blob(%u)' % len(node.value))
-                #self.formatter.text('...')
-                return
+        if node.value is None:
+            self.formatter.literal('NULL')
+            return
 
+        if isinstance(node.value, basestring):
             self.formatter.literal('"' + node.value + '"')
             return
 
         self.formatter.literal(repr(node.value))
     
+    def visit_blob(self, node):
+        self.formatter.address('blob()')
+    
     def visit_named_constant(self, node):
         self.formatter.literal(node.name)
     
@@ -206,7 +230,10 @@ class PrettyPrinter:
         if node.ret is not None:
             self.formatter.text(' = ')
             node.ret.visit(self)
-    
+        if node.time is not None:
+            self.formatter.text(' // time ')
+            node.time.visit(self)
+
     def visit_trace(self, node):
         for call in node.calls:
             call.visit(self)