Index: base/debug/trace_event_unittest.cc |
diff --git a/base/debug/trace_event_unittest.cc b/base/debug/trace_event_unittest.cc |
index a5c889f5608f4f7758174ac835a3af64e9beb60b..f18704d73427c6654a98d4408d399956df6b30d0 100644 |
--- a/base/debug/trace_event_unittest.cc |
+++ b/base/debug/trace_event_unittest.cc |
@@ -6,6 +6,7 @@ |
#include "base/bind.h" |
#include "base/command_line.h" |
+#include "base/debug/trace_event_test_utils.h" |
#include "base/json/json_reader.h" |
#include "base/json/json_writer.h" |
#include "base/memory/ref_counted_memory.h" |
@@ -406,6 +407,110 @@ TEST_F(TraceEventTestFixture, DataCaptured) { |
ValidateAllTraceMacrosCreatedData(trace_parsed_, trace_string_); |
} |
+// Test that the TraceAnalyzer works. |
+TEST_F(TraceEventTestFixture, TraceAnalyzer) { |
+ using namespace base::debug::trace; |
+ ManualTestSetUp(); |
+ |
+ Clear(); |
+ TraceLog::GetInstance()->SetEnabled(true); |
+ { |
+ TRACE_EVENT_END0("cat3", "name7"); |
+ TRACE_EVENT2("cat1", "name1", "arg1", 1111, "arg2", "string1"); |
+ { |
+ TRACE_EVENT2("cat2", "name2", "arg1", 2222, "arg2", "string2"); |
+ TRACE_EVENT_INSTANT1("cat1", "name3", "arg1", 3333); |
+ base::PlatformThread::Sleep(200); |
+ TRACE_EVENT0("cat2", "name6"); |
+ } |
+ TRACE_EVENT_INSTANT1("cat2", "name4", "arg1", 4444); |
+ TRACE_EVENT_INSTANT1("cat2", "name5", "arg1", 1111); |
+ TRACE_EVENT_BEGIN0("cat3", "name7"); |
+ } |
+ TraceLog::GetInstance()->SetEnabled(false); |
+ |
+ const TestTraceEvent* event = NULL; |
+ TraceAnalyzer analyzer; |
+ analyzer.SetEvents(trace_string_); |
+ |
+ TraceAnalyzer::ConstEventPtrVector found; |
+ analyzer.FindEvents(Query(EVENT_CATEGORY) == "cat1", &found); |
+ EXPECT_EQ(3u, found.size()); |
+ |
+ found.clear(); |
+ analyzer.FindEvents(Query(EVENT_CATEGORY) == "cat1" && |
+ Query(EVENT_ARG, "arg1") == 1111, &found); |
+ ASSERT_EQ(1u, found.size()); |
+ EXPECT_STREQ("name1", found.front()->name.c_str()); |
+ |
+ found.clear(); |
+ analyzer.FindEvents(Query(EVENT_ARG, "arg1") == 1111 || |
+ Query(EVENT_ARG, "arg1") == 2222, &found); |
+ EXPECT_EQ(3u, found.size()); |
+ |
+ found.clear(); |
+ analyzer.FindEvents(Query(EVENT_ARG, "arg1") == 1111 && |
+ Query(EVENT_NAME) != "name1", &found); |
+ ASSERT_EQ(1u, found.size()); |
+ EXPECT_STREQ("name5", found.front()->name.c_str()); |
+ |
+ found.clear(); |
+ analyzer.FindEvents(Query(EVENT_ARG, "arg1") == 1111 && |
+ !(Query(EVENT_NAME) != "name1"), &found); |
+ ASSERT_EQ(1u, found.size()); |
+ EXPECT_STREQ("name1", found.front()->name.c_str()); |
+ |
+ found.clear(); |
+ analyzer.FindEvents(Query::MatchBeginWithEnd() && |
+ Query(EVENT_DURATION) > 180000 && |
+ (Query(EVENT_CATEGORY) == "cat1" || |
+ Query(EVENT_CATEGORY) == "cat2" || |
+ Query(EVENT_CATEGORY) == "cat3"), &found); |
+ EXPECT_EQ(2u, found.size()); |
+ |
+ found.clear(); |
+ analyzer.FindEvents(Query(EVENT_ARG, "arg1") <= 3333, &found); |
+ EXPECT_EQ(4u, found.size()); |
+ |
+ found.clear(); |
+ analyzer.FindEvents(Query(EVENT_ARG, "arg1") >= 3333, &found); |
+ EXPECT_EQ(2u, found.size()); |
+ |
+ found.clear(); |
+ analyzer.FindEvents(Query(EVENT_HAS_ARG, "arg1"), &found); |
+ EXPECT_EQ(5u, found.size()); |
+ |
+ found.clear(); |
+ analyzer.FindEvents(Query(EVENT_ARG, "arg2") == "string1", &found); |
+ ASSERT_EQ(1u, found.size()); |
+ EXPECT_STREQ("name1", found.front()->name.c_str()); |
+ |
+ found.clear(); |
+ analyzer.FindEvents(Query(EVENT_ARG, "arg2") == Query::Pattern("string?"), |
+ &found); |
+ EXPECT_EQ(2u, found.size()); |
+ |
+ found.clear(); |
+ analyzer.FindEvents(Query(EVENT_CATEGORY) == Query::Pattern("cat?") && |
+ Query(EVENT_NAME) != Query::Pattern("*"), |
+ &found); |
+ EXPECT_EQ(0u, found.size()); |
+ |
+ found.clear(); |
+ analyzer.FindEvents(!Query(EVENT_HAS_OTHER) && |
+ Query(EVENT_CATEGORY) == "cat2", &found); |
+ EXPECT_EQ(2u, found.size()); |
+ |
+ event = analyzer.FindEvent(Query(OTHER_ARG, "arg1") == 1111); |
+ ASSERT_TRUE(event); |
+ EXPECT_STREQ("name1", event->name.c_str()); |
+ |
+ // Verify that matching END..BEGIN does not get associated. |
+ ASSERT_TRUE(!analyzer.FindEvent(Query::MatchBeginName("name7"))); |
+ |
+ ASSERT_TRUE(!analyzer.FindEvent(Query(EVENT_ARG, "arg1") < 1111)); |
+} |
+ |
// Test that categories work. |
TEST_F(TraceEventTestFixture, Categories) { |
ManualTestSetUp(); |