1*99451b44SJordan Rupprecht"""
2*99451b44SJordan RupprechtTest lldb data formatter subsystem.
3*99451b44SJordan Rupprecht"""
4*99451b44SJordan Rupprecht
5*99451b44SJordan Rupprechtfrom __future__ import print_function
6*99451b44SJordan Rupprecht
7*99451b44SJordan Rupprecht
8*99451b44SJordan Rupprechtimport lldb
9*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
10*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbbench import *
11*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
12*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
13*99451b44SJordan Rupprecht
14*99451b44SJordan Rupprecht
15*99451b44SJordan Rupprechtclass TestBenchmarkContinue(BenchBase):
16*99451b44SJordan Rupprecht
17*99451b44SJordan Rupprecht    @benchmarks_test
18*99451b44SJordan Rupprecht    def test_run_command(self):
19*99451b44SJordan Rupprecht        """Benchmark different ways to continue a process"""
20*99451b44SJordan Rupprecht        self.build()
21*99451b44SJordan Rupprecht        self.data_formatter_commands()
22*99451b44SJordan Rupprecht
23*99451b44SJordan Rupprecht    def setUp(self):
24*99451b44SJordan Rupprecht        # Call super's setUp().
25*99451b44SJordan Rupprecht        BenchBase.setUp(self)
26*99451b44SJordan Rupprecht
27*99451b44SJordan Rupprecht    def data_formatter_commands(self):
28*99451b44SJordan Rupprecht        """Benchmark different ways to continue a process"""
29*99451b44SJordan Rupprecht        self.runCmd("file "+self.getBuildArtifact("a.out"),
30*99451b44SJordan Rupprecht                    CURRENT_EXECUTABLE_SET)
31*99451b44SJordan Rupprecht
32*99451b44SJordan Rupprecht        bkpt = self.target().FindBreakpointByID(
33*99451b44SJordan Rupprecht            lldbutil.run_break_set_by_source_regexp(
34*99451b44SJordan Rupprecht                self, "// break here"))
35*99451b44SJordan Rupprecht
36*99451b44SJordan Rupprecht        self.runCmd("run", RUN_SUCCEEDED)
37*99451b44SJordan Rupprecht
38*99451b44SJordan Rupprecht        # The stop reason of the thread should be breakpoint.
39*99451b44SJordan Rupprecht        self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT,
40*99451b44SJordan Rupprecht                    substrs=['stopped',
41*99451b44SJordan Rupprecht                             'stop reason = breakpoint'])
42*99451b44SJordan Rupprecht
43*99451b44SJordan Rupprecht        # This is the function to remove the custom formats in order to have a
44*99451b44SJordan Rupprecht        # clean slate for the next test case.
45*99451b44SJordan Rupprecht        def cleanup():
46*99451b44SJordan Rupprecht            self.runCmd('type format clear', check=False)
47*99451b44SJordan Rupprecht            self.runCmd('type summary clear', check=False)
48*99451b44SJordan Rupprecht            self.runCmd('type filter clear', check=False)
49*99451b44SJordan Rupprecht            self.runCmd('type synth clear', check=False)
50*99451b44SJordan Rupprecht            self.runCmd(
51*99451b44SJordan Rupprecht                "settings set target.max-children-count 256",
52*99451b44SJordan Rupprecht                check=False)
53*99451b44SJordan Rupprecht
54*99451b44SJordan Rupprecht        # Execute the cleanup function during test case tear down.
55*99451b44SJordan Rupprecht        self.addTearDownHook(cleanup)
56*99451b44SJordan Rupprecht
57*99451b44SJordan Rupprecht        runCmd_sw = Stopwatch()
58*99451b44SJordan Rupprecht        lldbutil_sw = Stopwatch()
59*99451b44SJordan Rupprecht
60*99451b44SJordan Rupprecht        for i in range(0, 15):
61*99451b44SJordan Rupprecht            runCmd_sw.start()
62*99451b44SJordan Rupprecht            self.runCmd("continue")
63*99451b44SJordan Rupprecht            runCmd_sw.stop()
64*99451b44SJordan Rupprecht
65*99451b44SJordan Rupprecht        for i in range(0, 15):
66*99451b44SJordan Rupprecht            lldbutil_sw.start()
67*99451b44SJordan Rupprecht            lldbutil.continue_to_breakpoint(self.process(), bkpt)
68*99451b44SJordan Rupprecht            lldbutil_sw.stop()
69*99451b44SJordan Rupprecht
70*99451b44SJordan Rupprecht        print("runCmd: %s\nlldbutil: %s" % (runCmd_sw, lldbutil_sw))
71