From dbc9467ca327af9f46fd948ea47de2f96db241c9 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 21 Oct 2022 14:31:10 -0700 Subject: [PATCH] QBenchlib/Perf: use one system call to enable/disable measurements The man page says the prctl() should apply to any performance counters measuring the current process, so it should work with a perf stat started with --delay=-1... but I couldn't make that work. Change-Id: I3c79b7e08fa346988dfefffd172032f06cc10fa0 Reviewed-by: Fabian Kosmale --- src/testlib/qbenchmarkperfevents.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/testlib/qbenchmarkperfevents.cpp b/src/testlib/qbenchmarkperfevents.cpp index 6350c777cd..1b9101e854 100644 --- a/src/testlib/qbenchmarkperfevents.cpp +++ b/src/testlib/qbenchmarkperfevents.cpp @@ -17,8 +17,9 @@ #include #include -#include #include +#include +#include #include "3rdparty/linux_perf_event_p.h" @@ -504,15 +505,13 @@ void QBenchmarkPerfEventsMeasurer::start() // enable the counters for (int fd : std::as_const(fds)) ::ioctl(fd, PERF_EVENT_IOC_RESET); - for (int fd : std::as_const(fds)) - ::ioctl(fd, PERF_EVENT_IOC_ENABLE); + prctl(PR_TASK_PERF_EVENTS_ENABLE); } QList QBenchmarkPerfEventsMeasurer::stop() { // disable the counters - for (int fd : std::as_const(fds)) - ::ioctl(fd, PERF_EVENT_IOC_DISABLE); + prctl(PR_TASK_PERF_EVENTS_DISABLE); const QList &counters = *eventTypes; QList result(counters.size(), {});