diff options
author | Yabin Cui <yabinc@google.com> | 2024-04-17 17:39:23 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2024-04-17 17:39:23 +0000 |
commit | f7d8406bac7c01bf0f2e1f3e7d0a194877fa7879 (patch) | |
tree | 0b81fd3c80c9d3bac472020bc1c12c45ff83e0e3 /simpleperf | |
parent | 8da16c26aeb461787c4f9ea9c14c1c01f90a1be1 (diff) | |
parent | f41d0fd77b625cdff3361a8703567d9c4517753e (diff) | |
download | extras-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.cpp | 4 | ||||
-rw-r--r-- | simpleperf/event_type.cpp | 6 | ||||
-rw-r--r-- | simpleperf/event_type.h | 1 | ||||
-rw-r--r-- | simpleperf/test_util.cpp | 7 |
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; } |