1 """Test lldb's response time for 'frame variable' command.""" 2 3 import os, sys 4 import unittest2 5 import lldb 6 import pexpect 7 from lldbbench import * 8 9 class FrameVariableResponseBench(BenchBase): 10 11 mydir = os.path.join("benchmarks", "frame_variable") 12 13 def setUp(self): 14 BenchBase.setUp(self) 15 if lldb.bmExecutable: 16 self.exe = lldb.bmExecutable 17 else: 18 self.exe = self.lldbHere 19 if lldb.bmBreakpointSpec: 20 self.break_spec = lldb.bmBreakpointSpec 21 else: 22 self.break_spec = '-n main' 23 24 self.count = lldb.bmIterationCount 25 if self.count <= 0: 26 self.count = 20 27 28 @benchmarks_test 29 def test_startup_delay(self): 30 """Test response time for the 'frame variable' command.""" 31 print 32 self.run_frame_variable_bench(self.exe, self.break_spec, self.count) 33 print "lldb frame variable benchmark:", self.stopwatch 34 35 def run_frame_variable_bench(self, exe, break_spec, count): 36 # Set self.child_prompt, which is "(lldb) ". 37 self.child_prompt = '(lldb) ' 38 prompt = self.child_prompt 39 40 # Reset the stopwatchs now. 41 self.stopwatch.reset() 42 for i in range(count): 43 # So that the child gets torn down after the test. 44 self.child = pexpect.spawn('%s %s %s' % (self.lldbHere, self.lldbOption, exe)) 45 child = self.child 46 47 # Turn on logging for what the child sends back. 48 if self.TraceOn(): 49 child.logfile_read = sys.stdout 50 51 # Set our breakpoint. 52 child.sendline('breakpoint set %s' % break_spec) 53 child.expect_exact(prompt) 54 55 # Run the target and expect it to be stopped due to breakpoint. 56 child.sendline('run') # Aka 'process launch'. 57 child.expect_exact(prompt) 58 59 with self.stopwatch: 60 # Measure the 'frame variable' response time. 61 child.sendline('frame variable') 62 child.expect_exact(prompt) 63 64 child.sendline('quit') 65 try: 66 self.child.expect(pexpect.EOF) 67 except: 68 pass 69 70 # The test is about to end and if we come to here, the child process has 71 # been terminated. Mark it so. 72 self.child = None 73 74 75 if __name__ == '__main__': 76 import atexit 77 lldb.SBDebugger.Initialize() 78 atexit.register(lambda: lldb.SBDebugger.Terminate()) 79 unittest2.main() 80