| Index: base/test/trace_event_analyzer_unittest.cc
|
| diff --git a/base/test/trace_event_analyzer_unittest.cc b/base/test/trace_event_analyzer_unittest.cc
|
| index 96f804534f817f8640d261f8f2bca4859697bb40..602f139880332e92264932ef9013554fa7b0d2c1 100644
|
| --- a/base/test/trace_event_analyzer_unittest.cc
|
| +++ b/base/test/trace_event_analyzer_unittest.cc
|
| @@ -65,7 +65,7 @@ TEST_F(TraceEventAnalyzerTest, NoEvents) {
|
| ASSERT_TRUE(analyzer.get());
|
|
|
| // Search for all events and verify that nothing is returned.
|
| - TraceAnalyzer::TraceEventVector found;
|
| + TraceEventVector found;
|
| analyzer->FindEvents(Query::Bool(true), &found);
|
| EXPECT_EQ(0u, found.size());
|
| }
|
| @@ -221,7 +221,7 @@ TEST_F(TraceEventAnalyzerTest, BooleanOperators) {
|
| analyzer(TraceAnalyzer::Create(output_.json_output));
|
| ASSERT_TRUE(!!analyzer.get());
|
|
|
| - TraceAnalyzer::TraceEventVector found;
|
| + TraceEventVector found;
|
|
|
| // ==
|
|
|
| @@ -308,7 +308,7 @@ TEST_F(TraceEventAnalyzerTest, ArithmeticOperators) {
|
| analyzer(TraceAnalyzer::Create(output_.json_output));
|
| ASSERT_TRUE(analyzer.get());
|
|
|
| - TraceAnalyzer::TraceEventVector found;
|
| + TraceEventVector found;
|
|
|
| // Verify that arithmetic operators function:
|
|
|
| @@ -364,7 +364,7 @@ TEST_F(TraceEventAnalyzerTest, StringPattern) {
|
| analyzer(TraceAnalyzer::Create(output_.json_output));
|
| ASSERT_TRUE(analyzer.get());
|
|
|
| - TraceAnalyzer::TraceEventVector found;
|
| + TraceEventVector found;
|
|
|
| analyzer->FindEvents(Query(EVENT_NAME) == Query::Pattern("name?"), &found);
|
| ASSERT_EQ(2u, found.size());
|
| @@ -410,7 +410,7 @@ TEST_F(TraceEventAnalyzerTest, Duration) {
|
| ASSERT_TRUE(analyzer.get());
|
| analyzer->AssociateBeginEndEvents();
|
|
|
| - TraceAnalyzer::TraceEventVector found;
|
| + TraceEventVector found;
|
| analyzer->FindEvents(Query::MatchBeginWithEnd() &&
|
| Query(EVENT_DURATION) > Query::Int(duration_cutoff_us) &&
|
| (Query(EVENT_CATEGORY) == Query::String("cat1") ||
|
| @@ -440,12 +440,41 @@ TEST_F(TraceEventAnalyzerTest, BeginEndAssocations) {
|
| ASSERT_TRUE(analyzer.get());
|
| analyzer->AssociateBeginEndEvents();
|
|
|
| - TraceAnalyzer::TraceEventVector found;
|
| + TraceEventVector found;
|
| analyzer->FindEvents(Query::MatchBeginWithEnd(), &found);
|
| ASSERT_EQ(1u, found.size());
|
| EXPECT_STREQ("name2", found[0]->name.c_str());
|
| }
|
|
|
| +// Test MergeAssociatedEventArgs
|
| +TEST_F(TraceEventAnalyzerTest, MergeAssociatedEventArgs) {
|
| + using namespace trace_analyzer;
|
| + ManualSetUp();
|
| +
|
| + const char* arg_string = "arg_string";
|
| + BeginTracing();
|
| + {
|
| + TRACE_EVENT1("cat1", "name1", "arg", arg_string);
|
| + }
|
| + EndTracing();
|
| +
|
| + scoped_ptr<TraceAnalyzer>
|
| + analyzer(TraceAnalyzer::Create(output_.json_output));
|
| + ASSERT_TRUE(analyzer.get());
|
| + analyzer->AssociateBeginEndEvents();
|
| +
|
| + TraceEventVector found;
|
| + analyzer->FindEvents(Query(EVENT_NAME) == Query::String("name1") &&
|
| + Query(EVENT_PHASE) == Query::Phase(TRACE_EVENT_PHASE_END), &found);
|
| + ASSERT_EQ(1u, found.size());
|
| + std::string arg_actual;
|
| + EXPECT_FALSE(found[0]->GetArgAsString("arg", &arg_actual));
|
| +
|
| + analyzer->MergeAssociatedEventArgs();
|
| + EXPECT_TRUE(found[0]->GetArgAsString("arg", &arg_actual));
|
| + EXPECT_STREQ(arg_string, arg_actual.c_str());
|
| +}
|
| +
|
| // Test AssociateStartFinishEvents
|
| TEST_F(TraceEventAnalyzerTest, StartFinishAssocations) {
|
| using namespace trace_analyzer;
|
| @@ -469,7 +498,7 @@ TEST_F(TraceEventAnalyzerTest, StartFinishAssocations) {
|
| ASSERT_TRUE(analyzer.get());
|
| analyzer->AssociateStartFinishEvents();
|
|
|
| - TraceAnalyzer::TraceEventVector found;
|
| + TraceEventVector found;
|
| analyzer->FindEvents(Query::MatchStartWithFinish(), &found);
|
| ASSERT_EQ(2u, found.size());
|
| EXPECT_STRCASEEQ("B", found[0]->id.c_str());
|
| @@ -504,7 +533,7 @@ TEST_F(TraceEventAnalyzerTest, CustomAssociations) {
|
| Query match(Query(EVENT_ARG, "id") == Query(OTHER_ARG, "id"));
|
| analyzer->AssociateEvents(begin, end, match);
|
|
|
| - TraceAnalyzer::TraceEventVector found;
|
| + TraceEventVector found;
|
|
|
| // cat1 has no other_event.
|
| analyzer->FindEvents(Query(EVENT_CATEGORY) == Query::String("cat1") &&
|
| @@ -570,12 +599,12 @@ TEST_F(TraceEventAnalyzerTest, RateStats) {
|
|
|
| std::vector<TraceEvent> events;
|
| events.reserve(100);
|
| - TraceAnalyzer::TraceEventVector event_ptrs;
|
| + TraceEventVector event_ptrs;
|
| TraceEvent event;
|
| event.timestamp = 0.0;
|
| double little_delta = 1.0;
|
| double big_delta = 10.0;
|
| - TraceAnalyzer::Stats stats;
|
| + RateStats stats;
|
|
|
| for (int i = 0; i < 10; ++i) {
|
| event.timestamp += little_delta;
|
| @@ -583,7 +612,7 @@ TEST_F(TraceEventAnalyzerTest, RateStats) {
|
| event_ptrs.push_back(&events.back());
|
| }
|
|
|
| - ASSERT_TRUE(TraceAnalyzer::GetRateStats(event_ptrs, &stats));
|
| + ASSERT_TRUE(GetRateStats(event_ptrs, &stats));
|
| EXPECT_EQ(little_delta, stats.mean_us);
|
| EXPECT_EQ(little_delta, stats.min_us);
|
| EXPECT_EQ(little_delta, stats.max_us);
|
| @@ -593,18 +622,138 @@ TEST_F(TraceEventAnalyzerTest, RateStats) {
|
| events.push_back(event);
|
| event_ptrs.push_back(&events.back());
|
|
|
| - ASSERT_TRUE(TraceAnalyzer::GetRateStats(event_ptrs, &stats));
|
| + ASSERT_TRUE(GetRateStats(event_ptrs, &stats));
|
| EXPECT_LT(little_delta, stats.mean_us);
|
| EXPECT_EQ(little_delta, stats.min_us);
|
| EXPECT_EQ(big_delta, stats.max_us);
|
| EXPECT_LT(0.0, stats.standard_deviation_us);
|
|
|
| - TraceAnalyzer::TraceEventVector few_event_ptrs;
|
| + TraceEventVector few_event_ptrs;
|
| few_event_ptrs.push_back(&event);
|
| few_event_ptrs.push_back(&event);
|
| - ASSERT_FALSE(TraceAnalyzer::GetRateStats(few_event_ptrs, &stats));
|
| + ASSERT_FALSE(GetRateStats(few_event_ptrs, &stats));
|
| few_event_ptrs.push_back(&event);
|
| - ASSERT_TRUE(TraceAnalyzer::GetRateStats(few_event_ptrs, &stats));
|
| + ASSERT_TRUE(GetRateStats(few_event_ptrs, &stats));
|
| +}
|
| +
|
| +// Test FindFirstOf and FindLastOf.
|
| +TEST_F(TraceEventAnalyzerTest, FindOf) {
|
| + using namespace trace_analyzer;
|
| +
|
| + size_t num_events = 100;
|
| + size_t index = 0;
|
| + TraceEventVector event_ptrs;
|
| + EXPECT_FALSE(FindFirstOf(event_ptrs, Query::Bool(true), 0, &index));
|
| + EXPECT_FALSE(FindFirstOf(event_ptrs, Query::Bool(true), 10, &index));
|
| + EXPECT_FALSE(FindLastOf(event_ptrs, Query::Bool(true), 0, &index));
|
| + EXPECT_FALSE(FindLastOf(event_ptrs, Query::Bool(true), 10, &index));
|
| +
|
| + std::vector<TraceEvent> events;
|
| + events.resize(num_events);
|
| + for (size_t i = 0; i < events.size(); ++i)
|
| + event_ptrs.push_back(&events[i]);
|
| + size_t bam_index = num_events/2;
|
| + events[bam_index].name = "bam";
|
| + Query query_bam = Query(EVENT_NAME) == Query::String(events[bam_index].name);
|
| +
|
| + // FindFirstOf
|
| + EXPECT_FALSE(FindFirstOf(event_ptrs, Query::Bool(false), 0, &index));
|
| + EXPECT_TRUE(FindFirstOf(event_ptrs, Query::Bool(true), 0, &index));
|
| + EXPECT_EQ(0u, index);
|
| + EXPECT_TRUE(FindFirstOf(event_ptrs, Query::Bool(true), 5, &index));
|
| + EXPECT_EQ(5u, index);
|
| +
|
| + EXPECT_FALSE(FindFirstOf(event_ptrs, query_bam, bam_index + 1, &index));
|
| + EXPECT_TRUE(FindFirstOf(event_ptrs, query_bam, 0, &index));
|
| + EXPECT_EQ(bam_index, index);
|
| + EXPECT_TRUE(FindFirstOf(event_ptrs, query_bam, bam_index, &index));
|
| + EXPECT_EQ(bam_index, index);
|
| +
|
| + // FindLastOf
|
| + EXPECT_FALSE(FindLastOf(event_ptrs, Query::Bool(false), 1000, &index));
|
| + EXPECT_TRUE(FindLastOf(event_ptrs, Query::Bool(true), 1000, &index));
|
| + EXPECT_EQ(num_events - 1, index);
|
| + EXPECT_TRUE(FindLastOf(event_ptrs, Query::Bool(true), num_events - 5,
|
| + &index));
|
| + EXPECT_EQ(num_events - 5, index);
|
| +
|
| + EXPECT_FALSE(FindLastOf(event_ptrs, query_bam, bam_index - 1, &index));
|
| + EXPECT_TRUE(FindLastOf(event_ptrs, query_bam, num_events, &index));
|
| + EXPECT_EQ(bam_index, index);
|
| + EXPECT_TRUE(FindLastOf(event_ptrs, query_bam, bam_index, &index));
|
| + EXPECT_EQ(bam_index, index);
|
| +}
|
| +
|
| +// Test FindClosest.
|
| +TEST_F(TraceEventAnalyzerTest, FindClosest) {
|
| + using namespace trace_analyzer;
|
| +
|
| + size_t index_1 = 0;
|
| + size_t index_2 = 0;
|
| + TraceEventVector event_ptrs;
|
| + EXPECT_FALSE(FindClosest(event_ptrs, Query::Bool(true), 0,
|
| + &index_1, &index_2));
|
| +
|
| + size_t num_events = 5;
|
| + std::vector<TraceEvent> events;
|
| + events.resize(num_events);
|
| + for (size_t i = 0; i < events.size(); ++i) {
|
| + // timestamps go up exponentially so the lower index is always closer in
|
| + // time than the higher index.
|
| + events[i].timestamp = static_cast<double>(i) * static_cast<double>(i);
|
| + event_ptrs.push_back(&events[i]);
|
| + }
|
| + events[0].name = "one";
|
| + events[2].name = "two";
|
| + events[4].name = "three";
|
| + Query query_named = Query(EVENT_NAME) != Query::String("");
|
| + Query query_one = Query(EVENT_NAME) == Query::String("one");
|
| +
|
| + // Only one event matches query_one, so two closest can't be found.
|
| + EXPECT_FALSE(FindClosest(event_ptrs, query_one, 0, &index_1, &index_2));
|
| +
|
| + EXPECT_TRUE(FindClosest(event_ptrs, query_one, 3, &index_1, NULL));
|
| + EXPECT_EQ(0u, index_1);
|
| +
|
| + EXPECT_TRUE(FindClosest(event_ptrs, query_named, 1, &index_1, &index_2));
|
| + EXPECT_EQ(0u, index_1);
|
| + EXPECT_EQ(2u, index_2);
|
| +
|
| + EXPECT_TRUE(FindClosest(event_ptrs, query_named, 4, &index_1, &index_2));
|
| + EXPECT_EQ(4u, index_1);
|
| + EXPECT_EQ(2u, index_2);
|
| +
|
| + EXPECT_TRUE(FindClosest(event_ptrs, query_named, 3, &index_1, &index_2));
|
| + EXPECT_EQ(2u, index_1);
|
| + EXPECT_EQ(0u, index_2);
|
| +}
|
| +
|
| +// Test CountMatches.
|
| +TEST_F(TraceEventAnalyzerTest, CountMatches) {
|
| + using namespace trace_analyzer;
|
| +
|
| + TraceEventVector event_ptrs;
|
| + EXPECT_EQ(0u, CountMatches(event_ptrs, Query::Bool(true), 0, 10));
|
| +
|
| + size_t num_events = 5;
|
| + size_t num_named = 3;
|
| + std::vector<TraceEvent> events;
|
| + events.resize(num_events);
|
| + for (size_t i = 0; i < events.size(); ++i)
|
| + event_ptrs.push_back(&events[i]);
|
| + events[0].name = "one";
|
| + events[2].name = "two";
|
| + events[4].name = "three";
|
| + Query query_named = Query(EVENT_NAME) != Query::String("");
|
| + Query query_one = Query(EVENT_NAME) == Query::String("one");
|
| +
|
| + EXPECT_EQ(0u, CountMatches(event_ptrs, Query::Bool(false)));
|
| + EXPECT_EQ(num_events, CountMatches(event_ptrs, Query::Bool(true)));
|
| + EXPECT_EQ(num_events - 1, CountMatches(event_ptrs, Query::Bool(true),
|
| + 1, num_events));
|
| + EXPECT_EQ(1u, CountMatches(event_ptrs, query_one));
|
| + EXPECT_EQ(num_events - 1, CountMatches(event_ptrs, !query_one));
|
| + EXPECT_EQ(num_named, CountMatches(event_ptrs, query_named));
|
| }
|
|
|
|
|
|
|