OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 EXPECT_STREQ("name2", found[0]->name.c_str()); | 440 EXPECT_STREQ("name2", found[0]->name.c_str()); |
441 } | 441 } |
442 | 442 |
443 // Test MergeAssociatedEventArgs | 443 // Test MergeAssociatedEventArgs |
444 TEST_F(TraceEventAnalyzerTest, MergeAssociatedEventArgs) { | 444 TEST_F(TraceEventAnalyzerTest, MergeAssociatedEventArgs) { |
445 ManualSetUp(); | 445 ManualSetUp(); |
446 | 446 |
447 const char* arg_string = "arg_string"; | 447 const char* arg_string = "arg_string"; |
448 BeginTracing(); | 448 BeginTracing(); |
449 { | 449 { |
450 TRACE_EVENT1("cat1", "name1", "arg", arg_string); | 450 TRACE_EVENT_BEGIN0("cat1", "name1"); |
| 451 TRACE_EVENT_END1("cat1", "name1", "arg", arg_string); |
451 } | 452 } |
452 EndTracing(); | 453 EndTracing(); |
453 | 454 |
454 scoped_ptr<TraceAnalyzer> | 455 scoped_ptr<TraceAnalyzer> |
455 analyzer(TraceAnalyzer::Create(output_.json_output)); | 456 analyzer(TraceAnalyzer::Create(output_.json_output)); |
456 ASSERT_TRUE(analyzer.get()); | 457 ASSERT_TRUE(analyzer.get()); |
457 analyzer->AssociateBeginEndEvents(); | 458 analyzer->AssociateBeginEndEvents(); |
458 | 459 |
459 TraceEventVector found; | 460 TraceEventVector found; |
460 analyzer->FindEvents(Query::EventName() == Query::String("name1") && | 461 analyzer->FindEvents(Query::MatchBeginName("name1"), &found); |
461 Query::EventPhase() == Query::Phase(TRACE_EVENT_PHASE_END), &found); | |
462 ASSERT_EQ(1u, found.size()); | 462 ASSERT_EQ(1u, found.size()); |
463 std::string arg_actual; | 463 std::string arg_actual; |
464 EXPECT_FALSE(found[0]->GetArgAsString("arg", &arg_actual)); | 464 EXPECT_FALSE(found[0]->GetArgAsString("arg", &arg_actual)); |
465 | 465 |
466 analyzer->MergeAssociatedEventArgs(); | 466 analyzer->MergeAssociatedEventArgs(); |
467 EXPECT_TRUE(found[0]->GetArgAsString("arg", &arg_actual)); | 467 EXPECT_TRUE(found[0]->GetArgAsString("arg", &arg_actual)); |
468 EXPECT_STREQ(arg_string, arg_actual.c_str()); | 468 EXPECT_STREQ(arg_string, arg_actual.c_str()); |
469 } | 469 } |
470 | 470 |
471 // Test AssociateStartFinishEvents | 471 // Test AssociateAsyncBeginEndEvents |
472 TEST_F(TraceEventAnalyzerTest, StartFinishAssocations) { | 472 TEST_F(TraceEventAnalyzerTest, AsyncBeginEndAssocations) { |
473 ManualSetUp(); | 473 ManualSetUp(); |
474 | 474 |
475 BeginTracing(); | 475 BeginTracing(); |
476 { | 476 { |
477 TRACE_EVENT_FINISH0("cat1", "name1", 0xA); // does not match / out of order | 477 TRACE_EVENT_ASYNC_END0("cat1", "name1", 0xA); // no match / out of order |
478 TRACE_EVENT_START0("cat1", "name1", 0xB); | 478 TRACE_EVENT_ASYNC_BEGIN0("cat1", "name1", 0xB); |
479 TRACE_EVENT_START0("cat1", "name1", 0xC); | 479 TRACE_EVENT_ASYNC_BEGIN0("cat1", "name1", 0xC); |
480 TRACE_EVENT_INSTANT0("cat1", "name1"); // noise | 480 TRACE_EVENT_INSTANT0("cat1", "name1"); // noise |
481 TRACE_EVENT0("cat1", "name1"); // noise | 481 TRACE_EVENT0("cat1", "name1"); // noise |
482 TRACE_EVENT_FINISH0("cat1", "name1", 0xB); | 482 TRACE_EVENT_ASYNC_END0("cat1", "name1", 0xB); |
483 TRACE_EVENT_FINISH0("cat1", "name1", 0xC); | 483 TRACE_EVENT_ASYNC_END0("cat1", "name1", 0xC); |
484 TRACE_EVENT_START0("cat1", "name1", 0xA); // does not match / out of order | 484 TRACE_EVENT_ASYNC_BEGIN0("cat1", "name1", 0xA); // no match / out of order |
485 } | 485 } |
486 EndTracing(); | 486 EndTracing(); |
487 | 487 |
488 scoped_ptr<TraceAnalyzer> | 488 scoped_ptr<TraceAnalyzer> |
489 analyzer(TraceAnalyzer::Create(output_.json_output)); | 489 analyzer(TraceAnalyzer::Create(output_.json_output)); |
490 ASSERT_TRUE(analyzer.get()); | 490 ASSERT_TRUE(analyzer.get()); |
491 analyzer->AssociateStartFinishEvents(); | 491 analyzer->AssociateAsyncBeginEndEvents(); |
492 | 492 |
493 TraceEventVector found; | 493 TraceEventVector found; |
494 analyzer->FindEvents(Query::MatchStartWithFinish(), &found); | 494 analyzer->FindEvents(Query::MatchAsyncBeginWithNext(), &found); |
495 ASSERT_EQ(2u, found.size()); | 495 ASSERT_EQ(2u, found.size()); |
496 EXPECT_STRCASEEQ("B", found[0]->id.c_str()); | 496 EXPECT_STRCASEEQ("B", found[0]->id.c_str()); |
497 EXPECT_STRCASEEQ("C", found[1]->id.c_str()); | 497 EXPECT_STRCASEEQ("C", found[1]->id.c_str()); |
498 } | 498 } |
499 | 499 |
| 500 // Test AssociateAsyncBeginEndEvents |
| 501 TEST_F(TraceEventAnalyzerTest, AsyncBeginEndAssocationsWithSteps) { |
| 502 ManualSetUp(); |
| 503 |
| 504 BeginTracing(); |
| 505 { |
| 506 TRACE_EVENT_ASYNC_STEP0("c", "n", 0xA); |
| 507 TRACE_EVENT_ASYNC_END0("c", "n", 0xA); |
| 508 TRACE_EVENT_ASYNC_BEGIN0("c", "n", 0xB); |
| 509 TRACE_EVENT_ASYNC_BEGIN0("c", "n", 0xC); |
| 510 TRACE_EVENT_ASYNC_STEP0("c", "n", 0xB); |
| 511 TRACE_EVENT_ASYNC_STEP0("c", "n", 0xC); |
| 512 TRACE_EVENT_ASYNC_STEP1("c", "n", 0xC, "a", 1); |
| 513 TRACE_EVENT_ASYNC_END0("c", "n", 0xB); |
| 514 TRACE_EVENT_ASYNC_END0("c", "n", 0xC); |
| 515 TRACE_EVENT_ASYNC_BEGIN0("c", "n", 0xA); |
| 516 TRACE_EVENT_ASYNC_STEP0("c", "n", 0xA); |
| 517 } |
| 518 EndTracing(); |
| 519 |
| 520 scoped_ptr<TraceAnalyzer> |
| 521 analyzer(TraceAnalyzer::Create(output_.json_output)); |
| 522 ASSERT_TRUE(analyzer.get()); |
| 523 analyzer->AssociateAsyncBeginEndEvents(); |
| 524 |
| 525 TraceEventVector found; |
| 526 analyzer->FindEvents(Query::MatchAsyncBeginWithNext(), &found); |
| 527 ASSERT_EQ(3u, found.size()); |
| 528 |
| 529 EXPECT_STRCASEEQ("B", found[0]->id.c_str()); |
| 530 EXPECT_EQ(TRACE_EVENT_PHASE_ASYNC_STEP, found[0]->other_event->phase); |
| 531 EXPECT_TRUE(found[0]->other_event->other_event); |
| 532 EXPECT_EQ(TRACE_EVENT_PHASE_ASYNC_END, |
| 533 found[0]->other_event->other_event->phase); |
| 534 |
| 535 EXPECT_STRCASEEQ("C", found[1]->id.c_str()); |
| 536 EXPECT_EQ(TRACE_EVENT_PHASE_ASYNC_STEP, found[1]->other_event->phase); |
| 537 EXPECT_TRUE(found[1]->other_event->other_event); |
| 538 EXPECT_EQ(TRACE_EVENT_PHASE_ASYNC_STEP, |
| 539 found[1]->other_event->other_event->phase); |
| 540 double arg_actual = 0; |
| 541 EXPECT_TRUE(found[1]->other_event->other_event->GetArgAsNumber( |
| 542 "a", &arg_actual)); |
| 543 EXPECT_EQ(1.0, arg_actual); |
| 544 EXPECT_TRUE(found[1]->other_event->other_event->other_event); |
| 545 EXPECT_EQ(TRACE_EVENT_PHASE_ASYNC_END, |
| 546 found[1]->other_event->other_event->other_event->phase); |
| 547 |
| 548 EXPECT_STRCASEEQ("A", found[2]->id.c_str()); |
| 549 EXPECT_EQ(TRACE_EVENT_PHASE_ASYNC_STEP, found[2]->other_event->phase); |
| 550 } |
| 551 |
500 // Test that the TraceAnalyzer custom associations work. | 552 // Test that the TraceAnalyzer custom associations work. |
501 TEST_F(TraceEventAnalyzerTest, CustomAssociations) { | 553 TEST_F(TraceEventAnalyzerTest, CustomAssociations) { |
502 ManualSetUp(); | 554 ManualSetUp(); |
503 | 555 |
504 // Add events that begin/end in pipelined ordering with unique ID parameter | 556 // Add events that begin/end in pipelined ordering with unique ID parameter |
505 // to match up the begin/end pairs. | 557 // to match up the begin/end pairs. |
506 BeginTracing(); | 558 BeginTracing(); |
507 { | 559 { |
508 TRACE_EVENT_INSTANT1("cat1", "end", "id", 1); // no begin match | 560 TRACE_EVENT_INSTANT1("cat1", "end", "id", 1); // no begin match |
509 TRACE_EVENT_INSTANT1("cat2", "begin", "id", 2); // end is cat4 | 561 TRACE_EVENT_INSTANT1("cat2", "begin", "id", 2); // end is cat4 |
(...skipping 24 matching lines...) Expand all Loading... |
534 // cat1 has no other_event. | 586 // cat1 has no other_event. |
535 analyzer->FindEvents(Query::EventCategory() == Query::String("cat1") && | 587 analyzer->FindEvents(Query::EventCategory() == Query::String("cat1") && |
536 !Query::EventHasOther(), &found); | 588 !Query::EventHasOther(), &found); |
537 EXPECT_EQ(1u, found.size()); | 589 EXPECT_EQ(1u, found.size()); |
538 | 590 |
539 // cat6 has no other_event. | 591 // cat6 has no other_event. |
540 analyzer->FindEvents(Query::EventCategory() == Query::String("cat6") && | 592 analyzer->FindEvents(Query::EventCategory() == Query::String("cat6") && |
541 !Query::EventHasOther(), &found); | 593 !Query::EventHasOther(), &found); |
542 EXPECT_EQ(1u, found.size()); | 594 EXPECT_EQ(1u, found.size()); |
543 | 595 |
544 // cat2 and cat4 are a associated. | 596 // cat2 and cat4 are associated. |
545 analyzer->FindEvents(Query::EventCategory() == Query::String("cat2") && | 597 analyzer->FindEvents(Query::EventCategory() == Query::String("cat2") && |
546 Query::OtherCategory() == Query::String("cat4"), &found); | 598 Query::OtherCategory() == Query::String("cat4"), &found); |
547 EXPECT_EQ(1u, found.size()); | 599 EXPECT_EQ(1u, found.size()); |
548 | 600 |
549 // cat4 and cat2 are a associated. | 601 // cat4 and cat2 are not associated. |
550 analyzer->FindEvents(Query::EventCategory() == Query::String("cat4") && | 602 analyzer->FindEvents(Query::EventCategory() == Query::String("cat4") && |
551 Query::OtherCategory() == Query::String("cat2"), &found); | 603 Query::OtherCategory() == Query::String("cat2"), &found); |
552 EXPECT_EQ(1u, found.size()); | 604 EXPECT_EQ(0u, found.size()); |
553 | 605 |
554 // cat3 and cat5 are a associated. | 606 // cat3 and cat5 are associated. |
555 analyzer->FindEvents(Query::EventCategory() == Query::String("cat3") && | 607 analyzer->FindEvents(Query::EventCategory() == Query::String("cat3") && |
556 Query::OtherCategory() == Query::String("cat5"), &found); | 608 Query::OtherCategory() == Query::String("cat5"), &found); |
557 EXPECT_EQ(1u, found.size()); | 609 EXPECT_EQ(1u, found.size()); |
558 | 610 |
559 // cat5 and cat3 are a associated. | 611 // cat5 and cat3 are not associated. |
560 analyzer->FindEvents(Query::EventCategory() == Query::String("cat5") && | 612 analyzer->FindEvents(Query::EventCategory() == Query::String("cat5") && |
561 Query::OtherCategory() == Query::String("cat3"), &found); | 613 Query::OtherCategory() == Query::String("cat3"), &found); |
562 EXPECT_EQ(1u, found.size()); | 614 EXPECT_EQ(0u, found.size()); |
563 } | 615 } |
564 | 616 |
565 // Verify that Query literals and types are properly casted. | 617 // Verify that Query literals and types are properly casted. |
566 TEST_F(TraceEventAnalyzerTest, Literals) { | 618 TEST_F(TraceEventAnalyzerTest, Literals) { |
567 ManualSetUp(); | 619 ManualSetUp(); |
568 | 620 |
569 // Since these queries don't refer to the event data, the dummy event below | 621 // Since these queries don't refer to the event data, the dummy event below |
570 // will never be accessed. | 622 // will never be accessed. |
571 TraceEvent dummy; | 623 TraceEvent dummy; |
572 char char_num = 5; | 624 char char_num = 5; |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
733 EXPECT_EQ(num_events, CountMatches(event_ptrs, Query::Bool(true))); | 785 EXPECT_EQ(num_events, CountMatches(event_ptrs, Query::Bool(true))); |
734 EXPECT_EQ(num_events - 1, CountMatches(event_ptrs, Query::Bool(true), | 786 EXPECT_EQ(num_events - 1, CountMatches(event_ptrs, Query::Bool(true), |
735 1, num_events)); | 787 1, num_events)); |
736 EXPECT_EQ(1u, CountMatches(event_ptrs, query_one)); | 788 EXPECT_EQ(1u, CountMatches(event_ptrs, query_one)); |
737 EXPECT_EQ(num_events - 1, CountMatches(event_ptrs, !query_one)); | 789 EXPECT_EQ(num_events - 1, CountMatches(event_ptrs, !query_one)); |
738 EXPECT_EQ(num_named, CountMatches(event_ptrs, query_named)); | 790 EXPECT_EQ(num_named, CountMatches(event_ptrs, query_named)); |
739 } | 791 } |
740 | 792 |
741 | 793 |
742 } // namespace trace_analyzer | 794 } // namespace trace_analyzer |
OLD | NEW |