Index: gdb/testsuite/gdb.perf/lib/perftest/perftest.py |
diff --git a/gdb/testsuite/gdb.perf/lib/perftest/perftest.py b/gdb/testsuite/gdb.perf/lib/perftest/perftest.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e3982303e6225bd904893ed94ffca00f86a1f641 |
--- /dev/null |
+++ b/gdb/testsuite/gdb.perf/lib/perftest/perftest.py |
@@ -0,0 +1,73 @@ |
+# 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/>. |
+ |
+import testresult |
+import reporter |
+from measure import Measure |
+from measure import MeasurementCpuTime |
+from measure import MeasurementWallTime |
+from measure import MeasurementVmSize |
+ |
+class TestCase(object): |
+ """Base class of all performance testing cases. |
+ |
+ Each sub-class should override methods execute_test, in which |
+ several GDB operations are performed and measured by attribute |
+ measure. Sub-class can also override method warm_up optionally |
+ if the test case needs warm up. |
+ """ |
+ |
+ def __init__(self, name, measure): |
+ """Constructor of TestCase. |
+ |
+ Construct an instance of TestCase with a name and a measure |
+ which is to measure the test by several different measurements. |
+ """ |
+ |
+ self.name = name |
+ self.measure = measure |
+ |
+ def execute_test(self): |
+ """Abstract method to do the actual tests.""" |
+ raise NotImplementedError("Abstract Method.") |
+ |
+ def warm_up(self): |
+ """Do some operations to warm up the environment.""" |
+ pass |
+ |
+ def run(self, warm_up=True, append=True): |
+ """Run this test case. |
+ |
+ It is a template method to invoke method warm_up, |
+ execute_test, and finally report the measured results. |
+ If parameter warm_up is True, run method warm_up. If parameter |
+ append is True, the test result will be appended instead of |
+ overwritten. |
+ """ |
+ if warm_up: |
+ self.warm_up() |
+ |
+ self.execute_test() |
+ self.measure.report(reporter.TextReporter(append), self.name) |
+ |
+class TestCaseWithBasicMeasurements(TestCase): |
+ """Test case measuring CPU time, wall time and memory usage.""" |
+ |
+ def __init__(self, name): |
+ result_factory = testresult.SingleStatisticResultFactory() |
+ measurements = [MeasurementCpuTime(result_factory.create_result()), |
+ MeasurementWallTime(result_factory.create_result()), |
+ MeasurementVmSize(result_factory.create_result())] |
+ super (TestCaseWithBasicMeasurements, self).__init__ (name, Measure(measurements)) |