| Index: base/trace_event/trace_event_unittest.cc
|
| diff --git a/base/trace_event/trace_event_unittest.cc b/base/trace_event/trace_event_unittest.cc
|
| index ace98fdf6e837c679a93cb87e3eb099f4dea6c6c..4cde6834625c916e432ae8df9a8fa5e646baa35d 100644
|
| --- a/base/trace_event/trace_event_unittest.cc
|
| +++ b/base/trace_event/trace_event_unittest.cc
|
| @@ -3222,30 +3222,118 @@ class TestEventFilter : public TraceLog::TraceEventFilter {
|
| public:
|
| bool FilterTraceEvent(const TraceEvent& trace_event) const override {
|
| filter_trace_event_hit_count_++;
|
| - return true;
|
| + return filter_return_value_;
|
| }
|
|
|
| void EndEvent(const char* category_group, const char* name) override {
|
| end_event_hit_count_++;
|
| }
|
|
|
| + static void set_filter_return_value(bool value) {
|
| + filter_return_value_ = value;
|
| + }
|
| +
|
| static size_t filter_trace_event_hit_count() {
|
| return filter_trace_event_hit_count_;
|
| }
|
| static size_t end_event_hit_count() { return end_event_hit_count_; }
|
|
|
| + static void clear_counts() {
|
| + filter_trace_event_hit_count_ = 0;
|
| + end_event_hit_count_ = 0;
|
| + }
|
| +
|
| private:
|
| static size_t filter_trace_event_hit_count_;
|
| static size_t end_event_hit_count_;
|
| + static bool filter_return_value_;
|
| };
|
|
|
| size_t TestEventFilter::filter_trace_event_hit_count_ = 0;
|
| size_t TestEventFilter::end_event_hit_count_ = 0;
|
| +bool TestEventFilter::filter_return_value_ = false;
|
|
|
| std::unique_ptr<TraceLog::TraceEventFilter> ConstructTestEventFilter() {
|
| return WrapUnique(new TestEventFilter);
|
| }
|
|
|
| +TEST_F(TraceEventTestFixture, TraceFilteringMode) {
|
| + const char config_json[] =
|
| + "{"
|
| + " \"event_filters\": ["
|
| + " {"
|
| + " \"filter_predicate\": \"testing_predicate\", "
|
| + " \"included_categories\": [\"*\"]"
|
| + " }"
|
| + " ]"
|
| + "}";
|
| +
|
| + // Run RECORDING_MODE within FILTERING_MODE.
|
| + TestEventFilter::set_filter_return_value(true);
|
| + TraceLog::SetTraceEventFilterConstructorForTesting(ConstructTestEventFilter);
|
| + TraceLog::GetInstance()->SetEnabled(TraceConfig(config_json),
|
| + TraceLog::FILTERING_MODE);
|
| + EXPECT_EQ(TraceLog::FILTERING_MODE, TraceLog::GetInstance()->mode_);
|
| + {
|
| + void* ptr = this;
|
| + TRACE_EVENT0("c0", "name0");
|
| + TRACE_EVENT_ASYNC_BEGIN0("c1", "name1", ptr);
|
| + TRACE_EVENT_INSTANT0("c0", "name0", TRACE_EVENT_SCOPE_THREAD);
|
| + TRACE_EVENT_ASYNC_END0("c1", "name1", ptr);
|
| + }
|
| + TraceLog::GetInstance()->SetEnabled(TraceConfig("", ""),
|
| + TraceLog::RECORDING_MODE);
|
| + EXPECT_EQ(TraceLog::RECORDING_MODE | TraceLog::FILTERING_MODE,
|
| + TraceLog::GetInstance()->mode_);
|
| + { TRACE_EVENT0("c2", "name2"); }
|
| + TraceLog::GetInstance()->SetDisabled();
|
| + EXPECT_EQ(TraceLog::FILTERING_MODE, TraceLog::GetInstance()->mode_);
|
| + { TRACE_EVENT0("c0", "name0"); }
|
| + TraceLog::GetInstance()->SetDisabled(TraceLog::FILTERING_MODE);
|
| + EXPECT_EQ(0, TraceLog::GetInstance()->mode_);
|
| +
|
| + EndTraceAndFlush();
|
| + EXPECT_FALSE(FindMatchingValue("cat", "c0"));
|
| + EXPECT_FALSE(FindMatchingValue("cat", "c1"));
|
| + EXPECT_FALSE(FindMatchingValue("name", "name0"));
|
| + EXPECT_FALSE(FindMatchingValue("name", "name1"));
|
| + EXPECT_TRUE(FindMatchingValue("cat", "c2"));
|
| + EXPECT_TRUE(FindMatchingValue("name", "name2"));
|
| + EXPECT_EQ(6u, TestEventFilter::filter_trace_event_hit_count());
|
| + EXPECT_EQ(3u, TestEventFilter::end_event_hit_count());
|
| + Clear();
|
| + TestEventFilter::clear_counts();
|
| +
|
| + // Run FILTERING_MODE within RECORDING_MODE.
|
| + TestEventFilter::set_filter_return_value(false);
|
| + TraceLog::GetInstance()->SetEnabled(TraceConfig("", ""),
|
| + TraceLog::RECORDING_MODE);
|
| + EXPECT_EQ(TraceLog::RECORDING_MODE, TraceLog::GetInstance()->mode_);
|
| + { TRACE_EVENT0("c0", "name0"); }
|
| + TraceLog::GetInstance()->SetEnabled(TraceConfig(config_json),
|
| + TraceLog::FILTERING_MODE);
|
| + EXPECT_EQ(TraceLog::RECORDING_MODE | TraceLog::FILTERING_MODE,
|
| + TraceLog::GetInstance()->mode_);
|
| + { TRACE_EVENT0("c1", "name1"); }
|
| + TraceLog::GetInstance()->SetDisabled(TraceLog::FILTERING_MODE);
|
| + EXPECT_EQ(TraceLog::RECORDING_MODE, TraceLog::GetInstance()->mode_);
|
| + { TRACE_EVENT0("c2", "name2"); }
|
| + TraceLog::GetInstance()->SetDisabled();
|
| + EXPECT_EQ(0, TraceLog::GetInstance()->mode_);
|
| +
|
| + EndTraceAndFlush();
|
| + EXPECT_TRUE(FindMatchingValue("cat", "c0"));
|
| + EXPECT_TRUE(FindMatchingValue("cat", "c2"));
|
| + EXPECT_TRUE(FindMatchingValue("name", "name0"));
|
| + EXPECT_TRUE(FindMatchingValue("name", "name2"));
|
| + EXPECT_FALSE(FindMatchingValue("cat", "c1"));
|
| + EXPECT_FALSE(FindMatchingValue("name", "name1"));
|
| + EXPECT_EQ(1u, TestEventFilter::filter_trace_event_hit_count());
|
| + EXPECT_EQ(1u, TestEventFilter::end_event_hit_count());
|
| + Clear();
|
| + TestEventFilter::clear_counts();
|
| +}
|
| +
|
| TEST_F(TraceEventTestFixture, EventFiltering) {
|
| const char config_json[] =
|
| "{"
|
| @@ -3261,6 +3349,7 @@ TEST_F(TraceEventTestFixture, EventFiltering) {
|
| " ]"
|
| "}";
|
|
|
| + TestEventFilter::set_filter_return_value(true);
|
| TraceLog::SetTraceEventFilterConstructorForTesting(ConstructTestEventFilter);
|
| TraceConfig trace_config(config_json);
|
| TraceLog::GetInstance()->SetEnabled(trace_config, TraceLog::RECORDING_MODE);
|
| @@ -3277,6 +3366,7 @@ TEST_F(TraceEventTestFixture, EventFiltering) {
|
|
|
| EXPECT_EQ(3u, TestEventFilter::filter_trace_event_hit_count());
|
| EXPECT_EQ(1u, TestEventFilter::end_event_hit_count());
|
| + TestEventFilter::clear_counts();
|
| }
|
|
|
| TEST_F(TraceEventTestFixture, EventWhitelistFiltering) {
|
|
|