| Index: gdb/testsuite/lib/perftest.exp
|
| diff --git a/gdb/testsuite/lib/perftest.exp b/gdb/testsuite/lib/perftest.exp
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..3822207a67b040a93837795eca0d506a8fbb447c
|
| --- /dev/null
|
| +++ b/gdb/testsuite/lib/perftest.exp
|
| @@ -0,0 +1,125 @@
|
| +# Copyright (C) 2013 Free Software Foundation, Inc.
|
| +
|
| +# This program is free software; you can redistribute it and/or modify
|
| +# it under the terms of the GNU General Public License as published by
|
| +# the Free Software Foundation; either version 3 of the License, or
|
| +# (at your option) any later version.
|
| +#
|
| +# This program is distributed in the hope that it will be useful,
|
| +# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| +# GNU General Public License for more details.
|
| +#
|
| +# You should have received a copy of the GNU General Public License
|
| +# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
| +
|
| +namespace eval PerfTest {
|
| + # The name of python file on build.
|
| + variable remote_python_file
|
| +
|
| + # A private method to set up GDB for performance testing.
|
| + proc _setup_perftest {} {
|
| + variable remote_python_file
|
| + global srcdir subdir testfile
|
| +
|
| + set remote_python_file [gdb_remote_download host ${srcdir}/${subdir}/${testfile}.py]
|
| +
|
| + # Set sys.path for module perftest.
|
| + gdb_test_no_output "python import os, sys"
|
| + gdb_test_no_output "python sys.path.insert\(0, os.path.abspath\(\"${srcdir}/${subdir}/lib\"\)\)"
|
| + gdb_test_no_output "python exec (open ('${remote_python_file}').read ())"
|
| + }
|
| +
|
| + # A private method to do some cleanups when performance test is
|
| + # finished.
|
| + proc _teardown_perftest {} {
|
| + variable remote_python_file
|
| +
|
| + remote_file host delete $remote_python_file
|
| + }
|
| +
|
| + # Compile source files of test case. BODY is the tcl code to do
|
| + # actual compilation. Return zero if compilation is successful,
|
| + # otherwise return non-zero.
|
| + proc compile {body} {
|
| + global GDB_PERFTEST_MODE
|
| +
|
| + if { [info exists GDB_PERFTEST_MODE]
|
| + && [string compare $GDB_PERFTEST_MODE "run"] } {
|
| + return [uplevel 2 $body]
|
| + }
|
| +
|
| + return 0
|
| + }
|
| +
|
| + # Start up GDB.
|
| + proc startup_gdb {body} {
|
| + uplevel 2 $body
|
| + }
|
| +
|
| + # Run the performance test.
|
| + proc run {body} {
|
| + global timeout
|
| + global GDB_PERFTEST_TIMEOUT
|
| +
|
| + set oldtimeout $timeout
|
| + if { [info exists GDB_PERFTEST_TIMEOUT] } {
|
| + set timeout $GDB_PERFTEST_TIMEOUT
|
| + } else {
|
| + set timeout 3000
|
| + }
|
| + uplevel 2 $body
|
| +
|
| + set timeout $oldtimeout
|
| + }
|
| +
|
| + # The top-level interface to PerfTest.
|
| + # COMPILE is the tcl code to generate and compile source files.
|
| + # Return zero if compilation is successful, otherwise return
|
| + # non-zero.
|
| + # STARTUP is the tcl code to start up GDB.
|
| + # RUN is the tcl code to drive GDB to do some operations.
|
| + proc assemble {compile startup run} {
|
| + global GDB_PERFTEST_MODE
|
| +
|
| + if { [eval compile {$compile}] } {
|
| + untested "Could not compile source files."
|
| + return
|
| + }
|
| +
|
| + # Don't execute the run if GDB_PERFTEST_MODE=compile.
|
| + if { [info exists GDB_PERFTEST_MODE]
|
| + && [string compare $GDB_PERFTEST_MODE "compile"] == 0} {
|
| + return
|
| + }
|
| +
|
| + eval $startup
|
| +
|
| + _setup_perftest
|
| +
|
| + eval run {$run}
|
| +
|
| + _teardown_perftest
|
| + }
|
| +}
|
| +
|
| +# Return true if performance tests are skipped.
|
| +
|
| +proc skip_perf_tests { } {
|
| + global GDB_PERFTEST_MODE
|
| +
|
| + if [info exists GDB_PERFTEST_MODE] {
|
| +
|
| + if { "$GDB_PERFTEST_MODE" != "compile"
|
| + && "$GDB_PERFTEST_MODE" != "run"
|
| + && "$GDB_PERFTEST_MODE" != "both" } {
|
| + # GDB_PERFTEST_MODE=compile|run|both is allowed.
|
| + error "Unknown value of GDB_PERFTEST_MODE."
|
| + return 1
|
| + }
|
| +
|
| + return 0
|
| + }
|
| +
|
| + return 1
|
| +}
|
|
|