[Lldb-commits] [lldb] r142628 - in /lldb/trunk/test/benchmarks/startup: ./ TestStartupDelays.py

Johnny Chen johnny.chen at apple.com
Thu Oct 20 15:37:46 PDT 2011


Author: johnny
Date: Thu Oct 20 17:37:45 2011
New Revision: 142628

URL: http://llvm.org/viewvc/llvm-project?rev=142628&view=rev
Log:
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


Added:
    lldb/trunk/test/benchmarks/startup/
    lldb/trunk/test/benchmarks/startup/TestStartupDelays.py

Added: lldb/trunk/test/benchmarks/startup/TestStartupDelays.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/benchmarks/startup/TestStartupDelays.py?rev=142628&view=auto
==============================================================================
--- lldb/trunk/test/benchmarks/startup/TestStartupDelays.py (added)
+++ lldb/trunk/test/benchmarks/startup/TestStartupDelays.py Thu Oct 20 17:37:45 2011
@@ -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()





More information about the lldb-commits mailing list