1*99451b44SJordan Rupprecht"""Test lldb's response time for 'frame variable' command.""" 2*99451b44SJordan Rupprecht 3*99451b44SJordan Rupprechtfrom __future__ import print_function 4*99451b44SJordan Rupprecht 5*99451b44SJordan Rupprecht 6*99451b44SJordan Rupprechtimport sys 7*99451b44SJordan Rupprechtimport lldb 8*99451b44SJordan Rupprechtfrom lldbsuite.test import configuration 9*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbtest_config 10*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 11*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbbench import * 12*99451b44SJordan Rupprecht 13*99451b44SJordan Rupprecht 14*99451b44SJordan Rupprechtclass FrameVariableResponseBench(BenchBase): 15*99451b44SJordan Rupprecht 16*99451b44SJordan Rupprecht def setUp(self): 17*99451b44SJordan Rupprecht BenchBase.setUp(self) 18*99451b44SJordan Rupprecht self.exe = lldbtest_config.lldbExec 19*99451b44SJordan Rupprecht self.break_spec = '-n main' 20*99451b44SJordan Rupprecht self.count = 20 21*99451b44SJordan Rupprecht 22*99451b44SJordan Rupprecht @benchmarks_test 23*99451b44SJordan Rupprecht @no_debug_info_test 24*99451b44SJordan Rupprecht @expectedFailureAll( 25*99451b44SJordan Rupprecht oslist=["windows"], 26*99451b44SJordan Rupprecht bugnumber="llvm.org/pr22274: need a pexpect replacement for windows") 27*99451b44SJordan Rupprecht def test_startup_delay(self): 28*99451b44SJordan Rupprecht """Test response time for the 'frame variable' command.""" 29*99451b44SJordan Rupprecht print() 30*99451b44SJordan Rupprecht self.run_frame_variable_bench(self.exe, self.break_spec, self.count) 31*99451b44SJordan Rupprecht print("lldb frame variable benchmark:", self.stopwatch) 32*99451b44SJordan Rupprecht 33*99451b44SJordan Rupprecht def run_frame_variable_bench(self, exe, break_spec, count): 34*99451b44SJordan Rupprecht import pexpect 35*99451b44SJordan Rupprecht # Set self.child_prompt, which is "(lldb) ". 36*99451b44SJordan Rupprecht self.child_prompt = '(lldb) ' 37*99451b44SJordan Rupprecht prompt = self.child_prompt 38*99451b44SJordan Rupprecht 39*99451b44SJordan Rupprecht # Reset the stopwatchs now. 40*99451b44SJordan Rupprecht self.stopwatch.reset() 41*99451b44SJordan Rupprecht for i in range(count): 42*99451b44SJordan Rupprecht # So that the child gets torn down after the test. 43*99451b44SJordan Rupprecht self.child = pexpect.spawn( 44*99451b44SJordan Rupprecht '%s %s %s' % 45*99451b44SJordan Rupprecht (lldbtest_config.lldbExec, self.lldbOption, exe)) 46*99451b44SJordan Rupprecht child = self.child 47*99451b44SJordan Rupprecht 48*99451b44SJordan Rupprecht # Turn on logging for what the child sends back. 49*99451b44SJordan Rupprecht if self.TraceOn(): 50*99451b44SJordan Rupprecht child.logfile_read = sys.stdout 51*99451b44SJordan Rupprecht 52*99451b44SJordan Rupprecht # Set our breakpoint. 53*99451b44SJordan Rupprecht child.sendline('breakpoint set %s' % break_spec) 54*99451b44SJordan Rupprecht child.expect_exact(prompt) 55*99451b44SJordan Rupprecht 56*99451b44SJordan Rupprecht # Run the target and expect it to be stopped due to breakpoint. 57*99451b44SJordan Rupprecht child.sendline('run') # Aka 'process launch'. 58*99451b44SJordan Rupprecht child.expect_exact(prompt) 59*99451b44SJordan Rupprecht 60*99451b44SJordan Rupprecht with self.stopwatch: 61*99451b44SJordan Rupprecht # Measure the 'frame variable' response time. 62*99451b44SJordan Rupprecht child.sendline('frame variable') 63*99451b44SJordan Rupprecht child.expect_exact(prompt) 64*99451b44SJordan Rupprecht 65*99451b44SJordan Rupprecht child.sendline('quit') 66*99451b44SJordan Rupprecht try: 67*99451b44SJordan Rupprecht self.child.expect(pexpect.EOF) 68*99451b44SJordan Rupprecht except: 69*99451b44SJordan Rupprecht pass 70*99451b44SJordan Rupprecht 71*99451b44SJordan Rupprecht # The test is about to end and if we come to here, the child process has 72*99451b44SJordan Rupprecht # been terminated. Mark it so. 73*99451b44SJordan Rupprecht self.child = None 74