aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/testsuite/gdb.perf/lib/perftest/measure.py50
-rw-r--r--gdb/testsuite/gdb.perf/lib/perftest/perftest.py6
2 files changed, 40 insertions, 16 deletions
diff --git a/gdb/testsuite/gdb.perf/lib/perftest/measure.py b/gdb/testsuite/gdb.perf/lib/perftest/measure.py
index 2a20c5e..9810458 100644
--- a/gdb/testsuite/gdb.perf/lib/perftest/measure.py
+++ b/gdb/testsuite/gdb.perf/lib/perftest/measure.py
@@ -16,6 +16,13 @@
import time
import os
import gc
+import sys
+
+# time.perf_counter() and time.process_time() were added in Python
+# 3.3, time.clock() was removed in Python 3.8.
+if sys.version_info < (3, 3, 0):
+ time.perf_counter = time.clock
+ time.process_time = time.clock
class Measure(object):
@@ -85,28 +92,43 @@ class Measurement(object):
self.result.report(reporter, name + " " + self.name)
-class MeasurementCpuTime(Measurement):
- """Measurement on CPU time."""
+class MeasurementPerfCounter(Measurement):
+ """Measurement on performance counter."""
+
+ # Measures time in fractional seconds, using a performance
+ # counter, i.e. a clock with the highest available resolution to
+ # measure a short duration. It includes time elapsed during sleep
+ # and is system-wide.
+
+ def __init__(self, result):
+ super(MeasurementPerfCounter, self).__init__("perf_counter", result)
+ self.start_time = 0
+
+ def start(self, id):
+ self.start_time = time.perf_counter()
+
+ def stop(self, id):
+ perf_counter = time.perf_counter() - self.start_time
+ self.result.record(id, perf_counter)
+
+
+class MeasurementProcessTime(Measurement):
+ """Measurement on process time."""
- # On UNIX, time.clock() measures the amount of CPU time that has
- # been used by the current process. On Windows it will measure
- # wall-clock seconds elapsed since the first call to the function.
- # Something other than time.clock() should be used to measure CPU
- # time on Windows.
+ # Measures the sum of the system and user CPU time of the current
+ # process. Does not include time elapsed during sleep. It is
+ # process-wide by definition.
def __init__(self, result):
- super(MeasurementCpuTime, self).__init__("cpu_time", result)
+ super(MeasurementProcessTime, self).__init__("process_time", result)
self.start_time = 0
def start(self, id):
- self.start_time = time.clock()
+ self.start_time = time.process_time()
def stop(self, id):
- if os.name == "nt":
- cpu_time = 0
- else:
- cpu_time = time.clock() - self.start_time
- self.result.record(id, cpu_time)
+ process_time = time.process_time() - self.start_time
+ self.result.record(id, process_time)
class MeasurementWallTime(Measurement):
diff --git a/gdb/testsuite/gdb.perf/lib/perftest/perftest.py b/gdb/testsuite/gdb.perf/lib/perftest/perftest.py
index 0726641..202ba3f 100644
--- a/gdb/testsuite/gdb.perf/lib/perftest/perftest.py
+++ b/gdb/testsuite/gdb.perf/lib/perftest/perftest.py
@@ -18,7 +18,8 @@ from __future__ import absolute_import
import perftest.testresult as testresult
import perftest.reporter as reporter
from perftest.measure import Measure
-from perftest.measure import MeasurementCpuTime
+from perftest.measure import MeasurementPerfCounter
+from perftest.measure import MeasurementProcessTime
from perftest.measure import MeasurementWallTime
from perftest.measure import MeasurementVmSize
@@ -72,7 +73,8 @@ class TestCaseWithBasicMeasurements(TestCase):
def __init__(self, name):
result_factory = testresult.SingleStatisticResultFactory()
measurements = [
- MeasurementCpuTime(result_factory.create_result()),
+ MeasurementPerfCounter(result_factory.create_result()),
+ MeasurementProcessTime(result_factory.create_result()),
MeasurementWallTime(result_factory.create_result()),
MeasurementVmSize(result_factory.create_result()),
]