OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/test/trace_event_analyzer.h" | 6 #include "base/test/trace_event_analyzer.h" |
7 #include "testing/gmock/include/gmock/gmock.h" | 7 #include "testing/gmock/include/gmock/gmock.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 | 9 |
10 namespace trace_analyzer { | 10 namespace trace_analyzer { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
58 | 58 |
59 // Create an empty JSON event string: | 59 // Create an empty JSON event string: |
60 buffer_.Start(); | 60 buffer_.Start(); |
61 buffer_.Finish(); | 61 buffer_.Finish(); |
62 | 62 |
63 scoped_ptr<TraceAnalyzer> | 63 scoped_ptr<TraceAnalyzer> |
64 analyzer(TraceAnalyzer::Create(output_.json_output)); | 64 analyzer(TraceAnalyzer::Create(output_.json_output)); |
65 ASSERT_TRUE(analyzer.get()); | 65 ASSERT_TRUE(analyzer.get()); |
66 | 66 |
67 // Search for all events and verify that nothing is returned. | 67 // Search for all events and verify that nothing is returned. |
68 TraceAnalyzer::TraceEventVector found; | 68 TraceEventVector found; |
69 analyzer->FindEvents(Query::Bool(true), &found); | 69 analyzer->FindEvents(Query::Bool(true), &found); |
70 EXPECT_EQ(0u, found.size()); | 70 EXPECT_EQ(0u, found.size()); |
71 } | 71 } |
72 | 72 |
73 TEST_F(TraceEventAnalyzerTest, TraceEvent) { | 73 TEST_F(TraceEventAnalyzerTest, TraceEvent) { |
74 using namespace trace_analyzer; | 74 using namespace trace_analyzer; |
75 ManualSetUp(); | 75 ManualSetUp(); |
76 | 76 |
77 int int_num = 2; | 77 int int_num = 2; |
78 double double_num = 3.5; | 78 double double_num = 3.5; |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
214 TRACE_EVENT_INSTANT1("cat1", "name2", "num", 2); | 214 TRACE_EVENT_INSTANT1("cat1", "name2", "num", 2); |
215 TRACE_EVENT_INSTANT1("cat2", "name3", "num", 3); | 215 TRACE_EVENT_INSTANT1("cat2", "name3", "num", 3); |
216 TRACE_EVENT_INSTANT1("cat2", "name4", "num", 4); | 216 TRACE_EVENT_INSTANT1("cat2", "name4", "num", 4); |
217 } | 217 } |
218 EndTracing(); | 218 EndTracing(); |
219 | 219 |
220 scoped_ptr<TraceAnalyzer> | 220 scoped_ptr<TraceAnalyzer> |
221 analyzer(TraceAnalyzer::Create(output_.json_output)); | 221 analyzer(TraceAnalyzer::Create(output_.json_output)); |
222 ASSERT_TRUE(!!analyzer.get()); | 222 ASSERT_TRUE(!!analyzer.get()); |
223 | 223 |
224 TraceAnalyzer::TraceEventVector found; | 224 TraceEventVector found; |
225 | 225 |
226 // == | 226 // == |
227 | 227 |
228 analyzer->FindEvents(Query(EVENT_CATEGORY) == Query::String("cat1"), &found); | 228 analyzer->FindEvents(Query(EVENT_CATEGORY) == Query::String("cat1"), &found); |
229 ASSERT_EQ(2u, found.size()); | 229 ASSERT_EQ(2u, found.size()); |
230 EXPECT_STREQ("name1", found[0]->name.c_str()); | 230 EXPECT_STREQ("name1", found[0]->name.c_str()); |
231 EXPECT_STREQ("name2", found[1]->name.c_str()); | 231 EXPECT_STREQ("name2", found[1]->name.c_str()); |
232 | 232 |
233 analyzer->FindEvents(Query(EVENT_ARG, "num") == Query::Int(2), &found); | 233 analyzer->FindEvents(Query(EVENT_ARG, "num") == Query::Int(2), &found); |
234 ASSERT_EQ(1u, found.size()); | 234 ASSERT_EQ(1u, found.size()); |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
301 // Extra events that never match, for noise: | 301 // Extra events that never match, for noise: |
302 TRACE_EVENT_INSTANT2("noise", "math3", "a", 1, "b", 3); | 302 TRACE_EVENT_INSTANT2("noise", "math3", "a", 1, "b", 3); |
303 TRACE_EVENT_INSTANT2("noise", "math4", "c", 10, "d", 5); | 303 TRACE_EVENT_INSTANT2("noise", "math4", "c", 10, "d", 5); |
304 } | 304 } |
305 EndTracing(); | 305 EndTracing(); |
306 | 306 |
307 scoped_ptr<TraceAnalyzer> | 307 scoped_ptr<TraceAnalyzer> |
308 analyzer(TraceAnalyzer::Create(output_.json_output)); | 308 analyzer(TraceAnalyzer::Create(output_.json_output)); |
309 ASSERT_TRUE(analyzer.get()); | 309 ASSERT_TRUE(analyzer.get()); |
310 | 310 |
311 TraceAnalyzer::TraceEventVector found; | 311 TraceEventVector found; |
312 | 312 |
313 // Verify that arithmetic operators function: | 313 // Verify that arithmetic operators function: |
314 | 314 |
315 // + | 315 // + |
316 analyzer->FindEvents(Query(EVENT_ARG, "a") + Query(EVENT_ARG, "b") == | 316 analyzer->FindEvents(Query(EVENT_ARG, "a") + Query(EVENT_ARG, "b") == |
317 Query::Int(20), &found); | 317 Query::Int(20), &found); |
318 EXPECT_EQ(1u, found.size()); | 318 EXPECT_EQ(1u, found.size()); |
319 EXPECT_STREQ("math2", found.front()->name.c_str()); | 319 EXPECT_STREQ("math2", found.front()->name.c_str()); |
320 | 320 |
321 // - | 321 // - |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
357 TRACE_EVENT_INSTANT0("cat1", "name2"); | 357 TRACE_EVENT_INSTANT0("cat1", "name2"); |
358 TRACE_EVENT_INSTANT0("cat1", "no match"); | 358 TRACE_EVENT_INSTANT0("cat1", "no match"); |
359 TRACE_EVENT_INSTANT0("cat1", "name3x"); | 359 TRACE_EVENT_INSTANT0("cat1", "name3x"); |
360 } | 360 } |
361 EndTracing(); | 361 EndTracing(); |
362 | 362 |
363 scoped_ptr<TraceAnalyzer> | 363 scoped_ptr<TraceAnalyzer> |
364 analyzer(TraceAnalyzer::Create(output_.json_output)); | 364 analyzer(TraceAnalyzer::Create(output_.json_output)); |
365 ASSERT_TRUE(analyzer.get()); | 365 ASSERT_TRUE(analyzer.get()); |
366 | 366 |
367 TraceAnalyzer::TraceEventVector found; | 367 TraceEventVector found; |
368 | 368 |
369 analyzer->FindEvents(Query(EVENT_NAME) == Query::Pattern("name?"), &found); | 369 analyzer->FindEvents(Query(EVENT_NAME) == Query::Pattern("name?"), &found); |
370 ASSERT_EQ(2u, found.size()); | 370 ASSERT_EQ(2u, found.size()); |
371 EXPECT_STREQ("name1", found[0]->name.c_str()); | 371 EXPECT_STREQ("name1", found[0]->name.c_str()); |
372 EXPECT_STREQ("name2", found[1]->name.c_str()); | 372 EXPECT_STREQ("name2", found[1]->name.c_str()); |
373 | 373 |
374 analyzer->FindEvents(Query(EVENT_NAME) == Query::Pattern("name*"), &found); | 374 analyzer->FindEvents(Query(EVENT_NAME) == Query::Pattern("name*"), &found); |
375 ASSERT_EQ(3u, found.size()); | 375 ASSERT_EQ(3u, found.size()); |
376 EXPECT_STREQ("name1", found[0]->name.c_str()); | 376 EXPECT_STREQ("name1", found[0]->name.c_str()); |
377 EXPECT_STREQ("name2", found[1]->name.c_str()); | 377 EXPECT_STREQ("name2", found[1]->name.c_str()); |
(...skipping 25 matching lines...) Expand all Loading... | |
403 TRACE_EVENT0("cat2", "name5"); // not found (duration too short) | 403 TRACE_EVENT0("cat2", "name5"); // not found (duration too short) |
404 } | 404 } |
405 } | 405 } |
406 EndTracing(); | 406 EndTracing(); |
407 | 407 |
408 scoped_ptr<TraceAnalyzer> | 408 scoped_ptr<TraceAnalyzer> |
409 analyzer(TraceAnalyzer::Create(output_.json_output)); | 409 analyzer(TraceAnalyzer::Create(output_.json_output)); |
410 ASSERT_TRUE(analyzer.get()); | 410 ASSERT_TRUE(analyzer.get()); |
411 analyzer->AssociateBeginEndEvents(); | 411 analyzer->AssociateBeginEndEvents(); |
412 | 412 |
413 TraceAnalyzer::TraceEventVector found; | 413 TraceEventVector found; |
414 analyzer->FindEvents(Query::MatchBeginWithEnd() && | 414 analyzer->FindEvents(Query::MatchBeginWithEnd() && |
415 Query(EVENT_DURATION) > Query::Int(duration_cutoff_us) && | 415 Query(EVENT_DURATION) > Query::Int(duration_cutoff_us) && |
416 (Query(EVENT_CATEGORY) == Query::String("cat1") || | 416 (Query(EVENT_CATEGORY) == Query::String("cat1") || |
417 Query(EVENT_CATEGORY) == Query::String("cat2") || | 417 Query(EVENT_CATEGORY) == Query::String("cat2") || |
418 Query(EVENT_CATEGORY) == Query::String("cat3")), &found); | 418 Query(EVENT_CATEGORY) == Query::String("cat3")), &found); |
419 ASSERT_EQ(2u, found.size()); | 419 ASSERT_EQ(2u, found.size()); |
420 EXPECT_STREQ("name1", found[0]->name.c_str()); | 420 EXPECT_STREQ("name1", found[0]->name.c_str()); |
421 EXPECT_STREQ("name3", found[1]->name.c_str()); | 421 EXPECT_STREQ("name3", found[1]->name.c_str()); |
422 } | 422 } |
423 | 423 |
424 // Test AssociateBeginEndEvents | 424 // Test AssociateBeginEndEvents |
425 TEST_F(TraceEventAnalyzerTest, BeginEndAssocations) { | 425 TEST_F(TraceEventAnalyzerTest, BeginEndAssocations) { |
426 using namespace trace_analyzer; | 426 using namespace trace_analyzer; |
427 ManualSetUp(); | 427 ManualSetUp(); |
428 | 428 |
429 BeginTracing(); | 429 BeginTracing(); |
430 { | 430 { |
431 TRACE_EVENT_END0("cat1", "name1"); // does not match out of order begin | 431 TRACE_EVENT_END0("cat1", "name1"); // does not match out of order begin |
432 TRACE_EVENT0("cat1", "name2"); | 432 TRACE_EVENT0("cat1", "name2"); |
433 TRACE_EVENT_INSTANT0("cat1", "name3"); | 433 TRACE_EVENT_INSTANT0("cat1", "name3"); |
434 TRACE_EVENT_BEGIN0("cat1", "name1"); | 434 TRACE_EVENT_BEGIN0("cat1", "name1"); |
435 } | 435 } |
436 EndTracing(); | 436 EndTracing(); |
437 | 437 |
438 scoped_ptr<TraceAnalyzer> | 438 scoped_ptr<TraceAnalyzer> |
439 analyzer(TraceAnalyzer::Create(output_.json_output)); | 439 analyzer(TraceAnalyzer::Create(output_.json_output)); |
440 ASSERT_TRUE(analyzer.get()); | 440 ASSERT_TRUE(analyzer.get()); |
441 analyzer->AssociateBeginEndEvents(); | 441 analyzer->AssociateBeginEndEvents(); |
442 | 442 |
443 TraceAnalyzer::TraceEventVector found; | 443 TraceEventVector found; |
444 analyzer->FindEvents(Query::MatchBeginWithEnd(), &found); | 444 analyzer->FindEvents(Query::MatchBeginWithEnd(), &found); |
445 ASSERT_EQ(1u, found.size()); | 445 ASSERT_EQ(1u, found.size()); |
446 EXPECT_STREQ("name2", found[0]->name.c_str()); | 446 EXPECT_STREQ("name2", found[0]->name.c_str()); |
447 } | 447 } |
448 | 448 |
449 // Test MergeAssociatedEventArgs | |
450 TEST_F(TraceEventAnalyzerTest, MergeAssociatedEventArgs) { | |
451 using namespace trace_analyzer; | |
452 ManualSetUp(); | |
453 | |
454 const char* arg_string = "arg_string"; | |
455 BeginTracing(); | |
456 { | |
457 TRACE_EVENT1("cat1", "name1", "arg", arg_string); | |
458 } | |
459 EndTracing(); | |
460 | |
461 scoped_ptr<TraceAnalyzer> | |
462 analyzer(TraceAnalyzer::Create(output_.json_output)); | |
463 ASSERT_TRUE(analyzer.get()); | |
464 analyzer->AssociateBeginEndEvents(); | |
465 | |
466 TraceEventVector found; | |
467 analyzer->FindEvents(Query(EVENT_NAME) == Query::String("name1") && | |
468 Query(EVENT_PHASE) == Query::Phase(TRACE_EVENT_PHASE_END), &found); | |
469 ASSERT_EQ(1u, found.size()); | |
470 std::string arg_actual; | |
471 EXPECT_FALSE(found[0]->GetArgAsString("arg", &arg_actual)); | |
472 | |
473 analyzer->MergeAssociatedEventArgs(); | |
474 EXPECT_TRUE(found[0]->GetArgAsString("arg", &arg_actual)); | |
475 EXPECT_STREQ(arg_string, arg_actual.c_str()); | |
476 } | |
477 | |
449 // Test AssociateStartFinishEvents | 478 // Test AssociateStartFinishEvents |
450 TEST_F(TraceEventAnalyzerTest, StartFinishAssocations) { | 479 TEST_F(TraceEventAnalyzerTest, StartFinishAssocations) { |
451 using namespace trace_analyzer; | 480 using namespace trace_analyzer; |
452 ManualSetUp(); | 481 ManualSetUp(); |
453 | 482 |
454 BeginTracing(); | 483 BeginTracing(); |
455 { | 484 { |
456 TRACE_EVENT_FINISH0("cat1", "name1", 0xA); // does not match / out of order | 485 TRACE_EVENT_FINISH0("cat1", "name1", 0xA); // does not match / out of order |
457 TRACE_EVENT_START0("cat1", "name1", 0xB); | 486 TRACE_EVENT_START0("cat1", "name1", 0xB); |
458 TRACE_EVENT_START0("cat1", "name1", 0xC); | 487 TRACE_EVENT_START0("cat1", "name1", 0xC); |
459 TRACE_EVENT_INSTANT0("cat1", "name1"); // noise | 488 TRACE_EVENT_INSTANT0("cat1", "name1"); // noise |
460 TRACE_EVENT0("cat1", "name1"); // noise | 489 TRACE_EVENT0("cat1", "name1"); // noise |
461 TRACE_EVENT_FINISH0("cat1", "name1", 0xB); | 490 TRACE_EVENT_FINISH0("cat1", "name1", 0xB); |
462 TRACE_EVENT_FINISH0("cat1", "name1", 0xC); | 491 TRACE_EVENT_FINISH0("cat1", "name1", 0xC); |
463 TRACE_EVENT_START0("cat1", "name1", 0xA); // does not match / out of order | 492 TRACE_EVENT_START0("cat1", "name1", 0xA); // does not match / out of order |
464 } | 493 } |
465 EndTracing(); | 494 EndTracing(); |
466 | 495 |
467 scoped_ptr<TraceAnalyzer> | 496 scoped_ptr<TraceAnalyzer> |
468 analyzer(TraceAnalyzer::Create(output_.json_output)); | 497 analyzer(TraceAnalyzer::Create(output_.json_output)); |
469 ASSERT_TRUE(analyzer.get()); | 498 ASSERT_TRUE(analyzer.get()); |
470 analyzer->AssociateStartFinishEvents(); | 499 analyzer->AssociateStartFinishEvents(); |
471 | 500 |
472 TraceAnalyzer::TraceEventVector found; | 501 TraceEventVector found; |
473 analyzer->FindEvents(Query::MatchStartWithFinish(), &found); | 502 analyzer->FindEvents(Query::MatchStartWithFinish(), &found); |
474 ASSERT_EQ(2u, found.size()); | 503 ASSERT_EQ(2u, found.size()); |
475 EXPECT_STRCASEEQ("B", found[0]->id.c_str()); | 504 EXPECT_STRCASEEQ("B", found[0]->id.c_str()); |
476 EXPECT_STRCASEEQ("C", found[1]->id.c_str()); | 505 EXPECT_STRCASEEQ("C", found[1]->id.c_str()); |
477 } | 506 } |
478 | 507 |
479 // Test that the TraceAnalyzer custom associations work. | 508 // Test that the TraceAnalyzer custom associations work. |
480 TEST_F(TraceEventAnalyzerTest, CustomAssociations) { | 509 TEST_F(TraceEventAnalyzerTest, CustomAssociations) { |
481 using namespace trace_analyzer; | 510 using namespace trace_analyzer; |
482 ManualSetUp(); | 511 ManualSetUp(); |
(...skipping 14 matching lines...) Expand all Loading... | |
497 scoped_ptr<TraceAnalyzer> | 526 scoped_ptr<TraceAnalyzer> |
498 analyzer(TraceAnalyzer::Create(output_.json_output)); | 527 analyzer(TraceAnalyzer::Create(output_.json_output)); |
499 ASSERT_TRUE(analyzer.get()); | 528 ASSERT_TRUE(analyzer.get()); |
500 | 529 |
501 // begin, end, and match queries to find proper begin/end pairs. | 530 // begin, end, and match queries to find proper begin/end pairs. |
502 Query begin(Query(EVENT_NAME) == Query::String("begin")); | 531 Query begin(Query(EVENT_NAME) == Query::String("begin")); |
503 Query end(Query(EVENT_NAME) == Query::String("end")); | 532 Query end(Query(EVENT_NAME) == Query::String("end")); |
504 Query match(Query(EVENT_ARG, "id") == Query(OTHER_ARG, "id")); | 533 Query match(Query(EVENT_ARG, "id") == Query(OTHER_ARG, "id")); |
505 analyzer->AssociateEvents(begin, end, match); | 534 analyzer->AssociateEvents(begin, end, match); |
506 | 535 |
507 TraceAnalyzer::TraceEventVector found; | 536 TraceEventVector found; |
508 | 537 |
509 // cat1 has no other_event. | 538 // cat1 has no other_event. |
510 analyzer->FindEvents(Query(EVENT_CATEGORY) == Query::String("cat1") && | 539 analyzer->FindEvents(Query(EVENT_CATEGORY) == Query::String("cat1") && |
511 Query(EVENT_HAS_OTHER), &found); | 540 Query(EVENT_HAS_OTHER), &found); |
512 EXPECT_EQ(0u, found.size()); | 541 EXPECT_EQ(0u, found.size()); |
513 | 542 |
514 // cat1 has no other_event. | 543 // cat1 has no other_event. |
515 analyzer->FindEvents(Query(EVENT_CATEGORY) == Query::String("cat1") && | 544 analyzer->FindEvents(Query(EVENT_CATEGORY) == Query::String("cat1") && |
516 !Query(EVENT_HAS_OTHER), &found); | 545 !Query(EVENT_HAS_OTHER), &found); |
517 EXPECT_EQ(1u, found.size()); | 546 EXPECT_EQ(1u, found.size()); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
563 EXPECT_TRUE((Query::Bool(true) == Query::Double(1.0f)).Evaluate(dummy)); | 592 EXPECT_TRUE((Query::Bool(true) == Query::Double(1.0f)).Evaluate(dummy)); |
564 EXPECT_TRUE((Query::Bool(false) == Query::Double(0.0f)).Evaluate(dummy)); | 593 EXPECT_TRUE((Query::Bool(false) == Query::Double(0.0f)).Evaluate(dummy)); |
565 } | 594 } |
566 | 595 |
567 // Test GetRateStats. | 596 // Test GetRateStats. |
568 TEST_F(TraceEventAnalyzerTest, RateStats) { | 597 TEST_F(TraceEventAnalyzerTest, RateStats) { |
569 using namespace trace_analyzer; | 598 using namespace trace_analyzer; |
570 | 599 |
571 std::vector<TraceEvent> events; | 600 std::vector<TraceEvent> events; |
572 events.reserve(100); | 601 events.reserve(100); |
573 TraceAnalyzer::TraceEventVector event_ptrs; | 602 TraceEventVector event_ptrs; |
574 TraceEvent event; | 603 TraceEvent event; |
575 event.timestamp = 0.0; | 604 event.timestamp = 0.0; |
576 double little_delta = 1.0; | 605 double little_delta = 1.0; |
577 double big_delta = 10.0; | 606 double big_delta = 10.0; |
578 TraceAnalyzer::Stats stats; | 607 RateStats stats; |
579 | 608 |
580 for (int i = 0; i < 10; ++i) { | 609 for (int i = 0; i < 10; ++i) { |
581 event.timestamp += little_delta; | 610 event.timestamp += little_delta; |
582 events.push_back(event); | 611 events.push_back(event); |
583 event_ptrs.push_back(&events.back()); | 612 event_ptrs.push_back(&events.back()); |
584 } | 613 } |
585 | 614 |
586 ASSERT_TRUE(TraceAnalyzer::GetRateStats(event_ptrs, &stats)); | 615 ASSERT_TRUE(GetRateStats(event_ptrs, &stats)); |
587 EXPECT_EQ(little_delta, stats.mean_us); | 616 EXPECT_EQ(little_delta, stats.mean_us); |
588 EXPECT_EQ(little_delta, stats.min_us); | 617 EXPECT_EQ(little_delta, stats.min_us); |
589 EXPECT_EQ(little_delta, stats.max_us); | 618 EXPECT_EQ(little_delta, stats.max_us); |
590 EXPECT_EQ(0.0, stats.standard_deviation_us); | 619 EXPECT_EQ(0.0, stats.standard_deviation_us); |
591 | 620 |
592 event.timestamp += big_delta; | 621 event.timestamp += big_delta; |
593 events.push_back(event); | 622 events.push_back(event); |
594 event_ptrs.push_back(&events.back()); | 623 event_ptrs.push_back(&events.back()); |
595 | 624 |
596 ASSERT_TRUE(TraceAnalyzer::GetRateStats(event_ptrs, &stats)); | 625 ASSERT_TRUE(GetRateStats(event_ptrs, &stats)); |
597 EXPECT_LT(little_delta, stats.mean_us); | 626 EXPECT_LT(little_delta, stats.mean_us); |
598 EXPECT_EQ(little_delta, stats.min_us); | 627 EXPECT_EQ(little_delta, stats.min_us); |
599 EXPECT_EQ(big_delta, stats.max_us); | 628 EXPECT_EQ(big_delta, stats.max_us); |
600 EXPECT_LT(0.0, stats.standard_deviation_us); | 629 EXPECT_LT(0.0, stats.standard_deviation_us); |
601 | 630 |
602 TraceAnalyzer::TraceEventVector few_event_ptrs; | 631 TraceEventVector few_event_ptrs; |
603 few_event_ptrs.push_back(&event); | 632 few_event_ptrs.push_back(&event); |
604 few_event_ptrs.push_back(&event); | 633 few_event_ptrs.push_back(&event); |
605 ASSERT_FALSE(TraceAnalyzer::GetRateStats(few_event_ptrs, &stats)); | 634 ASSERT_FALSE(GetRateStats(few_event_ptrs, &stats)); |
606 few_event_ptrs.push_back(&event); | 635 few_event_ptrs.push_back(&event); |
607 ASSERT_TRUE(TraceAnalyzer::GetRateStats(few_event_ptrs, &stats)); | 636 ASSERT_TRUE(GetRateStats(few_event_ptrs, &stats)); |
637 } | |
638 | |
639 // Test FindFirstOf and FindLastOf. | |
640 TEST_F(TraceEventAnalyzerTest, FindOf) { | |
641 using namespace trace_analyzer; | |
642 | |
643 size_t num_events = 100; | |
644 size_t index = 0; | |
645 TraceEventVector event_ptrs; | |
646 EXPECT_FALSE(FindFirstOf(event_ptrs, Query::Bool(true), 0, &index)); | |
647 EXPECT_FALSE(FindFirstOf(event_ptrs, Query::Bool(true), 10, &index)); | |
648 EXPECT_FALSE(FindLastOf(event_ptrs, Query::Bool(true), 0, &index)); | |
649 EXPECT_FALSE(FindLastOf(event_ptrs, Query::Bool(true), 10, &index)); | |
650 | |
651 std::vector<TraceEvent> events; | |
652 events.resize(num_events); | |
653 for (size_t i = 0; i < events.size(); ++i) | |
654 event_ptrs.push_back(&events[i]); | |
655 size_t bam_index = num_events/2; | |
656 events[bam_index].name = "bam"; | |
657 Query query_bam = Query(EVENT_NAME) == Query::String(events[bam_index].name); | |
658 | |
659 // FindFirstOf | |
660 EXPECT_FALSE(FindFirstOf(event_ptrs, Query::Bool(false), 0, &index)); | |
661 EXPECT_TRUE(FindFirstOf(event_ptrs, Query::Bool(true), 0, &index)); | |
662 EXPECT_EQ(0u, index); | |
663 EXPECT_TRUE(FindFirstOf(event_ptrs, Query::Bool(true), 5, &index)); | |
664 EXPECT_EQ(5u, index); | |
665 | |
666 EXPECT_FALSE(FindFirstOf(event_ptrs, query_bam, bam_index + 1, &index)); | |
667 EXPECT_TRUE(FindFirstOf(event_ptrs, query_bam, 0, &index)); | |
668 EXPECT_EQ(bam_index, index); | |
669 EXPECT_TRUE(FindFirstOf(event_ptrs, query_bam, bam_index, &index)); | |
670 EXPECT_EQ(bam_index, index); | |
671 | |
672 // FindLastOf | |
673 EXPECT_FALSE(FindLastOf(event_ptrs, Query::Bool(false), 1000, &index)); | |
674 EXPECT_TRUE(FindLastOf(event_ptrs, Query::Bool(true), 1000, &index)); | |
675 EXPECT_EQ(num_events - 1, index); | |
676 EXPECT_TRUE(FindLastOf(event_ptrs, Query::Bool(true), num_events - 5, | |
677 &index)); | |
678 EXPECT_EQ(num_events - 5, index); | |
679 | |
680 EXPECT_FALSE(FindLastOf(event_ptrs, query_bam, bam_index - 1, &index)); | |
681 EXPECT_TRUE(FindLastOf(event_ptrs, query_bam, num_events, &index)); | |
682 EXPECT_EQ(bam_index, index); | |
683 EXPECT_TRUE(FindLastOf(event_ptrs, query_bam, bam_index, &index)); | |
684 EXPECT_EQ(bam_index, index); | |
685 } | |
686 | |
687 // Test FindClosest. | |
688 TEST_F(TraceEventAnalyzerTest, FindClosest) { | |
689 using namespace trace_analyzer; | |
690 | |
691 size_t index_1 = 0; | |
692 size_t index_2 = 0; | |
693 TraceEventVector event_ptrs; | |
694 EXPECT_FALSE(FindClosest(event_ptrs, Query::Bool(true), 0, | |
695 &index_1, &index_2)); | |
Zhenyao Mo
2011/12/12 22:30:13
format: too many whitespaces here.
jbates
2011/12/12 22:54:42
Done.
| |
696 | |
697 size_t num_events = 5; | |
698 std::vector<TraceEvent> events; | |
699 events.resize(num_events); | |
700 for (size_t i = 0; i < events.size(); ++i) { | |
701 // timestamps go up exponentially so the lower index is always closer in | |
702 // time than the higher index. | |
703 events[i].timestamp = static_cast<double>(i) * static_cast<double>(i); | |
704 event_ptrs.push_back(&events[i]); | |
705 } | |
706 events[0].name = "one"; | |
707 events[2].name = "two"; | |
708 events[4].name = "three"; | |
709 Query query_named = Query(EVENT_NAME) != Query::String(""); | |
710 Query query_one = Query(EVENT_NAME) == Query::String("one"); | |
711 | |
712 // Only one event matches query_one, so two closest can't be found. | |
713 EXPECT_FALSE(FindClosest(event_ptrs, query_one, 0, &index_1, &index_2)); | |
714 | |
715 EXPECT_TRUE(FindClosest(event_ptrs, query_one, 3, &index_1, NULL)); | |
716 EXPECT_EQ(0u, index_1); | |
717 | |
718 EXPECT_TRUE(FindClosest(event_ptrs, query_named, 1, &index_1, &index_2)); | |
719 EXPECT_EQ(0u, index_1); | |
720 EXPECT_EQ(2u, index_2); | |
721 | |
722 EXPECT_TRUE(FindClosest(event_ptrs, query_named, 4, &index_1, &index_2)); | |
723 EXPECT_EQ(4u, index_1); | |
724 EXPECT_EQ(2u, index_2); | |
725 | |
726 EXPECT_TRUE(FindClosest(event_ptrs, query_named, 3, &index_1, &index_2)); | |
727 EXPECT_EQ(2u, index_1); | |
728 EXPECT_EQ(0u, index_2); | |
729 } | |
730 | |
731 // Test FindClosest. | |
Zhenyao Mo
2011/12/12 22:30:13
FindClosest -> CountMatches
jbates
2011/12/12 22:54:42
Done.
| |
732 TEST_F(TraceEventAnalyzerTest, CountMatches) { | |
733 using namespace trace_analyzer; | |
734 | |
735 TraceEventVector event_ptrs; | |
736 EXPECT_EQ(0u, CountMatches(event_ptrs, Query::Bool(true), 0, 10)); | |
737 | |
738 size_t num_events = 5; | |
739 size_t num_named = 3; | |
740 std::vector<TraceEvent> events; | |
741 events.resize(num_events); | |
742 for (size_t i = 0; i < events.size(); ++i) | |
743 event_ptrs.push_back(&events[i]); | |
744 events[0].name = "one"; | |
745 events[2].name = "two"; | |
746 events[4].name = "three"; | |
747 Query query_named = Query(EVENT_NAME) != Query::String(""); | |
748 Query query_one = Query(EVENT_NAME) == Query::String("one"); | |
749 | |
750 EXPECT_EQ(0u, CountMatches(event_ptrs, Query::Bool(false))); | |
751 EXPECT_EQ(num_events, CountMatches(event_ptrs, Query::Bool(true))); | |
752 EXPECT_EQ(num_events - 1, CountMatches(event_ptrs, Query::Bool(true), | |
753 1, num_events)); | |
754 EXPECT_EQ(1u, CountMatches(event_ptrs, query_one)); | |
755 EXPECT_EQ(num_events - 1, CountMatches(event_ptrs, !query_one)); | |
756 EXPECT_EQ(num_named, CountMatches(event_ptrs, query_named)); | |
608 } | 757 } |
609 | 758 |
610 | 759 |
611 } // namespace trace_analyzer | 760 } // namespace trace_analyzer |
612 | 761 |
OLD | NEW |