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
parent
1fef390ad7
commit
dbc9467ca3
|
|
@ -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(), {});
|
||||
|
|
|
|||
Loading…
Reference in New Issue