freedreno/a6xx: fix hangs with newer sqe fw
[mesa.git] / src / gallium / tools / trace / diff_state.py
index 470aeda059b8f2723ddf6796394507f8e347ee2d..877dc388a8ec79afe0bb4f2e960d813ba3b7a52c 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python2
 ##########################################################################
 #
 # Copyright 2011 Jose Fonseca
@@ -28,6 +28,7 @@
 import json
 import optparse
 import re
+import difflib
 import sys
 
 
@@ -131,7 +132,7 @@ class Dumper(Visitor):
         self._write(']')
 
     def visitValue(self, node):
-        self._write(json.dumps(node))
+        self._write(json.dumps(node, allow_nan=True))
 
 
 
@@ -246,6 +247,38 @@ class Differ(Visitor):
             self.replace(a, b)
 
     def replace(self, a, b):
+        if isinstance(a, basestring) and isinstance(b, basestring):
+            if '\n' in a or '\n' in b:
+                a = a.splitlines()
+                b = b.splitlines()
+                differ = difflib.Differ()
+                result = differ.compare(a, b)
+                self.dumper.level += 1
+                for entry in result:
+                    self.dumper._newline()
+                    self.dumper._indent()
+                    tag = entry[:2]
+                    text = entry[2:]
+                    if tag == '? ':
+                        tag = '  '
+                        prefix = ' '
+                        text = text.rstrip()
+                        suffix = ''
+                    else:
+                        prefix = '"'
+                        suffix = '\\n"'
+                    line = tag + prefix + text + suffix
+                    self.dumper._write(line)
+                self.dumper.level -= 1
+                return
+        self.dumper.visit(a)
+        self.dumper._write(' -> ')
+        self.dumper.visit(b)
+
+    def isMultilineString(self, value):
+        return isinstance(value, basestring) and '\n' in value
+    
+    def replaceMultilineString(self, a, b):
         self.dumper.visit(a)
         self.dumper._write(' -> ')
         self.dumper.visit(b)