From: Enrico Granata Date: Thu, 22 Jan 2015 19:33:53 +0000 (+0000) Subject: Add a benchmark test case that shows how much slower repeat 'continue' commands are... X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7a2421095c730b4c09242643e1fdd56ca4d45e08;p=platform%2Fupstream%2Fllvm.git Add a benchmark test case that shows how much slower repeat 'continue' commands are than going through the SB API directly llvm-svn: 226852 --- diff --git a/lldb/test/benchmarks/continue/Makefile b/lldb/test/benchmarks/continue/Makefile new file mode 100644 index 0000000..8a7102e --- /dev/null +++ b/lldb/test/benchmarks/continue/Makefile @@ -0,0 +1,5 @@ +LEVEL = ../../make + +CXX_SOURCES := main.cpp + +include $(LEVEL)/Makefile.rules diff --git a/lldb/test/benchmarks/continue/TestBenchmarkContinue.py b/lldb/test/benchmarks/continue/TestBenchmarkContinue.py new file mode 100644 index 0000000..40e9c6d --- /dev/null +++ b/lldb/test/benchmarks/continue/TestBenchmarkContinue.py @@ -0,0 +1,79 @@ +""" +Test lldb data formatter subsystem. +""" + +import os, time +import unittest2 +import lldb +from lldbbench import * +import lldbutil + +class TestBenchmarkContinue(BenchBase): + + mydir = TestBase.compute_mydir(__file__) + + @benchmarks_test + @unittest2.skipUnless(sys.platform.startswith("darwin"), "requires Darwin") + @dsym_test + def test_with_dsym_and_run_command(self): + """Benchmark different ways to continue a process""" + self.buildDsym() + self.data_formatter_commands() + + @benchmarks_test + @skipIfLinux # No standard locations for libc++ on Linux, so skip for now + @dwarf_test + def test_with_dwarf_and_run_command(self): + """Benchmark different ways to continue a process""" + self.buildDwarf() + self.data_formatter_commands() + + def setUp(self): + # Call super's setUp(). + BenchBase.setUp(self) + + def data_formatter_commands(self): + """Benchmark different ways to continue a process""" + self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) + + bkpt = self.target().FindBreakpointByID(lldbutil.run_break_set_by_source_regexp (self, "// break here")) + + self.runCmd("run", RUN_SUCCEEDED) + + # The stop reason of the thread should be breakpoint. + self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, + substrs = ['stopped', + 'stop reason = breakpoint']) + + # This is the function to remove the custom formats in order to have a + # clean slate for the next test case. + def cleanup(): + self.runCmd('type format clear', check=False) + self.runCmd('type summary clear', check=False) + self.runCmd('type filter clear', check=False) + self.runCmd('type synth clear', check=False) + self.runCmd("settings set target.max-children-count 256", check=False) + + # Execute the cleanup function during test case tear down. + self.addTearDownHook(cleanup) + + runCmd_sw = Stopwatch() + lldbutil_sw = Stopwatch() + + for i in range(0,15): + runCmd_sw.start() + self.runCmd("continue") + runCmd_sw.stop() + + for i in range(0,15): + lldbutil_sw.start() + lldbutil.continue_to_breakpoint(self.process(), bkpt) + lldbutil_sw.stop() + + print "runCmd: %s\nlldbutil: %s" % (runCmd_sw,lldbutil_sw) + +if __name__ == '__main__': + import atexit + lldb.SBDebugger.Initialize() + atexit.register(lambda: lldb.SBDebugger.Terminate()) + unittest2.main() diff --git a/lldb/test/benchmarks/continue/main.cpp b/lldb/test/benchmarks/continue/main.cpp new file mode 100644 index 0000000..d715a11 --- /dev/null +++ b/lldb/test/benchmarks/continue/main.cpp @@ -0,0 +1,36 @@ +#include + +#define intint_map std::map + +int g_the_foo = 0; + +int thefoo_rw(int arg = 1) +{ + if (arg < 0) + arg = 0; + if (!arg) + arg = 1; + g_the_foo += arg; + return g_the_foo; +} + +int main() +{ + intint_map ii; + + for (int i = 0; i < 15; i++) + { + ii[i] = i + 1; + thefoo_rw(i); // break here + } + + ii.clear(); + + for (int j = 0; j < 15; j++) + { + ii[j] = j + 1; + thefoo_rw(j); // break here + } + + return 0; +}