From a7bccb33b95699eb5c14b76e782da75e6d8c2738 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Fonseca?= Date: Thu, 20 Jun 2013 19:38:55 +0100 Subject: [PATCH] tools/trace: Defer blob hex-decoding. To speed up parsing. Reviewed-by: Brian Paul --- src/gallium/tools/trace/model.py | 31 +++++++++++++++++++++++++------ 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 8276a8f..82aca69 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 07f2d6c..d8dce26 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') -- 2.7.4