Files
clang-p2996/lldb/test/benchmarks/disassembly/TestXcode41Vs42GDBDisassembly.py
Greg Clayton 4570d3eba0 Massive test suite cleanup to stop everyone from manually having to compute "mydir" inside each test case.
This has led to many test suite failures because of copy and paste where new test cases were based off of other test cases and the "mydir" variable wasn't updated.

Now you can call your superclasses "compute_mydir()" function with "__file__" as the sole argument and the relative path will be computed for you. 

llvm-svn: 196985
2013-12-10 23:19:29 +00:00

96 lines
3.3 KiB
Python

"""Disassemble lldb's Driver::MainLoop() functions comparing Xcode 4.1 vs. 4.2's gdb."""
import os, sys
import unittest2
import lldb
import pexpect
from lldbbench import *
class XCode41Vs42GDBDisassembly(BenchBase):
mydir = TestBase.compute_mydir(__file__)
def setUp(self):
BenchBase.setUp(self)
self.gdb_41_exe = '/Xcode41/usr/bin/gdb'
self.gdb_42_exe = '/Developer/usr/bin/gdb'
self.exe = self.lldbHere
self.function = 'Driver::MainLoop()'
self.gdb_41_avg = None
self.gdb_42_avg = None
self.count = lldb.bmIterationCount
if self.count <= 0:
self.count = 5
@benchmarks_test
def test_run_41_then_42(self):
"""Test disassembly on a large function with 4.1 vs. 4.2's gdb."""
print
self.run_gdb_disassembly(self.gdb_41_exe, self.exe, self.function, self.count)
print "4.1 gdb benchmark:", self.stopwatch
self.gdb_41_avg = self.stopwatch.avg()
self.run_gdb_disassembly(self.gdb_42_exe, self.exe, self.function, self.count)
print "4.2 gdb benchmark:", self.stopwatch
self.gdb_42_avg = self.stopwatch.avg()
print "gdb_42_avg/gdb_41_avg: %f" % (self.gdb_42_avg/self.gdb_41_avg)
@benchmarks_test
def test_run_42_then_41(self):
"""Test disassembly on a large function with 4.1 vs. 4.2's gdb."""
print
self.run_gdb_disassembly(self.gdb_42_exe, self.exe, self.function, self.count)
print "4.2 gdb benchmark:", self.stopwatch
self.gdb_42_avg = self.stopwatch.avg()
self.run_gdb_disassembly(self.gdb_41_exe, self.exe, self.function, self.count)
print "4.1 gdb benchmark:", self.stopwatch
self.gdb_41_avg = self.stopwatch.avg()
print "gdb_42_avg/gdb_41_avg: %f" % (self.gdb_42_avg/self.gdb_41_avg)
def run_gdb_disassembly(self, gdb_exe_path, exe, function, count):
# Set self.child_prompt, which is "(gdb) ".
self.child_prompt = '(gdb) '
prompt = self.child_prompt
# So that the child gets torn down after the test.
self.child = pexpect.spawn('%s --nx %s' % (gdb_exe_path, exe))
child = self.child
# Turn on logging for what the child sends back.
if self.TraceOn():
child.logfile_read = sys.stdout
child.expect_exact(prompt)
child.sendline('break %s' % function)
child.expect_exact(prompt)
child.sendline('run')
child.expect_exact(prompt)
# Reset the stopwatch now.
self.stopwatch.reset()
for i in range(count):
with self.stopwatch:
# Disassemble the function.
child.sendline('disassemble')
child.expect_exact(prompt)
child.sendline('next')
child.expect_exact(prompt)
child.sendline('quit')
child.expect_exact('The program is running. Exit anyway?')
child.sendline('y')
try:
self.child.expect(pexpect.EOF)
except:
pass
if self.TraceOn():
print "gdb disassembly benchmark:", str(self.stopwatch)
self.child = None
if __name__ == '__main__':
import atexit
lldb.SBDebugger.Initialize()
atexit.register(lambda: lldb.SBDebugger.Terminate())
unittest2.main()