summaryrefslogtreecommitdiff
path: root/simpleperf
diff options
context:
space:
mode:
authorYabin Cui <yabinc@google.com>2024-04-17 17:39:23 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2024-04-17 17:39:23 +0000
commitf7d8406bac7c01bf0f2e1f3e7d0a194877fa7879 (patch)
tree0b81fd3c80c9d3bac472020bc1c12c45ff83e0e3 /simpleperf
parent8da16c26aeb461787c4f9ea9c14c1c01f90a1be1 (diff)
parentf41d0fd77b625cdff3361a8703567d9c4517753e (diff)
downloadextras-f7d8406bac7c01bf0f2e1f3e7d0a194877fa7879.tar.gz
Merge changes I6905e8b5,I194a387c,Ia80fac97 into main
* changes: simpleperf: Check sched:sched_switch event in HasTracepointEvents simpleperf: Handle empty string in TracepointStringFinder simpleperf: skip checking tracepoint events in the list cmd
Diffstat (limited to 'simpleperf')
-rw-r--r--simpleperf/cmd_list.cpp4
-rw-r--r--simpleperf/event_type.cpp6
-rw-r--r--simpleperf/event_type.h1
-rw-r--r--simpleperf/test_util.cpp7
4 files changed, 14 insertions, 4 deletions
diff --git a/simpleperf/cmd_list.cpp b/simpleperf/cmd_list.cpp
index 963259d1..926b7f7e 100644
--- a/simpleperf/cmd_list.cpp
+++ b/simpleperf/cmd_list.cpp
@@ -246,8 +246,8 @@ static void PrintRawEventTypes(const std::string& type_desc) {
}
static bool IsEventTypeSupported(const EventType& event_type) {
- // Because PMU events are provided by kernel, we assume it's supported.
- if (event_type.IsPmuEvent()) {
+ // PMU and tracepoint events are provided by kernel. So we assume they're supported.
+ if (event_type.IsPmuEvent() || event_type.IsTracepointEvent()) {
return true;
}
perf_event_attr attr = CreateDefaultPerfEventAttr(event_type);
diff --git a/simpleperf/event_type.cpp b/simpleperf/event_type.cpp
index 0d10d12d..d8379141 100644
--- a/simpleperf/event_type.cpp
+++ b/simpleperf/event_type.cpp
@@ -104,7 +104,11 @@ class TracepointStringFinder : public EventTypeFinder {
protected:
void LoadTypes() override {
for (const auto& line : android::base::Split(s_, "\n")) {
- std::vector<std::string> items = android::base::Split(line, " ");
+ std::string str = android::base::Trim(line);
+ if (str.empty()) {
+ continue;
+ }
+ std::vector<std::string> items = android::base::Split(str, " ");
CHECK_EQ(items.size(), 2u);
std::string event_name = items[0];
uint64_t id;
diff --git a/simpleperf/event_type.h b/simpleperf/event_type.h
index 14863caa..d85f71d1 100644
--- a/simpleperf/event_type.h
+++ b/simpleperf/event_type.h
@@ -55,6 +55,7 @@ struct EventType {
bool IsHardwareEvent() const {
return type == PERF_TYPE_HARDWARE || type == PERF_TYPE_HW_CACHE || type == PERF_TYPE_RAW;
}
+ bool IsTracepointEvent() const { return type == PERF_TYPE_TRACEPOINT; }
std::vector<int> GetPmuCpumask();
diff --git a/simpleperf/test_util.cpp b/simpleperf/test_util.cpp
index 9ac4e46b..42dee703 100644
--- a/simpleperf/test_util.cpp
+++ b/simpleperf/test_util.cpp
@@ -176,7 +176,12 @@ bool HasPmuCounter() {
bool HasTracepointEvents() {
static int has_tracepoint_events = -1;
if (has_tracepoint_events == -1) {
- has_tracepoint_events = (GetTraceFsDir() != nullptr) ? 1 : 0;
+ has_tracepoint_events = 0;
+ if (const char* dir = GetTraceFsDir(); dir != nullptr) {
+ if (IsDir(std::string(dir) + "/events/sched/sched_switch")) {
+ has_tracepoint_events = 1;
+ }
+ }
}
return has_tracepoint_events == 1;
}