summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Fonseca <[email protected]>2013-06-20 19:38:55 +0100
committerJosé Fonseca <[email protected]>2013-06-21 14:30:19 +0100
commita7bccb33b95699eb5c14b76e782da75e6d8c2738 (patch)
tree87340a9f9a468675339aeeeb2853ae3c7c081e8a
parenta8f7e12d92a8c3dab8ec2e821f51ed711849f1b5 (diff)
tools/trace: Defer blob hex-decoding.
To speed up parsing. Reviewed-by: Brian Paul <[email protected]>
-rwxr-xr-xsrc/gallium/tools/trace/model.py31
-rwxr-xr-xsrc/gallium/tools/trace/parse.py5
2 files changed, 27 insertions, 9 deletions
diff --git a/src/gallium/tools/trace/model.py b/src/gallium/tools/trace/model.py
index 8276a8f9c61..82aca6935bf 100755
--- a/src/gallium/tools/trace/model.py
+++ b/src/gallium/tools/trace/model.py
@@ -32,13 +32,15 @@
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):
@@ -127,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
@@ -157,16 +178,14 @@ class PrettyPrinter:
return
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
-
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)
diff --git a/src/gallium/tools/trace/parse.py b/src/gallium/tools/trace/parse.py
index 07f2d6c7659..d8dce2628ab 100755
--- a/src/gallium/tools/trace/parse.py
+++ b/src/gallium/tools/trace/parse.py
@@ -29,7 +29,6 @@
import sys
import xml.parsers.expat
-import binascii
import optparse
from model import *
@@ -305,9 +304,9 @@ class TraceParser(XmlParser):
def parse_bytes(self):
self.element_start('bytes')
- value = binascii.a2b_hex(self.character_data())
+ value = self.character_data()
self.element_end('bytes')
- return Literal(value)
+ return Blob(value)
def parse_array(self):
self.element_start('array')