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/debug/trace_event_unittest.h" | 5 #include "base/debug/trace_event_unittest.h" |
6 | 6 |
7 #include <cstdlib> | 7 #include <cstdlib> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 TRACE_EVENT_END_ETW("TRACE_EVENT_END_ETW call", 0x3344, "extrastring2"); | 318 TRACE_EVENT_END_ETW("TRACE_EVENT_END_ETW call", 0x3344, "extrastring2"); |
319 TRACE_EVENT_INSTANT_ETW("TRACE_EVENT_INSTANT_ETW call", | 319 TRACE_EVENT_INSTANT_ETW("TRACE_EVENT_INSTANT_ETW call", |
320 0x5566, "extrastring3"); | 320 0x5566, "extrastring3"); |
321 | 321 |
322 TRACE_EVENT0("all", "TRACE_EVENT0 call"); | 322 TRACE_EVENT0("all", "TRACE_EVENT0 call"); |
323 TRACE_EVENT1("all", "TRACE_EVENT1 call", "name1", "value1"); | 323 TRACE_EVENT1("all", "TRACE_EVENT1 call", "name1", "value1"); |
324 TRACE_EVENT2("all", "TRACE_EVENT2 call", | 324 TRACE_EVENT2("all", "TRACE_EVENT2 call", |
325 "name1", "\"value1\"", | 325 "name1", "\"value1\"", |
326 "name2", "value\\2"); | 326 "name2", "value\\2"); |
327 | 327 |
328 TRACE_EVENT_INSTANT0("all", "TRACE_EVENT_INSTANT0 call"); | 328 TRACE_EVENT_INSTANT0("all", "TRACE_EVENT_INSTANT0 call", |
329 TRACE_EVENT_INSTANT1("all", "TRACE_EVENT_INSTANT1 call", "name1", "value1"); | 329 TRACE_EVENT_SCOPE_GLOBAL); |
| 330 TRACE_EVENT_INSTANT1("all", "TRACE_EVENT_INSTANT1 call", |
| 331 TRACE_EVENT_SCOPE_PROCESS, "name1", "value1"); |
330 TRACE_EVENT_INSTANT2("all", "TRACE_EVENT_INSTANT2 call", | 332 TRACE_EVENT_INSTANT2("all", "TRACE_EVENT_INSTANT2 call", |
| 333 TRACE_EVENT_SCOPE_THREAD, |
331 "name1", "value1", | 334 "name1", "value1", |
332 "name2", "value2"); | 335 "name2", "value2"); |
333 | 336 |
334 TRACE_EVENT_BEGIN0("all", "TRACE_EVENT_BEGIN0 call"); | 337 TRACE_EVENT_BEGIN0("all", "TRACE_EVENT_BEGIN0 call"); |
335 TRACE_EVENT_BEGIN1("all", "TRACE_EVENT_BEGIN1 call", "name1", "value1"); | 338 TRACE_EVENT_BEGIN1("all", "TRACE_EVENT_BEGIN1 call", "name1", "value1"); |
336 TRACE_EVENT_BEGIN2("all", "TRACE_EVENT_BEGIN2 call", | 339 TRACE_EVENT_BEGIN2("all", "TRACE_EVENT_BEGIN2 call", |
337 "name1", "value1", | 340 "name1", "value1", |
338 "name2", "value2"); | 341 "name2", "value2"); |
339 | 342 |
340 TRACE_EVENT_END0("all", "TRACE_EVENT_END0 call"); | 343 TRACE_EVENT_END0("all", "TRACE_EVENT_END0 call"); |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
434 EXPECT_FIND_("TRACE_EVENT1 call"); | 437 EXPECT_FIND_("TRACE_EVENT1 call"); |
435 EXPECT_SUB_FIND_("name1"); | 438 EXPECT_SUB_FIND_("name1"); |
436 EXPECT_SUB_FIND_("value1"); | 439 EXPECT_SUB_FIND_("value1"); |
437 EXPECT_FIND_("TRACE_EVENT2 call"); | 440 EXPECT_FIND_("TRACE_EVENT2 call"); |
438 EXPECT_SUB_FIND_("name1"); | 441 EXPECT_SUB_FIND_("name1"); |
439 EXPECT_SUB_FIND_("\"value1\""); | 442 EXPECT_SUB_FIND_("\"value1\""); |
440 EXPECT_SUB_FIND_("name2"); | 443 EXPECT_SUB_FIND_("name2"); |
441 EXPECT_SUB_FIND_("value\\2"); | 444 EXPECT_SUB_FIND_("value\\2"); |
442 | 445 |
443 EXPECT_FIND_("TRACE_EVENT_INSTANT0 call"); | 446 EXPECT_FIND_("TRACE_EVENT_INSTANT0 call"); |
| 447 { |
| 448 std::string scope; |
| 449 EXPECT_TRUE((item && item->GetString("s", &scope))); |
| 450 EXPECT_EQ("g", scope); |
| 451 } |
444 EXPECT_FIND_("TRACE_EVENT_INSTANT1 call"); | 452 EXPECT_FIND_("TRACE_EVENT_INSTANT1 call"); |
| 453 { |
| 454 std::string scope; |
| 455 EXPECT_TRUE((item && item->GetString("s", &scope))); |
| 456 EXPECT_EQ("p", scope); |
| 457 } |
445 EXPECT_SUB_FIND_("name1"); | 458 EXPECT_SUB_FIND_("name1"); |
446 EXPECT_SUB_FIND_("value1"); | 459 EXPECT_SUB_FIND_("value1"); |
447 EXPECT_FIND_("TRACE_EVENT_INSTANT2 call"); | 460 EXPECT_FIND_("TRACE_EVENT_INSTANT2 call"); |
| 461 { |
| 462 std::string scope; |
| 463 EXPECT_TRUE((item && item->GetString("s", &scope))); |
| 464 EXPECT_EQ("t", scope); |
| 465 } |
448 EXPECT_SUB_FIND_("name1"); | 466 EXPECT_SUB_FIND_("name1"); |
449 EXPECT_SUB_FIND_("value1"); | 467 EXPECT_SUB_FIND_("value1"); |
450 EXPECT_SUB_FIND_("name2"); | 468 EXPECT_SUB_FIND_("name2"); |
451 EXPECT_SUB_FIND_("value2"); | 469 EXPECT_SUB_FIND_("value2"); |
452 | 470 |
453 EXPECT_FIND_("TRACE_EVENT_BEGIN0 call"); | 471 EXPECT_FIND_("TRACE_EVENT_BEGIN0 call"); |
454 EXPECT_FIND_("TRACE_EVENT_BEGIN1 call"); | 472 EXPECT_FIND_("TRACE_EVENT_BEGIN1 call"); |
455 EXPECT_SUB_FIND_("name1"); | 473 EXPECT_SUB_FIND_("name1"); |
456 EXPECT_SUB_FIND_("value1"); | 474 EXPECT_SUB_FIND_("value1"); |
457 EXPECT_FIND_("TRACE_EVENT_BEGIN2 call"); | 475 EXPECT_FIND_("TRACE_EVENT_BEGIN2 call"); |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
648 std::string id; | 666 std::string id; |
649 EXPECT_TRUE((item && item->GetString("id", &id))); | 667 EXPECT_TRUE((item && item->GetString("id", &id))); |
650 EXPECT_EQ(kAsyncId + 1, atoi(id.c_str())); | 668 EXPECT_EQ(kAsyncId + 1, atoi(id.c_str())); |
651 } | 669 } |
652 } | 670 } |
653 | 671 |
654 void TraceManyInstantEvents(int thread_id, int num_events, | 672 void TraceManyInstantEvents(int thread_id, int num_events, |
655 WaitableEvent* task_complete_event) { | 673 WaitableEvent* task_complete_event) { |
656 for (int i = 0; i < num_events; i++) { | 674 for (int i = 0; i < num_events; i++) { |
657 TRACE_EVENT_INSTANT2("all", "multi thread event", | 675 TRACE_EVENT_INSTANT2("all", "multi thread event", |
| 676 TRACE_EVENT_SCOPE_THREAD, |
658 "thread", thread_id, | 677 "thread", thread_id, |
659 "event", i); | 678 "event", i); |
660 } | 679 } |
661 | 680 |
662 if (task_complete_event) | 681 if (task_complete_event) |
663 task_complete_event->Signal(); | 682 task_complete_event->Signal(); |
664 } | 683 } |
665 | 684 |
666 void ValidateInstantEventPresentOnEveryThread(const ListValue& trace_parsed, | 685 void ValidateInstantEventPresentOnEveryThread(const ListValue& trace_parsed, |
667 int num_threads, | 686 int num_threads, |
(...skipping 22 matching lines...) Expand all Loading... |
690 EXPECT_FALSE(results[-1][-1]); | 709 EXPECT_FALSE(results[-1][-1]); |
691 for (int thread = 0; thread < num_threads; thread++) { | 710 for (int thread = 0; thread < num_threads; thread++) { |
692 for (int event = 0; event < num_events; event++) { | 711 for (int event = 0; event < num_events; event++) { |
693 EXPECT_TRUE(results[thread][event]); | 712 EXPECT_TRUE(results[thread][event]); |
694 } | 713 } |
695 } | 714 } |
696 } | 715 } |
697 | 716 |
698 void TraceCallsWithCachedCategoryPointersPointers(const char* name_str) { | 717 void TraceCallsWithCachedCategoryPointersPointers(const char* name_str) { |
699 TRACE_EVENT0("category name1", name_str); | 718 TRACE_EVENT0("category name1", name_str); |
700 TRACE_EVENT_INSTANT0("category name2", name_str); | 719 TRACE_EVENT_INSTANT0("category name2", name_str, TRACE_EVENT_SCOPE_THREAD); |
701 TRACE_EVENT_BEGIN0("category name3", name_str); | 720 TRACE_EVENT_BEGIN0("category name3", name_str); |
702 TRACE_EVENT_END0("category name4", name_str); | 721 TRACE_EVENT_END0("category name4", name_str); |
703 } | 722 } |
704 | 723 |
705 } // namespace | 724 } // namespace |
706 | 725 |
707 void HighResSleepForTraceTest(base::TimeDelta elapsed) { | 726 void HighResSleepForTraceTest(base::TimeDelta elapsed) { |
708 base::TimeTicks end_time = base::TimeTicks::HighResNow() + elapsed; | 727 base::TimeTicks end_time = base::TimeTicks::HighResNow() + elapsed; |
709 do { | 728 do { |
710 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1)); | 729 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1)); |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
804 // Cleanup. | 823 // Cleanup. |
805 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); | 824 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); |
806 } | 825 } |
807 | 826 |
808 // Test that categories work. | 827 // Test that categories work. |
809 TEST_F(TraceEventTestFixture, Categories) { | 828 TEST_F(TraceEventTestFixture, Categories) { |
810 ManualTestSetUp(); | 829 ManualTestSetUp(); |
811 | 830 |
812 // Test that categories that are used can be retrieved whether trace was | 831 // Test that categories that are used can be retrieved whether trace was |
813 // enabled or disabled when the trace event was encountered. | 832 // enabled or disabled when the trace event was encountered. |
814 TRACE_EVENT_INSTANT0("c1", "name"); | 833 TRACE_EVENT_INSTANT0("c1", "name", TRACE_EVENT_SCOPE_THREAD); |
815 TRACE_EVENT_INSTANT0("c2", "name"); | 834 TRACE_EVENT_INSTANT0("c2", "name", TRACE_EVENT_SCOPE_THREAD); |
816 BeginTrace(); | 835 BeginTrace(); |
817 TRACE_EVENT_INSTANT0("c3", "name"); | 836 TRACE_EVENT_INSTANT0("c3", "name", TRACE_EVENT_SCOPE_THREAD); |
818 TRACE_EVENT_INSTANT0("c4", "name"); | 837 TRACE_EVENT_INSTANT0("c4", "name", TRACE_EVENT_SCOPE_THREAD); |
819 EndTraceAndFlush(); | 838 EndTraceAndFlush(); |
820 std::vector<std::string> cats; | 839 std::vector<std::string> cats; |
821 TraceLog::GetInstance()->GetKnownCategories(&cats); | 840 TraceLog::GetInstance()->GetKnownCategories(&cats); |
822 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c1") != cats.end()); | 841 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c1") != cats.end()); |
823 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c2") != cats.end()); | 842 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c2") != cats.end()); |
824 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c3") != cats.end()); | 843 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c3") != cats.end()); |
825 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c4") != cats.end()); | 844 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c4") != cats.end()); |
826 | 845 |
827 const std::vector<std::string> empty_categories; | 846 const std::vector<std::string> empty_categories; |
828 std::vector<std::string> included_categories; | 847 std::vector<std::string> included_categories; |
829 std::vector<std::string> excluded_categories; | 848 std::vector<std::string> excluded_categories; |
830 | 849 |
831 // Test that category filtering works. | 850 // Test that category filtering works. |
832 | 851 |
833 // Include nonexistent category -> no events | 852 // Include nonexistent category -> no events |
834 Clear(); | 853 Clear(); |
835 included_categories.clear(); | 854 included_categories.clear(); |
836 included_categories.push_back("not_found823564786"); | 855 included_categories.push_back("not_found823564786"); |
837 TraceLog::GetInstance()->SetEnabled(included_categories, empty_categories); | 856 TraceLog::GetInstance()->SetEnabled(included_categories, empty_categories); |
838 TRACE_EVENT_INSTANT0("cat1", "name"); | 857 TRACE_EVENT_INSTANT0("cat1", "name", TRACE_EVENT_SCOPE_THREAD); |
839 TRACE_EVENT_INSTANT0("cat2", "name"); | 858 TRACE_EVENT_INSTANT0("cat2", "name", TRACE_EVENT_SCOPE_THREAD); |
840 EndTraceAndFlush(); | 859 EndTraceAndFlush(); |
841 EXPECT_TRUE(trace_parsed_.empty()); | 860 EXPECT_TRUE(trace_parsed_.empty()); |
842 | 861 |
843 // Include existent category -> only events of that category | 862 // Include existent category -> only events of that category |
844 Clear(); | 863 Clear(); |
845 included_categories.clear(); | 864 included_categories.clear(); |
846 included_categories.push_back("inc"); | 865 included_categories.push_back("inc"); |
847 TraceLog::GetInstance()->SetEnabled(included_categories, empty_categories); | 866 TraceLog::GetInstance()->SetEnabled(included_categories, empty_categories); |
848 TRACE_EVENT_INSTANT0("inc", "name"); | 867 TRACE_EVENT_INSTANT0("inc", "name", TRACE_EVENT_SCOPE_THREAD); |
849 TRACE_EVENT_INSTANT0("inc2", "name"); | 868 TRACE_EVENT_INSTANT0("inc2", "name", TRACE_EVENT_SCOPE_THREAD); |
850 EndTraceAndFlush(); | 869 EndTraceAndFlush(); |
851 EXPECT_TRUE(FindMatchingValue("cat", "inc")); | 870 EXPECT_TRUE(FindMatchingValue("cat", "inc")); |
852 EXPECT_FALSE(FindNonMatchingValue("cat", "inc")); | 871 EXPECT_FALSE(FindNonMatchingValue("cat", "inc")); |
853 | 872 |
854 // Include existent wildcard -> all categories matching wildcard | 873 // Include existent wildcard -> all categories matching wildcard |
855 Clear(); | 874 Clear(); |
856 included_categories.clear(); | 875 included_categories.clear(); |
857 included_categories.push_back("inc_wildcard_*"); | 876 included_categories.push_back("inc_wildcard_*"); |
858 included_categories.push_back("inc_wildchar_?_end"); | 877 included_categories.push_back("inc_wildchar_?_end"); |
859 TraceLog::GetInstance()->SetEnabled(included_categories, empty_categories); | 878 TraceLog::GetInstance()->SetEnabled(included_categories, empty_categories); |
860 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "included"); | 879 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "included", |
861 TRACE_EVENT_INSTANT0("inc_wildcard_", "included"); | 880 TRACE_EVENT_SCOPE_THREAD); |
862 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "included"); | 881 TRACE_EVENT_INSTANT0("inc_wildcard_", "included", TRACE_EVENT_SCOPE_THREAD); |
863 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "not_inc"); | 882 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "included", |
864 TRACE_EVENT_INSTANT0("cat1", "not_inc"); | 883 TRACE_EVENT_SCOPE_THREAD); |
865 TRACE_EVENT_INSTANT0("cat2", "not_inc"); | 884 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "not_inc", |
| 885 TRACE_EVENT_SCOPE_THREAD); |
| 886 TRACE_EVENT_INSTANT0("cat1", "not_inc", TRACE_EVENT_SCOPE_THREAD); |
| 887 TRACE_EVENT_INSTANT0("cat2", "not_inc", TRACE_EVENT_SCOPE_THREAD); |
866 EndTraceAndFlush(); | 888 EndTraceAndFlush(); |
867 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_abc")); | 889 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_abc")); |
868 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_")); | 890 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_")); |
869 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_x_end")); | 891 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_x_end")); |
870 EXPECT_FALSE(FindMatchingValue("name", "not_inc")); | 892 EXPECT_FALSE(FindMatchingValue("name", "not_inc")); |
871 | 893 |
872 included_categories.clear(); | 894 included_categories.clear(); |
873 | 895 |
874 // Exclude nonexistent category -> all events | 896 // Exclude nonexistent category -> all events |
875 Clear(); | 897 Clear(); |
876 excluded_categories.clear(); | 898 excluded_categories.clear(); |
877 excluded_categories.push_back("not_found823564786"); | 899 excluded_categories.push_back("not_found823564786"); |
878 TraceLog::GetInstance()->SetEnabled(empty_categories, excluded_categories); | 900 TraceLog::GetInstance()->SetEnabled(empty_categories, excluded_categories); |
879 TRACE_EVENT_INSTANT0("cat1", "name"); | 901 TRACE_EVENT_INSTANT0("cat1", "name", TRACE_EVENT_SCOPE_THREAD); |
880 TRACE_EVENT_INSTANT0("cat2", "name"); | 902 TRACE_EVENT_INSTANT0("cat2", "name", TRACE_EVENT_SCOPE_THREAD); |
881 EndTraceAndFlush(); | 903 EndTraceAndFlush(); |
882 EXPECT_TRUE(FindMatchingValue("cat", "cat1")); | 904 EXPECT_TRUE(FindMatchingValue("cat", "cat1")); |
883 EXPECT_TRUE(FindMatchingValue("cat", "cat2")); | 905 EXPECT_TRUE(FindMatchingValue("cat", "cat2")); |
884 | 906 |
885 // Exclude existent category -> only events of other categories | 907 // Exclude existent category -> only events of other categories |
886 Clear(); | 908 Clear(); |
887 excluded_categories.clear(); | 909 excluded_categories.clear(); |
888 excluded_categories.push_back("inc"); | 910 excluded_categories.push_back("inc"); |
889 TraceLog::GetInstance()->SetEnabled(empty_categories, excluded_categories); | 911 TraceLog::GetInstance()->SetEnabled(empty_categories, excluded_categories); |
890 TRACE_EVENT_INSTANT0("inc", "name"); | 912 TRACE_EVENT_INSTANT0("inc", "name", TRACE_EVENT_SCOPE_THREAD); |
891 TRACE_EVENT_INSTANT0("inc2", "name"); | 913 TRACE_EVENT_INSTANT0("inc2", "name", TRACE_EVENT_SCOPE_THREAD); |
892 EndTraceAndFlush(); | 914 EndTraceAndFlush(); |
893 EXPECT_TRUE(FindMatchingValue("cat", "inc2")); | 915 EXPECT_TRUE(FindMatchingValue("cat", "inc2")); |
894 EXPECT_FALSE(FindMatchingValue("cat", "inc")); | 916 EXPECT_FALSE(FindMatchingValue("cat", "inc")); |
895 | 917 |
896 // Exclude existent wildcard -> all categories not matching wildcard | 918 // Exclude existent wildcard -> all categories not matching wildcard |
897 Clear(); | 919 Clear(); |
898 excluded_categories.clear(); | 920 excluded_categories.clear(); |
899 excluded_categories.push_back("inc_wildcard_*"); | 921 excluded_categories.push_back("inc_wildcard_*"); |
900 excluded_categories.push_back("inc_wildchar_?_end"); | 922 excluded_categories.push_back("inc_wildchar_?_end"); |
901 TraceLog::GetInstance()->SetEnabled(empty_categories, excluded_categories); | 923 TraceLog::GetInstance()->SetEnabled(empty_categories, excluded_categories); |
902 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "not_inc"); | 924 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "not_inc", TRACE_EVENT_SCOPE_THREAD); |
903 TRACE_EVENT_INSTANT0("inc_wildcard_", "not_inc"); | 925 TRACE_EVENT_INSTANT0("inc_wildcard_", "not_inc", TRACE_EVENT_SCOPE_THREAD); |
904 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "not_inc"); | 926 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "not_inc", |
905 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "included"); | 927 TRACE_EVENT_SCOPE_THREAD); |
906 TRACE_EVENT_INSTANT0("cat1", "included"); | 928 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "included", |
907 TRACE_EVENT_INSTANT0("cat2", "included"); | 929 TRACE_EVENT_SCOPE_THREAD); |
| 930 TRACE_EVENT_INSTANT0("cat1", "included", TRACE_EVENT_SCOPE_THREAD); |
| 931 TRACE_EVENT_INSTANT0("cat2", "included", TRACE_EVENT_SCOPE_THREAD); |
908 EndTraceAndFlush(); | 932 EndTraceAndFlush(); |
909 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_bla_end")); | 933 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_bla_end")); |
910 EXPECT_TRUE(FindMatchingValue("cat", "cat1")); | 934 EXPECT_TRUE(FindMatchingValue("cat", "cat1")); |
911 EXPECT_TRUE(FindMatchingValue("cat", "cat2")); | 935 EXPECT_TRUE(FindMatchingValue("cat", "cat2")); |
912 EXPECT_FALSE(FindMatchingValue("name", "not_inc")); | 936 EXPECT_FALSE(FindMatchingValue("name", "not_inc")); |
913 } | 937 } |
914 | 938 |
915 | 939 |
916 // Test EVENT_WATCH_NOTIFICATION | 940 // Test EVENT_WATCH_NOTIFICATION |
917 TEST_F(TraceEventTestFixture, EventWatchNotification) { | 941 TEST_F(TraceEventTestFixture, EventWatchNotification) { |
918 ManualTestSetUp(); | 942 ManualTestSetUp(); |
919 | 943 |
920 // Basic one occurrence. | 944 // Basic one occurrence. |
921 BeginTrace(); | 945 BeginTrace(); |
922 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); | 946 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); |
923 TRACE_EVENT_INSTANT0("cat", "event"); | 947 TRACE_EVENT_INSTANT0("cat", "event", TRACE_EVENT_SCOPE_THREAD); |
924 EndTraceAndFlush(); | 948 EndTraceAndFlush(); |
925 EXPECT_EQ(event_watch_notification_, 1); | 949 EXPECT_EQ(event_watch_notification_, 1); |
926 | 950 |
927 // Basic one occurrence before Set. | 951 // Basic one occurrence before Set. |
928 BeginTrace(); | 952 BeginTrace(); |
929 TRACE_EVENT_INSTANT0("cat", "event"); | 953 TRACE_EVENT_INSTANT0("cat", "event", TRACE_EVENT_SCOPE_THREAD); |
930 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); | 954 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); |
931 EndTraceAndFlush(); | 955 EndTraceAndFlush(); |
932 EXPECT_EQ(event_watch_notification_, 1); | 956 EXPECT_EQ(event_watch_notification_, 1); |
933 | 957 |
934 // Auto-reset after end trace. | 958 // Auto-reset after end trace. |
935 BeginTrace(); | 959 BeginTrace(); |
936 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); | 960 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); |
937 EndTraceAndFlush(); | 961 EndTraceAndFlush(); |
938 BeginTrace(); | 962 BeginTrace(); |
939 TRACE_EVENT_INSTANT0("cat", "event"); | 963 TRACE_EVENT_INSTANT0("cat", "event", TRACE_EVENT_SCOPE_THREAD); |
940 EndTraceAndFlush(); | 964 EndTraceAndFlush(); |
941 EXPECT_EQ(event_watch_notification_, 0); | 965 EXPECT_EQ(event_watch_notification_, 0); |
942 | 966 |
943 // Multiple occurrence. | 967 // Multiple occurrence. |
944 BeginTrace(); | 968 BeginTrace(); |
945 int num_occurrences = 5; | 969 int num_occurrences = 5; |
946 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); | 970 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); |
947 for (int i = 0; i < num_occurrences; ++i) | 971 for (int i = 0; i < num_occurrences; ++i) |
948 TRACE_EVENT_INSTANT0("cat", "event"); | 972 TRACE_EVENT_INSTANT0("cat", "event", TRACE_EVENT_SCOPE_THREAD); |
949 EndTraceAndFlush(); | 973 EndTraceAndFlush(); |
950 EXPECT_EQ(event_watch_notification_, num_occurrences); | 974 EXPECT_EQ(event_watch_notification_, num_occurrences); |
951 | 975 |
952 // Wrong category. | 976 // Wrong category. |
953 BeginTrace(); | 977 BeginTrace(); |
954 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); | 978 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); |
955 TRACE_EVENT_INSTANT0("wrong_cat", "event"); | 979 TRACE_EVENT_INSTANT0("wrong_cat", "event", TRACE_EVENT_SCOPE_THREAD); |
956 EndTraceAndFlush(); | 980 EndTraceAndFlush(); |
957 EXPECT_EQ(event_watch_notification_, 0); | 981 EXPECT_EQ(event_watch_notification_, 0); |
958 | 982 |
959 // Wrong name. | 983 // Wrong name. |
960 BeginTrace(); | 984 BeginTrace(); |
961 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); | 985 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); |
962 TRACE_EVENT_INSTANT0("cat", "wrong_event"); | 986 TRACE_EVENT_INSTANT0("cat", "wrong_event", TRACE_EVENT_SCOPE_THREAD); |
963 EndTraceAndFlush(); | 987 EndTraceAndFlush(); |
964 EXPECT_EQ(event_watch_notification_, 0); | 988 EXPECT_EQ(event_watch_notification_, 0); |
965 | 989 |
966 // Canceled. | 990 // Canceled. |
967 BeginTrace(); | 991 BeginTrace(); |
968 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); | 992 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); |
969 TraceLog::GetInstance()->CancelWatchEvent(); | 993 TraceLog::GetInstance()->CancelWatchEvent(); |
970 TRACE_EVENT_INSTANT0("cat", "event"); | 994 TRACE_EVENT_INSTANT0("cat", "event", TRACE_EVENT_SCOPE_THREAD); |
971 EndTraceAndFlush(); | 995 EndTraceAndFlush(); |
972 EXPECT_EQ(event_watch_notification_, 0); | 996 EXPECT_EQ(event_watch_notification_, 0); |
973 } | 997 } |
974 | 998 |
975 // Test ASYNC_BEGIN/END events | 999 // Test ASYNC_BEGIN/END events |
976 TEST_F(TraceEventTestFixture, AsyncBeginEndEvents) { | 1000 TEST_F(TraceEventTestFixture, AsyncBeginEndEvents) { |
977 ManualTestSetUp(); | 1001 ManualTestSetUp(); |
978 BeginTrace(); | 1002 BeginTrace(); |
979 | 1003 |
980 unsigned long long id = 0xfeedbeeffeedbeefull; | 1004 unsigned long long id = 0xfeedbeeffeedbeefull; |
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1215 } | 1239 } |
1216 } | 1240 } |
1217 } | 1241 } |
1218 | 1242 |
1219 TEST_F(TraceEventTestFixture, ThreadNameChanges) { | 1243 TEST_F(TraceEventTestFixture, ThreadNameChanges) { |
1220 ManualTestSetUp(); | 1244 ManualTestSetUp(); |
1221 | 1245 |
1222 BeginTrace(); | 1246 BeginTrace(); |
1223 | 1247 |
1224 PlatformThread::SetName(""); | 1248 PlatformThread::SetName(""); |
1225 TRACE_EVENT_INSTANT0("drink", "water"); | 1249 TRACE_EVENT_INSTANT0("drink", "water", TRACE_EVENT_SCOPE_THREAD); |
1226 | 1250 |
1227 PlatformThread::SetName("cafe"); | 1251 PlatformThread::SetName("cafe"); |
1228 TRACE_EVENT_INSTANT0("drink", "coffee"); | 1252 TRACE_EVENT_INSTANT0("drink", "coffee", TRACE_EVENT_SCOPE_THREAD); |
1229 | 1253 |
1230 PlatformThread::SetName("shop"); | 1254 PlatformThread::SetName("shop"); |
1231 // No event here, so won't appear in combined name. | 1255 // No event here, so won't appear in combined name. |
1232 | 1256 |
1233 PlatformThread::SetName("pub"); | 1257 PlatformThread::SetName("pub"); |
1234 TRACE_EVENT_INSTANT0("drink", "beer"); | 1258 TRACE_EVENT_INSTANT0("drink", "beer", TRACE_EVENT_SCOPE_THREAD); |
1235 TRACE_EVENT_INSTANT0("drink", "wine"); | 1259 TRACE_EVENT_INSTANT0("drink", "wine", TRACE_EVENT_SCOPE_THREAD); |
1236 | 1260 |
1237 PlatformThread::SetName(" bar"); | 1261 PlatformThread::SetName(" bar"); |
1238 TRACE_EVENT_INSTANT0("drink", "whisky"); | 1262 TRACE_EVENT_INSTANT0("drink", "whisky", TRACE_EVENT_SCOPE_THREAD); |
1239 | 1263 |
1240 EndTraceAndFlush(); | 1264 EndTraceAndFlush(); |
1241 | 1265 |
1242 std::vector<const DictionaryValue*> items = | 1266 std::vector<const DictionaryValue*> items = |
1243 FindTraceEntries(trace_parsed_, "thread_name"); | 1267 FindTraceEntries(trace_parsed_, "thread_name"); |
1244 EXPECT_EQ(1u, items.size()); | 1268 EXPECT_EQ(1u, items.size()); |
1245 ASSERT_GT(items.size(), 0u); | 1269 ASSERT_GT(items.size(), 0u); |
1246 const DictionaryValue* item = items[0]; | 1270 const DictionaryValue* item = items[0]; |
1247 ASSERT_TRUE(item); | 1271 ASSERT_TRUE(item); |
1248 int tid; | 1272 int tid; |
(...skipping 18 matching lines...) Expand all Loading... |
1267 // recorded after the system is started again. | 1291 // recorded after the system is started again. |
1268 for (int i = 0; i < 4; i++) { | 1292 for (int i = 0; i < 4; i++) { |
1269 // Scope to contain the then destroy the TraceLog singleton. | 1293 // Scope to contain the then destroy the TraceLog singleton. |
1270 { | 1294 { |
1271 base::ShadowingAtExitManager exit_manager_will_destroy_singletons; | 1295 base::ShadowingAtExitManager exit_manager_will_destroy_singletons; |
1272 | 1296 |
1273 // Setup TraceLog singleton inside this test's exit manager scope | 1297 // Setup TraceLog singleton inside this test's exit manager scope |
1274 // so that it will be destroyed when this scope closes. | 1298 // so that it will be destroyed when this scope closes. |
1275 ManualTestSetUp(); | 1299 ManualTestSetUp(); |
1276 | 1300 |
1277 TRACE_EVENT_INSTANT0("all", "not recorded; system not enabled"); | 1301 TRACE_EVENT_INSTANT0("all", "not recorded; system not enabled", |
| 1302 TRACE_EVENT_SCOPE_THREAD); |
1278 | 1303 |
1279 BeginTrace(); | 1304 BeginTrace(); |
1280 | 1305 |
1281 TRACE_EVENT_INSTANT0("all", "is recorded 1; system has been enabled"); | 1306 TRACE_EVENT_INSTANT0("all", "is recorded 1; system has been enabled", |
| 1307 TRACE_EVENT_SCOPE_THREAD); |
1282 // Trace calls that will cache pointers to categories; they're valid here | 1308 // Trace calls that will cache pointers to categories; they're valid here |
1283 TraceCallsWithCachedCategoryPointersPointers( | 1309 TraceCallsWithCachedCategoryPointersPointers( |
1284 "is recorded 2; system has been enabled"); | 1310 "is recorded 2; system has been enabled"); |
1285 | 1311 |
1286 EndTraceAndFlush(); | 1312 EndTraceAndFlush(); |
1287 } // scope to destroy singleton | 1313 } // scope to destroy singleton |
1288 ASSERT_FALSE(TraceLog::GetInstance()); | 1314 ASSERT_FALSE(TraceLog::GetInstance()); |
1289 | 1315 |
1290 // Now that singleton is destroyed, check what trace events were recorded | 1316 // Now that singleton is destroyed, check what trace events were recorded |
1291 const DictionaryValue* item = NULL; | 1317 const DictionaryValue* item = NULL; |
1292 ListValue& trace_parsed = trace_parsed_; | 1318 ListValue& trace_parsed = trace_parsed_; |
1293 EXPECT_FIND_("is recorded 1"); | 1319 EXPECT_FIND_("is recorded 1"); |
1294 EXPECT_FIND_("is recorded 2"); | 1320 EXPECT_FIND_("is recorded 2"); |
1295 EXPECT_NOT_FIND_("not recorded"); | 1321 EXPECT_NOT_FIND_("not recorded"); |
1296 | 1322 |
1297 // Make additional trace event calls on the shutdown system. They should | 1323 // Make additional trace event calls on the shutdown system. They should |
1298 // all pass cleanly, but the data not be recorded. We'll verify that next | 1324 // all pass cleanly, but the data not be recorded. We'll verify that next |
1299 // time around the loop (the only way to flush the trace buffers). | 1325 // time around the loop (the only way to flush the trace buffers). |
1300 TRACE_EVENT_BEGIN_ETW("not recorded; system shutdown", 0, NULL); | 1326 TRACE_EVENT_BEGIN_ETW("not recorded; system shutdown", 0, NULL); |
1301 TRACE_EVENT_END_ETW("not recorded; system shutdown", 0, NULL); | 1327 TRACE_EVENT_END_ETW("not recorded; system shutdown", 0, NULL); |
1302 TRACE_EVENT_INSTANT_ETW("not recorded; system shutdown", 0, NULL); | 1328 TRACE_EVENT_INSTANT_ETW("not recorded; system shutdown", 0, NULL); |
1303 TRACE_EVENT0("all", "not recorded; system shutdown"); | 1329 TRACE_EVENT0("all", "not recorded; system shutdown"); |
1304 TRACE_EVENT_INSTANT0("all", "not recorded; system shutdown"); | 1330 TRACE_EVENT_INSTANT0("all", "not recorded; system shutdown", |
| 1331 TRACE_EVENT_SCOPE_THREAD); |
1305 TRACE_EVENT_BEGIN0("all", "not recorded; system shutdown"); | 1332 TRACE_EVENT_BEGIN0("all", "not recorded; system shutdown"); |
1306 TRACE_EVENT_END0("all", "not recorded; system shutdown"); | 1333 TRACE_EVENT_END0("all", "not recorded; system shutdown"); |
1307 | 1334 |
1308 TRACE_EVENT0("new category 0!", "not recorded; system shutdown"); | 1335 TRACE_EVENT0("new category 0!", "not recorded; system shutdown"); |
1309 TRACE_EVENT_INSTANT0("new category 1!", "not recorded; system shutdown"); | 1336 TRACE_EVENT_INSTANT0("new category 1!", "not recorded; system shutdown", |
| 1337 TRACE_EVENT_SCOPE_THREAD); |
1310 TRACE_EVENT_BEGIN0("new category 2!", "not recorded; system shutdown"); | 1338 TRACE_EVENT_BEGIN0("new category 2!", "not recorded; system shutdown"); |
1311 TRACE_EVENT_END0("new category 3!", "not recorded; system shutdown"); | 1339 TRACE_EVENT_END0("new category 3!", "not recorded; system shutdown"); |
1312 | 1340 |
1313 // Cached categories should be safe to check, and still disable traces | 1341 // Cached categories should be safe to check, and still disable traces |
1314 TraceCallsWithCachedCategoryPointersPointers( | 1342 TraceCallsWithCachedCategoryPointersPointers( |
1315 "not recorded; system shutdown"); | 1343 "not recorded; system shutdown"); |
1316 } | 1344 } |
1317 } | 1345 } |
1318 | 1346 |
1319 TEST_F(TraceEventTestFixture, NormallyNoDeepCopy) { | 1347 TEST_F(TraceEventTestFixture, NormallyNoDeepCopy) { |
1320 // Test that the TRACE_EVENT macros do not deep-copy their string. If they | 1348 // Test that the TRACE_EVENT macros do not deep-copy their string. If they |
1321 // do so it may indicate a performance regression, but more-over it would | 1349 // do so it may indicate a performance regression, but more-over it would |
1322 // make the DEEP_COPY overloads redundant. | 1350 // make the DEEP_COPY overloads redundant. |
1323 ManualTestSetUp(); | 1351 ManualTestSetUp(); |
1324 | 1352 |
1325 std::string name_string("event name"); | 1353 std::string name_string("event name"); |
1326 | 1354 |
1327 BeginTrace(); | 1355 BeginTrace(); |
1328 TRACE_EVENT_INSTANT0("category", name_string.c_str()); | 1356 TRACE_EVENT_INSTANT0("category", name_string.c_str(), |
| 1357 TRACE_EVENT_SCOPE_THREAD); |
1329 | 1358 |
1330 // Modify the string in place (a wholesale reassignment may leave the old | 1359 // Modify the string in place (a wholesale reassignment may leave the old |
1331 // string intact on the heap). | 1360 // string intact on the heap). |
1332 name_string[0] = '@'; | 1361 name_string[0] = '@'; |
1333 | 1362 |
1334 EndTraceAndFlush(); | 1363 EndTraceAndFlush(); |
1335 | 1364 |
1336 EXPECT_FALSE(FindTraceEntry(trace_parsed_, "event name")); | 1365 EXPECT_FALSE(FindTraceEntry(trace_parsed_, "event name")); |
1337 EXPECT_TRUE(FindTraceEntry(trace_parsed_, name_string.c_str())); | 1366 EXPECT_TRUE(FindTraceEntry(trace_parsed_, name_string.c_str())); |
1338 } | 1367 } |
1339 | 1368 |
1340 TEST_F(TraceEventTestFixture, DeepCopy) { | 1369 TEST_F(TraceEventTestFixture, DeepCopy) { |
1341 ManualTestSetUp(); | 1370 ManualTestSetUp(); |
1342 | 1371 |
1343 static const char kOriginalName1[] = "name1"; | 1372 static const char kOriginalName1[] = "name1"; |
1344 static const char kOriginalName2[] = "name2"; | 1373 static const char kOriginalName2[] = "name2"; |
1345 static const char kOriginalName3[] = "name3"; | 1374 static const char kOriginalName3[] = "name3"; |
1346 std::string name1(kOriginalName1); | 1375 std::string name1(kOriginalName1); |
1347 std::string name2(kOriginalName2); | 1376 std::string name2(kOriginalName2); |
1348 std::string name3(kOriginalName3); | 1377 std::string name3(kOriginalName3); |
1349 std::string arg1("arg1"); | 1378 std::string arg1("arg1"); |
1350 std::string arg2("arg2"); | 1379 std::string arg2("arg2"); |
1351 std::string val1("val1"); | 1380 std::string val1("val1"); |
1352 std::string val2("val2"); | 1381 std::string val2("val2"); |
1353 | 1382 |
1354 BeginTrace(); | 1383 BeginTrace(); |
1355 TRACE_EVENT_COPY_INSTANT0("category", name1.c_str()); | 1384 TRACE_EVENT_COPY_INSTANT0("category", name1.c_str(), |
| 1385 TRACE_EVENT_SCOPE_THREAD); |
1356 TRACE_EVENT_COPY_BEGIN1("category", name2.c_str(), | 1386 TRACE_EVENT_COPY_BEGIN1("category", name2.c_str(), |
1357 arg1.c_str(), 5); | 1387 arg1.c_str(), 5); |
1358 TRACE_EVENT_COPY_END2("category", name3.c_str(), | 1388 TRACE_EVENT_COPY_END2("category", name3.c_str(), |
1359 arg1.c_str(), val1, | 1389 arg1.c_str(), val1, |
1360 arg2.c_str(), val2); | 1390 arg2.c_str(), val2); |
1361 | 1391 |
1362 // As per NormallyNoDeepCopy, modify the strings in place. | 1392 // As per NormallyNoDeepCopy, modify the strings in place. |
1363 name1[0] = name2[0] = name3[0] = arg1[0] = arg2[0] = val1[0] = val2[0] = '@'; | 1393 name1[0] = name2[0] = name3[0] = arg1[0] = arg2[0] = val1[0] = val2[0] = '@'; |
1364 | 1394 |
1365 EndTraceAndFlush(); | 1395 EndTraceAndFlush(); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1409 EXPECT_STREQ(json_output_.json_output.c_str(), "[bla1,bla2,bla3,bla4]"); | 1439 EXPECT_STREQ(json_output_.json_output.c_str(), "[bla1,bla2,bla3,bla4]"); |
1410 } | 1440 } |
1411 | 1441 |
1412 // Test that trace_event parameters are not evaluated if the tracing | 1442 // Test that trace_event parameters are not evaluated if the tracing |
1413 // system is disabled. | 1443 // system is disabled. |
1414 TEST_F(TraceEventTestFixture, TracingIsLazy) { | 1444 TEST_F(TraceEventTestFixture, TracingIsLazy) { |
1415 ManualTestSetUp(); | 1445 ManualTestSetUp(); |
1416 BeginTrace(); | 1446 BeginTrace(); |
1417 | 1447 |
1418 int a = 0; | 1448 int a = 0; |
1419 TRACE_EVENT_INSTANT1("category", "test", "a", a++); | 1449 TRACE_EVENT_INSTANT1("category", "test", TRACE_EVENT_SCOPE_THREAD, "a", a++); |
1420 EXPECT_EQ(1, a); | 1450 EXPECT_EQ(1, a); |
1421 | 1451 |
1422 TraceLog::GetInstance()->SetDisabled(); | 1452 TraceLog::GetInstance()->SetDisabled(); |
1423 | 1453 |
1424 TRACE_EVENT_INSTANT1("category", "test", "a", a++); | 1454 TRACE_EVENT_INSTANT1("category", "test", TRACE_EVENT_SCOPE_THREAD, "a", a++); |
1425 EXPECT_EQ(1, a); | 1455 EXPECT_EQ(1, a); |
1426 | 1456 |
1427 EndTraceAndFlush(); | 1457 EndTraceAndFlush(); |
1428 } | 1458 } |
1429 | 1459 |
1430 TEST_F(TraceEventTestFixture, TraceEnableDisable) { | 1460 TEST_F(TraceEventTestFixture, TraceEnableDisable) { |
1431 ManualTestSetUp(); | 1461 ManualTestSetUp(); |
1432 | 1462 |
1433 TraceLog* trace_log = TraceLog::GetInstance(); | 1463 TraceLog* trace_log = TraceLog::GetInstance(); |
1434 trace_log->SetEnabled(std::string()); | 1464 trace_log->SetEnabled(std::string()); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1473 trace_log->SetEnabled(std::string("moo")); | 1503 trace_log->SetEnabled(std::string("moo")); |
1474 EXPECT_TRUE(*trace_log->GetCategoryEnabled("baz")); | 1504 EXPECT_TRUE(*trace_log->GetCategoryEnabled("baz")); |
1475 EXPECT_TRUE(*trace_log->GetCategoryEnabled("moo")); | 1505 EXPECT_TRUE(*trace_log->GetCategoryEnabled("moo")); |
1476 EXPECT_TRUE(*trace_log->GetCategoryEnabled("foo")); | 1506 EXPECT_TRUE(*trace_log->GetCategoryEnabled("foo")); |
1477 trace_log->SetDisabled(); | 1507 trace_log->SetDisabled(); |
1478 trace_log->SetDisabled(); | 1508 trace_log->SetDisabled(); |
1479 } | 1509 } |
1480 | 1510 |
1481 } // namespace debug | 1511 } // namespace debug |
1482 } // namespace base | 1512 } // namespace base |
OLD | NEW |