]> git.cworth.org Git - apitrace/blobdiff - scripts/tracediff2.py
Add a script to analyse profile output per shader.
[apitrace] / scripts / tracediff2.py
index d6fd39261228b5adb1a391263e7b495f4d086e95..0f59d87983df51be1a23bb8400c3c601d172402b 100755 (executable)
@@ -40,6 +40,7 @@ ignoredFunctionNames = set([
     'glGetString',
     'glXGetClientString',
     'glXGetCurrentDisplay',
+    'glXGetCurrentContext',
     'glXGetProcAddress',
     'glXGetProcAddressARB',
     'wglGetProcAddress',
@@ -99,7 +100,6 @@ def readtrace(trace, calls):
         stdout = subprocess.PIPE,
     )
 
-    calls = []
     parser = Loader(p.stdout)
     parser.parse()
     return parser.calls
@@ -166,16 +166,24 @@ class SDiffer:
             a_call = self.a[alo + i]
             b_call = self.b[blo + i]
             assert a_call.functionName == b_call.functionName
-            assert len(a_call.args) == len(b_call.args)
             self.dumpCallNos(a_call.no, b_call.no)
             self.highlighter.bold(True)
             self.highlighter.write(b_call.functionName)
             self.highlighter.bold(False)
             self.highlighter.write('(')
             sep = ''
-            for j in xrange(len(b_call.args)):
+            numArgs = max(len(a_call.args), len(b_call.args))
+            for j in xrange(numArgs):
                 self.highlighter.write(sep)
-                self.replace_value(a_call.args[j], b_call.args[j])
+                try:
+                    a_arg = a_call.args[j]
+                except IndexError:
+                    pass
+                try:
+                    b_arg = b_call.args[j]
+                except IndexError:
+                    pass
+                self.replace_value(a_arg, b_arg)
                 sep = ', '
             self.highlighter.write(')')
             if a_call.ret is not None or b_call.ret is not None:
@@ -186,15 +194,11 @@ class SDiffer:
     def replace_dissimilar(self, alo, ahi, blo, bhi):
         assert alo < ahi and blo < bhi
         if bhi - blo < ahi - alo:
-            first  = self.insert(blo, bhi)
-            second = self.delete(alo, ahi)
+            self.insert(alo, alo, blo, bhi)
+            self.delete(alo, ahi, bhi, bhi)
         else:
-            first  = self.delete(alo, ahi)
-            second = self.insert(blo, bhi)
-
-        for g in first, second:
-            for line in g:
-                yield line
+            self.delete(alo, ahi, blo, blo)
+            self.insert(ahi, ahi, blo, bhi)
 
     def replace_value(self, a, b):
         if b == a:
@@ -212,6 +216,8 @@ class SDiffer:
     escape = "\33["
 
     def delete(self, alo, ahi, blo, bhi):
+        assert alo < ahi
+        assert blo == bhi
         for i in xrange(alo, ahi):
             call = self.a[i]
             self.highlighter.write('- ')
@@ -221,6 +227,8 @@ class SDiffer:
             self.dumpCall(call)
 
     def insert(self, alo, ahi, blo, bhi):
+        assert alo == ahi
+        assert blo < bhi
         for i in xrange(blo, bhi):
             call = self.b[i]
             self.highlighter.write('+ ')
@@ -229,6 +237,8 @@ class SDiffer:
             self.dumpCall(call)
 
     def equal(self, alo, ahi, blo, bhi):
+        assert alo < ahi and blo < bhi
+        assert ahi - alo == bhi - blo
         for i in xrange(0, bhi - blo):
             self.highlighter.write('  ')
             a_call = self.a[alo + i]
@@ -245,21 +255,21 @@ class SDiffer:
         if aNo is None:
             self.highlighter.write(' '*self.aSpace)
         else:
-            aStr = str(aNo)
+            aNoStr = str(aNo)
             self.highlighter.strike()
             self.highlighter.color(self.delete_color)
-            self.highlighter.write(str(aNo))
+            self.highlighter.write(aNoStr)
             self.highlighter.normal()
-            self.aSpace = len(aStr)
+            self.aSpace = len(aNoStr)
         self.highlighter.write(' ')
         if bNo is None:
-            self.highlighter.write(' '*self.aSpace)
+            self.highlighter.write(' '*self.bSpace)
         else:
-            bStr = str(bNo)
+            bNoStr = str(bNo)
             self.highlighter.color(self.insert_color)
-            self.highlighter.write(str(bNo))
+            self.highlighter.write(bNoStr)
             self.highlighter.normal()
-            self.bSpace = len(bStr)
+            self.bSpace = len(bNoStr)
         self.highlighter.write(' ')
 
     def dumpCall(self, call):