diff options
author | José Fonseca <jfonseca@vmware.com> | 2013-06-20 19:38:55 +0100 |
---|---|---|
committer | José Fonseca <jfonseca@vmware.com> | 2013-06-21 14:30:19 +0100 |
commit | a7bccb33b95699eb5c14b76e782da75e6d8c2738 (patch) | |
tree | 87340a9f9a468675339aeeeb2853ae3c7c081e8a | |
parent | a8f7e12d92a8c3dab8ec2e821f51ed711849f1b5 (diff) |
tools/trace: Defer blob hex-decoding.
To speed up parsing.
Reviewed-by: Brian Paul <brianp@vmware.com>
-rwxr-xr-x | src/gallium/tools/trace/model.py | 31 | ||||
-rwxr-xr-x | src/gallium/tools/trace/parse.py | 5 |
2 files changed, 27 insertions, 9 deletions
diff --git a/src/gallium/tools/trace/model.py b/src/gallium/tools/trace/model.py index 8276a8f9c6..82aca6935b 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 07f2d6c765..d8dce2628a 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') |