diff options
Diffstat (limited to 'simpleperf/RecordFilter_test.cpp')
-rw-r--r-- | simpleperf/RecordFilter_test.cpp | 127 |
1 files changed, 5 insertions, 122 deletions
diff --git a/simpleperf/RecordFilter_test.cpp b/simpleperf/RecordFilter_test.cpp index 3099e452..b131ed9b 100644 --- a/simpleperf/RecordFilter_test.cpp +++ b/simpleperf/RecordFilter_test.cpp @@ -34,7 +34,7 @@ class RecordFilterTest : public ::testing::Test { void SetUp() override { const EventType* event_type = FindEventTypeByName("cpu-clock"); attr = CreateDefaultPerfEventAttr(*event_type); - record.reset(new SampleRecord(attr, 0, 0, 0, 0, 0, 0, 0, {}, {}, {}, 0)); + record.reset(new SampleRecord(attr, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0)); } SampleRecord* GetRecord(uint32_t pid, uint32_t tid) { @@ -43,11 +43,6 @@ class RecordFilterTest : public ::testing::Test { return record.get(); } - bool SetFilterData(const std::string& data) { - TemporaryFile tmpfile; - return android::base::WriteStringToFd(data, tmpfile.fd) && filter.SetFilterFile(tmpfile.path); - } - ThreadTree thread_tree; perf_event_attr attr; RecordFilter filter; @@ -88,7 +83,7 @@ TEST_F(RecordFilterTest, exclude_thread_name_regex) { TEST_F(RecordFilterTest, exclude_uid) { pid_t pid = getpid(); - std::optional<uint32_t> uid = GetProcessUid(pid); + std::optional<uid_t> uid = GetProcessUid(pid); ASSERT_TRUE(uid.has_value()); filter.AddUids({uid.value()}, true); ASSERT_FALSE(filter.Check(GetRecord(pid, pid))); @@ -126,7 +121,7 @@ TEST_F(RecordFilterTest, include_thread_name_regex) { TEST_F(RecordFilterTest, include_uid) { pid_t pid = getpid(); - std::optional<uint32_t> uid = GetProcessUid(pid); + std::optional<uid_t> uid = GetProcessUid(pid); ASSERT_TRUE(uid.has_value()); filter.AddUids({uid.value()}, false); ASSERT_TRUE(filter.Check(GetRecord(pid, pid))); @@ -134,118 +129,6 @@ TEST_F(RecordFilterTest, include_uid) { ASSERT_FALSE(filter.Check(GetRecord(pid_not_exist, pid_not_exist))); } -TEST_F(RecordFilterTest, global_time_filter) { - ASSERT_TRUE( - SetFilterData("GLOBAL_BEGIN 1000\n" - "GLOBAL_END 2000\n" - "GLOBAL_BEGIN 3000\n" - "GLOBAL_END 4000")); - SampleRecord* r = GetRecord(1, 1); - r->time_data.time = 0; - ASSERT_FALSE(filter.Check(r)); - r->time_data.time = 999; - ASSERT_FALSE(filter.Check(r)); - r->time_data.time = 1000; - ASSERT_TRUE(filter.Check(r)); - r->time_data.time = 1001; - ASSERT_TRUE(filter.Check(r)); - r->time_data.time = 1999; - ASSERT_TRUE(filter.Check(r)); - r->time_data.time = 2000; - ASSERT_FALSE(filter.Check(r)); - r->time_data.time = 2001; - ASSERT_FALSE(filter.Check(r)); - r->time_data.time = 3000; - ASSERT_TRUE(filter.Check(r)); - r->time_data.time = 4000; - ASSERT_FALSE(filter.Check(r)); -} - -TEST_F(RecordFilterTest, process_time_filter) { - ASSERT_TRUE( - SetFilterData("PROCESS_BEGIN 1 1000\n" - "PROCESS_END 1 2000")); - SampleRecord* r = GetRecord(1, 1); - r->time_data.time = 0; - ASSERT_FALSE(filter.Check(r)); - r->time_data.time = 999; - ASSERT_FALSE(filter.Check(r)); - r->time_data.time = 1000; - ASSERT_TRUE(filter.Check(r)); - r->time_data.time = 1001; - ASSERT_TRUE(filter.Check(r)); - r->time_data.time = 1999; - ASSERT_TRUE(filter.Check(r)); - r->time_data.time = 2000; - ASSERT_FALSE(filter.Check(r)); - // When process time filters are used, not mentioned processes should be filtered. - r->tid_data.pid = 2; - r->time_data.time = 1000; - ASSERT_FALSE(filter.Check(r)); -} - -TEST_F(RecordFilterTest, thread_time_filter) { - ASSERT_TRUE( - SetFilterData("THREAD_BEGIN 1 1000\n" - "THREAD_END 1 2000")); - SampleRecord* r = GetRecord(1, 1); - r->time_data.time = 0; - ASSERT_FALSE(filter.Check(r)); - r->time_data.time = 999; - ASSERT_FALSE(filter.Check(r)); - r->time_data.time = 1000; - ASSERT_TRUE(filter.Check(r)); - r->time_data.time = 1001; - ASSERT_TRUE(filter.Check(r)); - r->time_data.time = 1999; - ASSERT_TRUE(filter.Check(r)); - r->time_data.time = 2000; - ASSERT_FALSE(filter.Check(r)); - // When thread time filters are used, not mentioned threads should be filtered. - r->tid_data.tid = 2; - r->time_data.time = 1000; - ASSERT_FALSE(filter.Check(r)); -} - -TEST_F(RecordFilterTest, clock_in_time_filter) { - // If there is no filter data, any clock is fine. - ASSERT_TRUE(filter.CheckClock("monotonic")); - ASSERT_TRUE(filter.CheckClock("perf")); - // If there is no clock command, monotonic clock is used. - ASSERT_TRUE(SetFilterData("")); - ASSERT_TRUE(filter.CheckClock("monotonic")); - ASSERT_FALSE(filter.CheckClock("perf")); - // If there is a clock command, use that clock. - ASSERT_TRUE(SetFilterData("CLOCK realtime")); - ASSERT_TRUE(filter.CheckClock("realtime")); - ASSERT_FALSE(filter.CheckClock("monotonic")); -} - -TEST_F(RecordFilterTest, error_in_time_filter) { - // no timestamp error - ASSERT_FALSE(SetFilterData("GLOBAL_BEGIN")); - // time range error - ASSERT_FALSE( - SetFilterData("GLOBAL_BEGIN 1000\n" - "GLOBAL_END 999")); - // time range error - ASSERT_FALSE( - SetFilterData("GLOBAL_BEGIN 1000\n" - "GLOBAL_END 1000")); - // no timestamp error - ASSERT_FALSE(SetFilterData("PROCESS_BEGIN 1")); - // time range error - ASSERT_FALSE( - SetFilterData("PROCESS_BEGIN 1 1000\n" - "PROCESS_END 1 999")); - // no timestamp error - ASSERT_FALSE(SetFilterData("THREAD_BEGIN 1")); - // time range error - ASSERT_FALSE( - SetFilterData("THREAD_BEGIN 1 1000\n" - "THREAD_END 1 999")); -} - namespace { class ParseRecordFilterCommand : public Command { @@ -253,7 +136,7 @@ class ParseRecordFilterCommand : public Command { ParseRecordFilterCommand(RecordFilter& filter) : Command("", "", ""), filter_(filter) {} bool Run(const std::vector<std::string>& args) override { - const auto option_formats = GetRecordFilterOptionFormats(true); + const auto& option_formats = GetRecordFilterOptionFormats(); OptionValueMap options; std::vector<std::pair<OptionName, OptionValue>> ordered_options; @@ -296,6 +179,6 @@ TEST_F(RecordFilterTest, parse_options) { ASSERT_TRUE(std::regex_match("threadB", thread_regs[1])); ASSERT_TRUE(filter_cmd.Run({prefix + "uid", "1,2", prefix + "uid", "3"})); - ASSERT_EQ(filter.GetCondition(exclude).uids, std::set<uint32_t>({1, 2, 3})); + ASSERT_EQ(filter.GetCondition(exclude).uids, std::set<uid_t>({1, 2, 3})); } } |