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 <fabian.kosmale@qt.io>
bb10
Thiago Macieira 2022-10-21 14:31:10 -07:00
parent 1fef390ad7
commit dbc9467ca3
1 changed files with 4 additions and 5 deletions

View File

@ -17,8 +17,9 @@
#include <string.h>
#include <stdio.h>
#include <sys/syscall.h>
#include <sys/ioctl.h>
#include <sys/prctl.h>
#include <sys/syscall.h>
#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<QBenchmarkMeasurerBase::Measurement> 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<PerfEvent> &counters = *eventTypes;
QList<Measurement> result(counters.size(), {});