Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(588)

Side by Side Diff: base/debug/trace_event_unittest.cc

Issue 12252058: Add a |scope| argument to TRACE_EVENT_INSTANT* and require its presence. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix builds 2 Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « base/debug/trace_event_internal.h ('k') | base/test/trace_event_analyzer_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 TRACE_EVENT_END_ETW("TRACE_EVENT_END_ETW call", 0x3344, "extrastring2"); 319 TRACE_EVENT_END_ETW("TRACE_EVENT_END_ETW call", 0x3344, "extrastring2");
320 TRACE_EVENT_INSTANT_ETW("TRACE_EVENT_INSTANT_ETW call", 320 TRACE_EVENT_INSTANT_ETW("TRACE_EVENT_INSTANT_ETW call",
321 0x5566, "extrastring3"); 321 0x5566, "extrastring3");
322 322
323 TRACE_EVENT0("all", "TRACE_EVENT0 call"); 323 TRACE_EVENT0("all", "TRACE_EVENT0 call");
324 TRACE_EVENT1("all", "TRACE_EVENT1 call", "name1", "value1"); 324 TRACE_EVENT1("all", "TRACE_EVENT1 call", "name1", "value1");
325 TRACE_EVENT2("all", "TRACE_EVENT2 call", 325 TRACE_EVENT2("all", "TRACE_EVENT2 call",
326 "name1", "\"value1\"", 326 "name1", "\"value1\"",
327 "name2", "value\\2"); 327 "name2", "value\\2");
328 328
329 TRACE_EVENT_INSTANT0("all", "TRACE_EVENT_INSTANT0 call"); 329 TRACE_EVENT_INSTANT0("all", "TRACE_EVENT_INSTANT0 call",
330 TRACE_EVENT_INSTANT1("all", "TRACE_EVENT_INSTANT1 call", "name1", "value1"); 330 TRACE_EVENT_SCOPE_GLOBAL);
331 TRACE_EVENT_INSTANT1("all", "TRACE_EVENT_INSTANT1 call",
332 TRACE_EVENT_SCOPE_PROCESS, "name1", "value1");
331 TRACE_EVENT_INSTANT2("all", "TRACE_EVENT_INSTANT2 call", 333 TRACE_EVENT_INSTANT2("all", "TRACE_EVENT_INSTANT2 call",
334 TRACE_EVENT_SCOPE_THREAD,
332 "name1", "value1", 335 "name1", "value1",
333 "name2", "value2"); 336 "name2", "value2");
334 337
335 TRACE_EVENT_BEGIN0("all", "TRACE_EVENT_BEGIN0 call"); 338 TRACE_EVENT_BEGIN0("all", "TRACE_EVENT_BEGIN0 call");
336 TRACE_EVENT_BEGIN1("all", "TRACE_EVENT_BEGIN1 call", "name1", "value1"); 339 TRACE_EVENT_BEGIN1("all", "TRACE_EVENT_BEGIN1 call", "name1", "value1");
337 TRACE_EVENT_BEGIN2("all", "TRACE_EVENT_BEGIN2 call", 340 TRACE_EVENT_BEGIN2("all", "TRACE_EVENT_BEGIN2 call",
338 "name1", "value1", 341 "name1", "value1",
339 "name2", "value2"); 342 "name2", "value2");
340 343
341 TRACE_EVENT_END0("all", "TRACE_EVENT_END0 call"); 344 TRACE_EVENT_END0("all", "TRACE_EVENT_END0 call");
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 EXPECT_FIND_("TRACE_EVENT1 call"); 443 EXPECT_FIND_("TRACE_EVENT1 call");
441 EXPECT_SUB_FIND_("name1"); 444 EXPECT_SUB_FIND_("name1");
442 EXPECT_SUB_FIND_("value1"); 445 EXPECT_SUB_FIND_("value1");
443 EXPECT_FIND_("TRACE_EVENT2 call"); 446 EXPECT_FIND_("TRACE_EVENT2 call");
444 EXPECT_SUB_FIND_("name1"); 447 EXPECT_SUB_FIND_("name1");
445 EXPECT_SUB_FIND_("\"value1\""); 448 EXPECT_SUB_FIND_("\"value1\"");
446 EXPECT_SUB_FIND_("name2"); 449 EXPECT_SUB_FIND_("name2");
447 EXPECT_SUB_FIND_("value\\2"); 450 EXPECT_SUB_FIND_("value\\2");
448 451
449 EXPECT_FIND_("TRACE_EVENT_INSTANT0 call"); 452 EXPECT_FIND_("TRACE_EVENT_INSTANT0 call");
453 {
454 std::string scope;
455 EXPECT_TRUE((item && item->GetString("s", &scope)));
456 EXPECT_EQ("g", scope);
457 }
450 EXPECT_FIND_("TRACE_EVENT_INSTANT1 call"); 458 EXPECT_FIND_("TRACE_EVENT_INSTANT1 call");
459 {
460 std::string scope;
461 EXPECT_TRUE((item && item->GetString("s", &scope)));
462 EXPECT_EQ("p", scope);
463 }
451 EXPECT_SUB_FIND_("name1"); 464 EXPECT_SUB_FIND_("name1");
452 EXPECT_SUB_FIND_("value1"); 465 EXPECT_SUB_FIND_("value1");
453 EXPECT_FIND_("TRACE_EVENT_INSTANT2 call"); 466 EXPECT_FIND_("TRACE_EVENT_INSTANT2 call");
467 {
468 std::string scope;
469 EXPECT_TRUE((item && item->GetString("s", &scope)));
470 EXPECT_EQ("t", scope);
471 }
454 EXPECT_SUB_FIND_("name1"); 472 EXPECT_SUB_FIND_("name1");
455 EXPECT_SUB_FIND_("value1"); 473 EXPECT_SUB_FIND_("value1");
456 EXPECT_SUB_FIND_("name2"); 474 EXPECT_SUB_FIND_("name2");
457 EXPECT_SUB_FIND_("value2"); 475 EXPECT_SUB_FIND_("value2");
458 476
459 EXPECT_FIND_("TRACE_EVENT_BEGIN0 call"); 477 EXPECT_FIND_("TRACE_EVENT_BEGIN0 call");
460 EXPECT_FIND_("TRACE_EVENT_BEGIN1 call"); 478 EXPECT_FIND_("TRACE_EVENT_BEGIN1 call");
461 EXPECT_SUB_FIND_("name1"); 479 EXPECT_SUB_FIND_("name1");
462 EXPECT_SUB_FIND_("value1"); 480 EXPECT_SUB_FIND_("value1");
463 EXPECT_FIND_("TRACE_EVENT_BEGIN2 call"); 481 EXPECT_FIND_("TRACE_EVENT_BEGIN2 call");
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 EXPECT_EQ("D", phase); 706 EXPECT_EQ("D", phase);
689 EXPECT_TRUE((item && item->GetString("id", &id))); 707 EXPECT_TRUE((item && item->GetString("id", &id)));
690 EXPECT_EQ("2128506", id); 708 EXPECT_EQ("2128506", id);
691 } 709 }
692 } 710 }
693 711
694 void TraceManyInstantEvents(int thread_id, int num_events, 712 void TraceManyInstantEvents(int thread_id, int num_events,
695 WaitableEvent* task_complete_event) { 713 WaitableEvent* task_complete_event) {
696 for (int i = 0; i < num_events; i++) { 714 for (int i = 0; i < num_events; i++) {
697 TRACE_EVENT_INSTANT2("all", "multi thread event", 715 TRACE_EVENT_INSTANT2("all", "multi thread event",
716 TRACE_EVENT_SCOPE_THREAD,
698 "thread", thread_id, 717 "thread", thread_id,
699 "event", i); 718 "event", i);
700 } 719 }
701 720
702 if (task_complete_event) 721 if (task_complete_event)
703 task_complete_event->Signal(); 722 task_complete_event->Signal();
704 } 723 }
705 724
706 void ValidateInstantEventPresentOnEveryThread(const ListValue& trace_parsed, 725 void ValidateInstantEventPresentOnEveryThread(const ListValue& trace_parsed,
707 int num_threads, 726 int num_threads,
(...skipping 22 matching lines...) Expand all
730 EXPECT_FALSE(results[-1][-1]); 749 EXPECT_FALSE(results[-1][-1]);
731 for (int thread = 0; thread < num_threads; thread++) { 750 for (int thread = 0; thread < num_threads; thread++) {
732 for (int event = 0; event < num_events; event++) { 751 for (int event = 0; event < num_events; event++) {
733 EXPECT_TRUE(results[thread][event]); 752 EXPECT_TRUE(results[thread][event]);
734 } 753 }
735 } 754 }
736 } 755 }
737 756
738 void TraceCallsWithCachedCategoryPointersPointers(const char* name_str) { 757 void TraceCallsWithCachedCategoryPointersPointers(const char* name_str) {
739 TRACE_EVENT0("category name1", name_str); 758 TRACE_EVENT0("category name1", name_str);
740 TRACE_EVENT_INSTANT0("category name2", name_str); 759 TRACE_EVENT_INSTANT0("category name2", name_str, TRACE_EVENT_SCOPE_THREAD);
741 TRACE_EVENT_BEGIN0("category name3", name_str); 760 TRACE_EVENT_BEGIN0("category name3", name_str);
742 TRACE_EVENT_END0("category name4", name_str); 761 TRACE_EVENT_END0("category name4", name_str);
743 } 762 }
744 763
745 } // namespace 764 } // namespace
746 765
747 void HighResSleepForTraceTest(base::TimeDelta elapsed) { 766 void HighResSleepForTraceTest(base::TimeDelta elapsed) {
748 base::TimeTicks end_time = base::TimeTicks::HighResNow() + elapsed; 767 base::TimeTicks end_time = base::TimeTicks::HighResNow() + elapsed;
749 do { 768 do {
750 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1)); 769 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1));
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
844 // Cleanup. 863 // Cleanup.
845 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); 864 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
846 } 865 }
847 866
848 // Test that categories work. 867 // Test that categories work.
849 TEST_F(TraceEventTestFixture, Categories) { 868 TEST_F(TraceEventTestFixture, Categories) {
850 ManualTestSetUp(); 869 ManualTestSetUp();
851 870
852 // Test that categories that are used can be retrieved whether trace was 871 // Test that categories that are used can be retrieved whether trace was
853 // enabled or disabled when the trace event was encountered. 872 // enabled or disabled when the trace event was encountered.
854 TRACE_EVENT_INSTANT0("c1", "name"); 873 TRACE_EVENT_INSTANT0("c1", "name", TRACE_EVENT_SCOPE_THREAD);
855 TRACE_EVENT_INSTANT0("c2", "name"); 874 TRACE_EVENT_INSTANT0("c2", "name", TRACE_EVENT_SCOPE_THREAD);
856 BeginTrace(); 875 BeginTrace();
857 TRACE_EVENT_INSTANT0("c3", "name"); 876 TRACE_EVENT_INSTANT0("c3", "name", TRACE_EVENT_SCOPE_THREAD);
858 TRACE_EVENT_INSTANT0("c4", "name"); 877 TRACE_EVENT_INSTANT0("c4", "name", TRACE_EVENT_SCOPE_THREAD);
859 EndTraceAndFlush(); 878 EndTraceAndFlush();
860 std::vector<std::string> cats; 879 std::vector<std::string> cats;
861 TraceLog::GetInstance()->GetKnownCategories(&cats); 880 TraceLog::GetInstance()->GetKnownCategories(&cats);
862 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c1") != cats.end()); 881 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c1") != cats.end());
863 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c2") != cats.end()); 882 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c2") != cats.end());
864 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c3") != cats.end()); 883 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c3") != cats.end());
865 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c4") != cats.end()); 884 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c4") != cats.end());
866 885
867 const std::vector<std::string> empty_categories; 886 const std::vector<std::string> empty_categories;
868 std::vector<std::string> included_categories; 887 std::vector<std::string> included_categories;
869 std::vector<std::string> excluded_categories; 888 std::vector<std::string> excluded_categories;
870 889
871 // Test that category filtering works. 890 // Test that category filtering works.
872 891
873 // Include nonexistent category -> no events 892 // Include nonexistent category -> no events
874 Clear(); 893 Clear();
875 included_categories.clear(); 894 included_categories.clear();
876 included_categories.push_back("not_found823564786"); 895 included_categories.push_back("not_found823564786");
877 TraceLog::GetInstance()->SetEnabled(included_categories, empty_categories, 896 TraceLog::GetInstance()->SetEnabled(included_categories, empty_categories,
878 TraceLog::RECORD_UNTIL_FULL); 897 TraceLog::RECORD_UNTIL_FULL);
879 TRACE_EVENT_INSTANT0("cat1", "name"); 898 TRACE_EVENT_INSTANT0("cat1", "name", TRACE_EVENT_SCOPE_THREAD);
880 TRACE_EVENT_INSTANT0("cat2", "name"); 899 TRACE_EVENT_INSTANT0("cat2", "name", TRACE_EVENT_SCOPE_THREAD);
881 EndTraceAndFlush(); 900 EndTraceAndFlush();
882 EXPECT_TRUE(trace_parsed_.empty()); 901 EXPECT_TRUE(trace_parsed_.empty());
883 902
884 // Include existent category -> only events of that category 903 // Include existent category -> only events of that category
885 Clear(); 904 Clear();
886 included_categories.clear(); 905 included_categories.clear();
887 included_categories.push_back("inc"); 906 included_categories.push_back("inc");
888 TraceLog::GetInstance()->SetEnabled(included_categories, empty_categories, 907 TraceLog::GetInstance()->SetEnabled(included_categories, empty_categories,
889 TraceLog::RECORD_UNTIL_FULL); 908 TraceLog::RECORD_UNTIL_FULL);
890 TRACE_EVENT_INSTANT0("inc", "name"); 909 TRACE_EVENT_INSTANT0("inc", "name", TRACE_EVENT_SCOPE_THREAD);
891 TRACE_EVENT_INSTANT0("inc2", "name"); 910 TRACE_EVENT_INSTANT0("inc2", "name", TRACE_EVENT_SCOPE_THREAD);
892 EndTraceAndFlush(); 911 EndTraceAndFlush();
893 EXPECT_TRUE(FindMatchingValue("cat", "inc")); 912 EXPECT_TRUE(FindMatchingValue("cat", "inc"));
894 EXPECT_FALSE(FindNonMatchingValue("cat", "inc")); 913 EXPECT_FALSE(FindNonMatchingValue("cat", "inc"));
895 914
896 // Include existent wildcard -> all categories matching wildcard 915 // Include existent wildcard -> all categories matching wildcard
897 Clear(); 916 Clear();
898 included_categories.clear(); 917 included_categories.clear();
899 included_categories.push_back("inc_wildcard_*"); 918 included_categories.push_back("inc_wildcard_*");
900 included_categories.push_back("inc_wildchar_?_end"); 919 included_categories.push_back("inc_wildchar_?_end");
901 TraceLog::GetInstance()->SetEnabled(included_categories, empty_categories, 920 TraceLog::GetInstance()->SetEnabled(included_categories, empty_categories,
902 TraceLog::RECORD_UNTIL_FULL); 921 TraceLog::RECORD_UNTIL_FULL);
903 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "included"); 922 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "included",
904 TRACE_EVENT_INSTANT0("inc_wildcard_", "included"); 923 TRACE_EVENT_SCOPE_THREAD);
905 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "included"); 924 TRACE_EVENT_INSTANT0("inc_wildcard_", "included", TRACE_EVENT_SCOPE_THREAD);
906 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "not_inc"); 925 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "included",
907 TRACE_EVENT_INSTANT0("cat1", "not_inc"); 926 TRACE_EVENT_SCOPE_THREAD);
908 TRACE_EVENT_INSTANT0("cat2", "not_inc"); 927 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "not_inc",
928 TRACE_EVENT_SCOPE_THREAD);
929 TRACE_EVENT_INSTANT0("cat1", "not_inc", TRACE_EVENT_SCOPE_THREAD);
930 TRACE_EVENT_INSTANT0("cat2", "not_inc", TRACE_EVENT_SCOPE_THREAD);
909 EndTraceAndFlush(); 931 EndTraceAndFlush();
910 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_abc")); 932 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_abc"));
911 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_")); 933 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_"));
912 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_x_end")); 934 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_x_end"));
913 EXPECT_FALSE(FindMatchingValue("name", "not_inc")); 935 EXPECT_FALSE(FindMatchingValue("name", "not_inc"));
914 936
915 included_categories.clear(); 937 included_categories.clear();
916 938
917 // Exclude nonexistent category -> all events 939 // Exclude nonexistent category -> all events
918 Clear(); 940 Clear();
919 excluded_categories.clear(); 941 excluded_categories.clear();
920 excluded_categories.push_back("not_found823564786"); 942 excluded_categories.push_back("not_found823564786");
921 TraceLog::GetInstance()->SetEnabled(empty_categories, excluded_categories, 943 TraceLog::GetInstance()->SetEnabled(empty_categories, excluded_categories,
922 TraceLog::RECORD_UNTIL_FULL); 944 TraceLog::RECORD_UNTIL_FULL);
923 TRACE_EVENT_INSTANT0("cat1", "name"); 945 TRACE_EVENT_INSTANT0("cat1", "name", TRACE_EVENT_SCOPE_THREAD);
924 TRACE_EVENT_INSTANT0("cat2", "name"); 946 TRACE_EVENT_INSTANT0("cat2", "name", TRACE_EVENT_SCOPE_THREAD);
925 EndTraceAndFlush(); 947 EndTraceAndFlush();
926 EXPECT_TRUE(FindMatchingValue("cat", "cat1")); 948 EXPECT_TRUE(FindMatchingValue("cat", "cat1"));
927 EXPECT_TRUE(FindMatchingValue("cat", "cat2")); 949 EXPECT_TRUE(FindMatchingValue("cat", "cat2"));
928 950
929 // Exclude existent category -> only events of other categories 951 // Exclude existent category -> only events of other categories
930 Clear(); 952 Clear();
931 excluded_categories.clear(); 953 excluded_categories.clear();
932 excluded_categories.push_back("inc"); 954 excluded_categories.push_back("inc");
933 TraceLog::GetInstance()->SetEnabled(empty_categories, excluded_categories, 955 TraceLog::GetInstance()->SetEnabled(empty_categories, excluded_categories,
934 TraceLog::RECORD_UNTIL_FULL); 956 TraceLog::RECORD_UNTIL_FULL);
935 TRACE_EVENT_INSTANT0("inc", "name"); 957 TRACE_EVENT_INSTANT0("inc", "name", TRACE_EVENT_SCOPE_THREAD);
936 TRACE_EVENT_INSTANT0("inc2", "name"); 958 TRACE_EVENT_INSTANT0("inc2", "name", TRACE_EVENT_SCOPE_THREAD);
937 EndTraceAndFlush(); 959 EndTraceAndFlush();
938 EXPECT_TRUE(FindMatchingValue("cat", "inc2")); 960 EXPECT_TRUE(FindMatchingValue("cat", "inc2"));
939 EXPECT_FALSE(FindMatchingValue("cat", "inc")); 961 EXPECT_FALSE(FindMatchingValue("cat", "inc"));
940 962
941 // Exclude existent wildcard -> all categories not matching wildcard 963 // Exclude existent wildcard -> all categories not matching wildcard
942 Clear(); 964 Clear();
943 excluded_categories.clear(); 965 excluded_categories.clear();
944 excluded_categories.push_back("inc_wildcard_*"); 966 excluded_categories.push_back("inc_wildcard_*");
945 excluded_categories.push_back("inc_wildchar_?_end"); 967 excluded_categories.push_back("inc_wildchar_?_end");
946 TraceLog::GetInstance()->SetEnabled(empty_categories, excluded_categories, 968 TraceLog::GetInstance()->SetEnabled(empty_categories, excluded_categories,
947 TraceLog::RECORD_UNTIL_FULL); 969 TraceLog::RECORD_UNTIL_FULL);
948 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "not_inc"); 970 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "not_inc", TRACE_EVENT_SCOPE_THREAD);
949 TRACE_EVENT_INSTANT0("inc_wildcard_", "not_inc"); 971 TRACE_EVENT_INSTANT0("inc_wildcard_", "not_inc", TRACE_EVENT_SCOPE_THREAD);
950 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "not_inc"); 972 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "not_inc",
951 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "included"); 973 TRACE_EVENT_SCOPE_THREAD);
952 TRACE_EVENT_INSTANT0("cat1", "included"); 974 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "included",
953 TRACE_EVENT_INSTANT0("cat2", "included"); 975 TRACE_EVENT_SCOPE_THREAD);
976 TRACE_EVENT_INSTANT0("cat1", "included", TRACE_EVENT_SCOPE_THREAD);
977 TRACE_EVENT_INSTANT0("cat2", "included", TRACE_EVENT_SCOPE_THREAD);
954 EndTraceAndFlush(); 978 EndTraceAndFlush();
955 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_bla_end")); 979 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_bla_end"));
956 EXPECT_TRUE(FindMatchingValue("cat", "cat1")); 980 EXPECT_TRUE(FindMatchingValue("cat", "cat1"));
957 EXPECT_TRUE(FindMatchingValue("cat", "cat2")); 981 EXPECT_TRUE(FindMatchingValue("cat", "cat2"));
958 EXPECT_FALSE(FindMatchingValue("name", "not_inc")); 982 EXPECT_FALSE(FindMatchingValue("name", "not_inc"));
959 } 983 }
960 984
961 985
962 // Test EVENT_WATCH_NOTIFICATION 986 // Test EVENT_WATCH_NOTIFICATION
963 TEST_F(TraceEventTestFixture, EventWatchNotification) { 987 TEST_F(TraceEventTestFixture, EventWatchNotification) {
964 ManualTestSetUp(); 988 ManualTestSetUp();
965 989
966 // Basic one occurrence. 990 // Basic one occurrence.
967 BeginTrace(); 991 BeginTrace();
968 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); 992 TraceLog::GetInstance()->SetWatchEvent("cat", "event");
969 TRACE_EVENT_INSTANT0("cat", "event"); 993 TRACE_EVENT_INSTANT0("cat", "event", TRACE_EVENT_SCOPE_THREAD);
970 EndTraceAndFlush(); 994 EndTraceAndFlush();
971 EXPECT_EQ(event_watch_notification_, 1); 995 EXPECT_EQ(event_watch_notification_, 1);
972 996
973 // Basic one occurrence before Set. 997 // Basic one occurrence before Set.
974 BeginTrace(); 998 BeginTrace();
975 TRACE_EVENT_INSTANT0("cat", "event"); 999 TRACE_EVENT_INSTANT0("cat", "event", TRACE_EVENT_SCOPE_THREAD);
976 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); 1000 TraceLog::GetInstance()->SetWatchEvent("cat", "event");
977 EndTraceAndFlush(); 1001 EndTraceAndFlush();
978 EXPECT_EQ(event_watch_notification_, 1); 1002 EXPECT_EQ(event_watch_notification_, 1);
979 1003
980 // Auto-reset after end trace. 1004 // Auto-reset after end trace.
981 BeginTrace(); 1005 BeginTrace();
982 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); 1006 TraceLog::GetInstance()->SetWatchEvent("cat", "event");
983 EndTraceAndFlush(); 1007 EndTraceAndFlush();
984 BeginTrace(); 1008 BeginTrace();
985 TRACE_EVENT_INSTANT0("cat", "event"); 1009 TRACE_EVENT_INSTANT0("cat", "event", TRACE_EVENT_SCOPE_THREAD);
986 EndTraceAndFlush(); 1010 EndTraceAndFlush();
987 EXPECT_EQ(event_watch_notification_, 0); 1011 EXPECT_EQ(event_watch_notification_, 0);
988 1012
989 // Multiple occurrence. 1013 // Multiple occurrence.
990 BeginTrace(); 1014 BeginTrace();
991 int num_occurrences = 5; 1015 int num_occurrences = 5;
992 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); 1016 TraceLog::GetInstance()->SetWatchEvent("cat", "event");
993 for (int i = 0; i < num_occurrences; ++i) 1017 for (int i = 0; i < num_occurrences; ++i)
994 TRACE_EVENT_INSTANT0("cat", "event"); 1018 TRACE_EVENT_INSTANT0("cat", "event", TRACE_EVENT_SCOPE_THREAD);
995 EndTraceAndFlush(); 1019 EndTraceAndFlush();
996 EXPECT_EQ(event_watch_notification_, num_occurrences); 1020 EXPECT_EQ(event_watch_notification_, num_occurrences);
997 1021
998 // Wrong category. 1022 // Wrong category.
999 BeginTrace(); 1023 BeginTrace();
1000 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); 1024 TraceLog::GetInstance()->SetWatchEvent("cat", "event");
1001 TRACE_EVENT_INSTANT0("wrong_cat", "event"); 1025 TRACE_EVENT_INSTANT0("wrong_cat", "event", TRACE_EVENT_SCOPE_THREAD);
1002 EndTraceAndFlush(); 1026 EndTraceAndFlush();
1003 EXPECT_EQ(event_watch_notification_, 0); 1027 EXPECT_EQ(event_watch_notification_, 0);
1004 1028
1005 // Wrong name. 1029 // Wrong name.
1006 BeginTrace(); 1030 BeginTrace();
1007 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); 1031 TraceLog::GetInstance()->SetWatchEvent("cat", "event");
1008 TRACE_EVENT_INSTANT0("cat", "wrong_event"); 1032 TRACE_EVENT_INSTANT0("cat", "wrong_event", TRACE_EVENT_SCOPE_THREAD);
1009 EndTraceAndFlush(); 1033 EndTraceAndFlush();
1010 EXPECT_EQ(event_watch_notification_, 0); 1034 EXPECT_EQ(event_watch_notification_, 0);
1011 1035
1012 // Canceled. 1036 // Canceled.
1013 BeginTrace(); 1037 BeginTrace();
1014 TraceLog::GetInstance()->SetWatchEvent("cat", "event"); 1038 TraceLog::GetInstance()->SetWatchEvent("cat", "event");
1015 TraceLog::GetInstance()->CancelWatchEvent(); 1039 TraceLog::GetInstance()->CancelWatchEvent();
1016 TRACE_EVENT_INSTANT0("cat", "event"); 1040 TRACE_EVENT_INSTANT0("cat", "event", TRACE_EVENT_SCOPE_THREAD);
1017 EndTraceAndFlush(); 1041 EndTraceAndFlush();
1018 EXPECT_EQ(event_watch_notification_, 0); 1042 EXPECT_EQ(event_watch_notification_, 0);
1019 } 1043 }
1020 1044
1021 // Test ASYNC_BEGIN/END events 1045 // Test ASYNC_BEGIN/END events
1022 TEST_F(TraceEventTestFixture, AsyncBeginEndEvents) { 1046 TEST_F(TraceEventTestFixture, AsyncBeginEndEvents) {
1023 ManualTestSetUp(); 1047 ManualTestSetUp();
1024 BeginTrace(); 1048 BeginTrace();
1025 1049
1026 unsigned long long id = 0xfeedbeeffeedbeefull; 1050 unsigned long long id = 0xfeedbeeffeedbeefull;
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
1261 } 1285 }
1262 } 1286 }
1263 } 1287 }
1264 1288
1265 TEST_F(TraceEventTestFixture, ThreadNameChanges) { 1289 TEST_F(TraceEventTestFixture, ThreadNameChanges) {
1266 ManualTestSetUp(); 1290 ManualTestSetUp();
1267 1291
1268 BeginTrace(); 1292 BeginTrace();
1269 1293
1270 PlatformThread::SetName(""); 1294 PlatformThread::SetName("");
1271 TRACE_EVENT_INSTANT0("drink", "water"); 1295 TRACE_EVENT_INSTANT0("drink", "water", TRACE_EVENT_SCOPE_THREAD);
1272 1296
1273 PlatformThread::SetName("cafe"); 1297 PlatformThread::SetName("cafe");
1274 TRACE_EVENT_INSTANT0("drink", "coffee"); 1298 TRACE_EVENT_INSTANT0("drink", "coffee", TRACE_EVENT_SCOPE_THREAD);
1275 1299
1276 PlatformThread::SetName("shop"); 1300 PlatformThread::SetName("shop");
1277 // No event here, so won't appear in combined name. 1301 // No event here, so won't appear in combined name.
1278 1302
1279 PlatformThread::SetName("pub"); 1303 PlatformThread::SetName("pub");
1280 TRACE_EVENT_INSTANT0("drink", "beer"); 1304 TRACE_EVENT_INSTANT0("drink", "beer", TRACE_EVENT_SCOPE_THREAD);
1281 TRACE_EVENT_INSTANT0("drink", "wine"); 1305 TRACE_EVENT_INSTANT0("drink", "wine", TRACE_EVENT_SCOPE_THREAD);
1282 1306
1283 PlatformThread::SetName(" bar"); 1307 PlatformThread::SetName(" bar");
1284 TRACE_EVENT_INSTANT0("drink", "whisky"); 1308 TRACE_EVENT_INSTANT0("drink", "whisky", TRACE_EVENT_SCOPE_THREAD);
1285 1309
1286 EndTraceAndFlush(); 1310 EndTraceAndFlush();
1287 1311
1288 std::vector<const DictionaryValue*> items = 1312 std::vector<const DictionaryValue*> items =
1289 FindTraceEntries(trace_parsed_, "thread_name"); 1313 FindTraceEntries(trace_parsed_, "thread_name");
1290 EXPECT_EQ(1u, items.size()); 1314 EXPECT_EQ(1u, items.size());
1291 ASSERT_GT(items.size(), 0u); 1315 ASSERT_GT(items.size(), 0u);
1292 const DictionaryValue* item = items[0]; 1316 const DictionaryValue* item = items[0];
1293 ASSERT_TRUE(item); 1317 ASSERT_TRUE(item);
1294 int tid; 1318 int tid;
(...skipping 18 matching lines...) Expand all
1313 // recorded after the system is started again. 1337 // recorded after the system is started again.
1314 for (int i = 0; i < 4; i++) { 1338 for (int i = 0; i < 4; i++) {
1315 // Scope to contain the then destroy the TraceLog singleton. 1339 // Scope to contain the then destroy the TraceLog singleton.
1316 { 1340 {
1317 base::ShadowingAtExitManager exit_manager_will_destroy_singletons; 1341 base::ShadowingAtExitManager exit_manager_will_destroy_singletons;
1318 1342
1319 // Setup TraceLog singleton inside this test's exit manager scope 1343 // Setup TraceLog singleton inside this test's exit manager scope
1320 // so that it will be destroyed when this scope closes. 1344 // so that it will be destroyed when this scope closes.
1321 ManualTestSetUp(); 1345 ManualTestSetUp();
1322 1346
1323 TRACE_EVENT_INSTANT0("all", "not recorded; system not enabled"); 1347 TRACE_EVENT_INSTANT0("all", "not recorded; system not enabled",
1348 TRACE_EVENT_SCOPE_THREAD);
1324 1349
1325 BeginTrace(); 1350 BeginTrace();
1326 1351
1327 TRACE_EVENT_INSTANT0("all", "is recorded 1; system has been enabled"); 1352 TRACE_EVENT_INSTANT0("all", "is recorded 1; system has been enabled",
1353 TRACE_EVENT_SCOPE_THREAD);
1328 // Trace calls that will cache pointers to categories; they're valid here 1354 // Trace calls that will cache pointers to categories; they're valid here
1329 TraceCallsWithCachedCategoryPointersPointers( 1355 TraceCallsWithCachedCategoryPointersPointers(
1330 "is recorded 2; system has been enabled"); 1356 "is recorded 2; system has been enabled");
1331 1357
1332 EndTraceAndFlush(); 1358 EndTraceAndFlush();
1333 } // scope to destroy singleton 1359 } // scope to destroy singleton
1334 ASSERT_FALSE(TraceLog::GetInstance()); 1360 ASSERT_FALSE(TraceLog::GetInstance());
1335 1361
1336 // Now that singleton is destroyed, check what trace events were recorded 1362 // Now that singleton is destroyed, check what trace events were recorded
1337 const DictionaryValue* item = NULL; 1363 const DictionaryValue* item = NULL;
1338 ListValue& trace_parsed = trace_parsed_; 1364 ListValue& trace_parsed = trace_parsed_;
1339 EXPECT_FIND_("is recorded 1"); 1365 EXPECT_FIND_("is recorded 1");
1340 EXPECT_FIND_("is recorded 2"); 1366 EXPECT_FIND_("is recorded 2");
1341 EXPECT_NOT_FIND_("not recorded"); 1367 EXPECT_NOT_FIND_("not recorded");
1342 1368
1343 // Make additional trace event calls on the shutdown system. They should 1369 // Make additional trace event calls on the shutdown system. They should
1344 // all pass cleanly, but the data not be recorded. We'll verify that next 1370 // all pass cleanly, but the data not be recorded. We'll verify that next
1345 // time around the loop (the only way to flush the trace buffers). 1371 // time around the loop (the only way to flush the trace buffers).
1346 TRACE_EVENT_BEGIN_ETW("not recorded; system shutdown", 0, NULL); 1372 TRACE_EVENT_BEGIN_ETW("not recorded; system shutdown", 0, NULL);
1347 TRACE_EVENT_END_ETW("not recorded; system shutdown", 0, NULL); 1373 TRACE_EVENT_END_ETW("not recorded; system shutdown", 0, NULL);
1348 TRACE_EVENT_INSTANT_ETW("not recorded; system shutdown", 0, NULL); 1374 TRACE_EVENT_INSTANT_ETW("not recorded; system shutdown", 0, NULL);
1349 TRACE_EVENT0("all", "not recorded; system shutdown"); 1375 TRACE_EVENT0("all", "not recorded; system shutdown");
1350 TRACE_EVENT_INSTANT0("all", "not recorded; system shutdown"); 1376 TRACE_EVENT_INSTANT0("all", "not recorded; system shutdown",
1377 TRACE_EVENT_SCOPE_THREAD);
1351 TRACE_EVENT_BEGIN0("all", "not recorded; system shutdown"); 1378 TRACE_EVENT_BEGIN0("all", "not recorded; system shutdown");
1352 TRACE_EVENT_END0("all", "not recorded; system shutdown"); 1379 TRACE_EVENT_END0("all", "not recorded; system shutdown");
1353 1380
1354 TRACE_EVENT0("new category 0!", "not recorded; system shutdown"); 1381 TRACE_EVENT0("new category 0!", "not recorded; system shutdown");
1355 TRACE_EVENT_INSTANT0("new category 1!", "not recorded; system shutdown"); 1382 TRACE_EVENT_INSTANT0("new category 1!", "not recorded; system shutdown",
1383 TRACE_EVENT_SCOPE_THREAD);
1356 TRACE_EVENT_BEGIN0("new category 2!", "not recorded; system shutdown"); 1384 TRACE_EVENT_BEGIN0("new category 2!", "not recorded; system shutdown");
1357 TRACE_EVENT_END0("new category 3!", "not recorded; system shutdown"); 1385 TRACE_EVENT_END0("new category 3!", "not recorded; system shutdown");
1358 1386
1359 // Cached categories should be safe to check, and still disable traces 1387 // Cached categories should be safe to check, and still disable traces
1360 TraceCallsWithCachedCategoryPointersPointers( 1388 TraceCallsWithCachedCategoryPointersPointers(
1361 "not recorded; system shutdown"); 1389 "not recorded; system shutdown");
1362 } 1390 }
1363 } 1391 }
1364 1392
1365 TEST_F(TraceEventTestFixture, NormallyNoDeepCopy) { 1393 TEST_F(TraceEventTestFixture, NormallyNoDeepCopy) {
1366 // Test that the TRACE_EVENT macros do not deep-copy their string. If they 1394 // Test that the TRACE_EVENT macros do not deep-copy their string. If they
1367 // do so it may indicate a performance regression, but more-over it would 1395 // do so it may indicate a performance regression, but more-over it would
1368 // make the DEEP_COPY overloads redundant. 1396 // make the DEEP_COPY overloads redundant.
1369 ManualTestSetUp(); 1397 ManualTestSetUp();
1370 1398
1371 std::string name_string("event name"); 1399 std::string name_string("event name");
1372 1400
1373 BeginTrace(); 1401 BeginTrace();
1374 TRACE_EVENT_INSTANT0("category", name_string.c_str()); 1402 TRACE_EVENT_INSTANT0("category", name_string.c_str(),
1403 TRACE_EVENT_SCOPE_THREAD);
1375 1404
1376 // Modify the string in place (a wholesale reassignment may leave the old 1405 // Modify the string in place (a wholesale reassignment may leave the old
1377 // string intact on the heap). 1406 // string intact on the heap).
1378 name_string[0] = '@'; 1407 name_string[0] = '@';
1379 1408
1380 EndTraceAndFlush(); 1409 EndTraceAndFlush();
1381 1410
1382 EXPECT_FALSE(FindTraceEntry(trace_parsed_, "event name")); 1411 EXPECT_FALSE(FindTraceEntry(trace_parsed_, "event name"));
1383 EXPECT_TRUE(FindTraceEntry(trace_parsed_, name_string.c_str())); 1412 EXPECT_TRUE(FindTraceEntry(trace_parsed_, name_string.c_str()));
1384 } 1413 }
1385 1414
1386 TEST_F(TraceEventTestFixture, DeepCopy) { 1415 TEST_F(TraceEventTestFixture, DeepCopy) {
1387 ManualTestSetUp(); 1416 ManualTestSetUp();
1388 1417
1389 static const char kOriginalName1[] = "name1"; 1418 static const char kOriginalName1[] = "name1";
1390 static const char kOriginalName2[] = "name2"; 1419 static const char kOriginalName2[] = "name2";
1391 static const char kOriginalName3[] = "name3"; 1420 static const char kOriginalName3[] = "name3";
1392 std::string name1(kOriginalName1); 1421 std::string name1(kOriginalName1);
1393 std::string name2(kOriginalName2); 1422 std::string name2(kOriginalName2);
1394 std::string name3(kOriginalName3); 1423 std::string name3(kOriginalName3);
1395 std::string arg1("arg1"); 1424 std::string arg1("arg1");
1396 std::string arg2("arg2"); 1425 std::string arg2("arg2");
1397 std::string val1("val1"); 1426 std::string val1("val1");
1398 std::string val2("val2"); 1427 std::string val2("val2");
1399 1428
1400 BeginTrace(); 1429 BeginTrace();
1401 TRACE_EVENT_COPY_INSTANT0("category", name1.c_str()); 1430 TRACE_EVENT_COPY_INSTANT0("category", name1.c_str(),
1431 TRACE_EVENT_SCOPE_THREAD);
1402 TRACE_EVENT_COPY_BEGIN1("category", name2.c_str(), 1432 TRACE_EVENT_COPY_BEGIN1("category", name2.c_str(),
1403 arg1.c_str(), 5); 1433 arg1.c_str(), 5);
1404 TRACE_EVENT_COPY_END2("category", name3.c_str(), 1434 TRACE_EVENT_COPY_END2("category", name3.c_str(),
1405 arg1.c_str(), val1, 1435 arg1.c_str(), val1,
1406 arg2.c_str(), val2); 1436 arg2.c_str(), val2);
1407 1437
1408 // As per NormallyNoDeepCopy, modify the strings in place. 1438 // As per NormallyNoDeepCopy, modify the strings in place.
1409 name1[0] = name2[0] = name3[0] = arg1[0] = arg2[0] = val1[0] = val2[0] = '@'; 1439 name1[0] = name2[0] = name3[0] = arg1[0] = arg2[0] = val1[0] = val2[0] = '@';
1410 1440
1411 EndTraceAndFlush(); 1441 EndTraceAndFlush();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
1455 EXPECT_STREQ(json_output_.json_output.c_str(), "[bla1,bla2,bla3,bla4]"); 1485 EXPECT_STREQ(json_output_.json_output.c_str(), "[bla1,bla2,bla3,bla4]");
1456 } 1486 }
1457 1487
1458 // Test that trace_event parameters are not evaluated if the tracing 1488 // Test that trace_event parameters are not evaluated if the tracing
1459 // system is disabled. 1489 // system is disabled.
1460 TEST_F(TraceEventTestFixture, TracingIsLazy) { 1490 TEST_F(TraceEventTestFixture, TracingIsLazy) {
1461 ManualTestSetUp(); 1491 ManualTestSetUp();
1462 BeginTrace(); 1492 BeginTrace();
1463 1493
1464 int a = 0; 1494 int a = 0;
1465 TRACE_EVENT_INSTANT1("category", "test", "a", a++); 1495 TRACE_EVENT_INSTANT1("category", "test", TRACE_EVENT_SCOPE_THREAD, "a", a++);
1466 EXPECT_EQ(1, a); 1496 EXPECT_EQ(1, a);
1467 1497
1468 TraceLog::GetInstance()->SetDisabled(); 1498 TraceLog::GetInstance()->SetDisabled();
1469 1499
1470 TRACE_EVENT_INSTANT1("category", "test", "a", a++); 1500 TRACE_EVENT_INSTANT1("category", "test", TRACE_EVENT_SCOPE_THREAD, "a", a++);
1471 EXPECT_EQ(1, a); 1501 EXPECT_EQ(1, a);
1472 1502
1473 EndTraceAndFlush(); 1503 EndTraceAndFlush();
1474 } 1504 }
1475 1505
1476 TEST_F(TraceEventTestFixture, TraceEnableDisable) { 1506 TEST_F(TraceEventTestFixture, TraceEnableDisable) {
1477 ManualTestSetUp(); 1507 ManualTestSetUp();
1478 1508
1479 TraceLog* trace_log = TraceLog::GetInstance(); 1509 TraceLog* trace_log = TraceLog::GetInstance();
1480 trace_log->SetEnabled(std::string(), TraceLog::RECORD_UNTIL_FULL); 1510 trace_log->SetEnabled(std::string(), TraceLog::RECORD_UNTIL_FULL);
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
1588 const unsigned char arg_types[], 1618 const unsigned char arg_types[],
1589 const unsigned long long arg_values[], 1619 const unsigned long long arg_values[],
1590 unsigned char flags) { 1620 unsigned char flags) {
1591 s_instance->collected_events_.push_back(name); 1621 s_instance->collected_events_.push_back(name);
1592 } 1622 }
1593 }; 1623 };
1594 1624
1595 TraceEventCallbackTest* TraceEventCallbackTest::s_instance; 1625 TraceEventCallbackTest* TraceEventCallbackTest::s_instance;
1596 1626
1597 TEST_F(TraceEventCallbackTest, TraceEventCallback) { 1627 TEST_F(TraceEventCallbackTest, TraceEventCallback) {
1598 TRACE_EVENT_INSTANT0("all", "before enable"); 1628 TRACE_EVENT_INSTANT0("all", "before enable", TRACE_EVENT_SCOPE_GLOBAL);
1599 TraceLog::GetInstance()->SetEnabled(true, TraceLog::RECORD_UNTIL_FULL); 1629 TraceLog::GetInstance()->SetEnabled(true, TraceLog::RECORD_UNTIL_FULL);
1600 TRACE_EVENT_INSTANT0("all", "before callback set"); 1630 TRACE_EVENT_INSTANT0("all", "before callback set", TRACE_EVENT_SCOPE_GLOBAL);
1601 TraceLog::GetInstance()->SetEventCallback(Callback); 1631 TraceLog::GetInstance()->SetEventCallback(Callback);
1602 TRACE_EVENT_INSTANT0("all", "event1"); 1632 TRACE_EVENT_INSTANT0("all", "event1", TRACE_EVENT_SCOPE_GLOBAL);
1603 TRACE_EVENT_INSTANT0("all", "event2"); 1633 TRACE_EVENT_INSTANT0("all", "event2", TRACE_EVENT_SCOPE_GLOBAL);
1604 TraceLog::GetInstance()->SetEventCallback(NULL); 1634 TraceLog::GetInstance()->SetEventCallback(NULL);
1605 TRACE_EVENT_INSTANT0("all", "after callback removed"); 1635 TRACE_EVENT_INSTANT0("all", "after callback removed",
1636 TRACE_EVENT_SCOPE_GLOBAL);
1606 EXPECT_EQ(2u, collected_events_.size()); 1637 EXPECT_EQ(2u, collected_events_.size());
1607 EXPECT_EQ("event1", collected_events_[0]); 1638 EXPECT_EQ("event1", collected_events_[0]);
1608 EXPECT_EQ("event2", collected_events_[1]); 1639 EXPECT_EQ("event2", collected_events_[1]);
1609 } 1640 }
1610 1641
1611 // TODO(dsinclair): Continuous Tracing unit test. 1642 // TODO(dsinclair): Continuous Tracing unit test.
1612 1643
1613 } // namespace debug 1644 } // namespace debug
1614 } // namespace base 1645 } // namespace base
OLDNEW
« no previous file with comments | « base/debug/trace_event_internal.h ('k') | base/test/trace_event_analyzer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698