simpleperf: use ioctl to get event fd id.
Currently EventFd uses read() to get id. But it
is affected by event_attr.read_format, which will
change based on record options. So switch to get id
via ioctl.
Bug: 211001523
Test: run simpleperf_unit_test
Change-Id: I4beb9865e357aa77c2522d5a2688b925cbb793e2
diff --git a/simpleperf/event_fd.cpp b/simpleperf/event_fd.cpp
index 0343e15..1afc162 100644
--- a/simpleperf/event_fd.cpp
+++ b/simpleperf/event_fd.cpp
@@ -101,9 +101,8 @@
uint64_t EventFd::Id() const {
if (id_ == 0) {
- PerfCounter counter;
- if (InnerReadCounter(&counter)) {
- id_ = counter.id;
+ if (ioctl(perf_event_fd_, PERF_EVENT_IOC_ID, &id_) != 0) {
+ PLOG(WARNING) << "failed to get id of event_fd";
}
}
return id_;