forked from OSchip/llvm-project
Add a benchmark for measuring start up delays of lldb, including:
o create a fresh target; and o set the first breakpoint Example (using lldb to set a breakpoint on lldb's Driver::MainLoop function): ./dotest.py -v +b -x '-F Driver::MainLoop()' -p TestStartupDelays.py ... 1: test_startup_delay (TestStartupDelays.StartupDelaysBench) Test start up delays creating a target and setting a breakpoint. ... lldb startup delays benchmark: create fresh target: Avg: 0.106732 (Laps: 15, Total Elapsed Time: 1.600985) set first breakpoint: Avg: 0.102589 (Laps: 15, Total Elapsed Time: 1.538832) ok llvm-svn: 142628
This commit is contained in:
parent
97fbc34276
commit
7f63fdaa74
|
@ -0,0 +1,82 @@
|
|||
"""Test lldb's startup delays creating a target and setting a breakpoint."""
|
||||
|
||||
import os, sys
|
||||
import unittest2
|
||||
import lldb
|
||||
import pexpect
|
||||
from lldbbench import *
|
||||
|
||||
class StartupDelaysBench(BenchBase):
|
||||
|
||||
mydir = os.path.join("benchmarks", "startup")
|
||||
|
||||
def setUp(self):
|
||||
BenchBase.setUp(self)
|
||||
# Create self.stopwatch2 for measuring "set first breakpoint".
|
||||
# The default self.stopwatch is for "create fresh target".
|
||||
self.stopwatch2 = Stopwatch()
|
||||
if lldb.bmExecutable:
|
||||
self.exe = lldb.bmExecutable
|
||||
else:
|
||||
self.exe = self.lldbHere
|
||||
if lldb.bmBreakpointSpec:
|
||||
self.break_spec = lldb.bmBreakpointSpec
|
||||
else:
|
||||
self.break_spec = '-n main'
|
||||
|
||||
self.count = lldb.bmIterationCount
|
||||
if self.count <= 0:
|
||||
self.count = 15
|
||||
|
||||
@benchmarks_test
|
||||
def test_startup_delay(self):
|
||||
"""Test start up delays creating a target and setting a breakpoint."""
|
||||
print
|
||||
self.run_startup_delays_bench(self.exe, self.break_spec, self.count)
|
||||
print "lldb startup delays benchmark:"
|
||||
print "create fresh target:", self.stopwatch
|
||||
print "set first breakpoint:", self.stopwatch2
|
||||
|
||||
def run_startup_delays_bench(self, exe, break_spec, count):
|
||||
# Set self.child_prompt, which is "(lldb) ".
|
||||
self.child_prompt = '(lldb) '
|
||||
prompt = self.child_prompt
|
||||
|
||||
# Reset the stopwatchs now.
|
||||
self.stopwatch.reset()
|
||||
self.stopwatch2.reset()
|
||||
for i in range(count):
|
||||
# So that the child gets torn down after the test.
|
||||
self.child = pexpect.spawn('%s %s' % (self.lldbHere, self.lldbOption))
|
||||
child = self.child
|
||||
|
||||
# Turn on logging for what the child sends back.
|
||||
if self.TraceOn():
|
||||
child.logfile_read = sys.stdout
|
||||
|
||||
with self.stopwatch:
|
||||
# Create a fresh target.
|
||||
child.sendline('file %s' % exe) # Aka 'target create'.
|
||||
child.expect_exact(prompt)
|
||||
|
||||
with self.stopwatch2:
|
||||
# Read debug info and set the first breakpoint.
|
||||
child.sendline('breakpoint set %s' % break_spec)
|
||||
child.expect_exact(prompt)
|
||||
|
||||
child.sendline('quit')
|
||||
try:
|
||||
self.child.expect(pexpect.EOF)
|
||||
except:
|
||||
pass
|
||||
|
||||
# The test is about to end and if we come to here, the child process has
|
||||
# been terminated. Mark it so.
|
||||
self.child = None
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import atexit
|
||||
lldb.SBDebugger.Initialize()
|
||||
atexit.register(lambda: lldb.SBDebugger.Terminate())
|
||||
unittest2.main()
|
Loading…
Reference in New Issue