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

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

Issue 12150004: Category group support/Renamings. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Added destructor for CategoryFilter class per CQ failure. Created 7 years, 8 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
« no previous file with comments | « base/debug/trace_event_impl.cc ('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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
66 const char* value); 66 const char* value);
67 bool FindNonMatchingValue(const char* key, 67 bool FindNonMatchingValue(const char* key,
68 const char* value); 68 const char* value);
69 void Clear() { 69 void Clear() {
70 trace_parsed_.Clear(); 70 trace_parsed_.Clear();
71 json_output_.json_output.clear(); 71 json_output_.json_output.clear();
72 } 72 }
73 73
74 void BeginTrace() { 74 void BeginTrace() {
75 event_watch_notification_ = 0; 75 event_watch_notification_ = 0;
76 TraceLog::GetInstance()->SetEnabled(std::string("*"), 76 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
77 TraceLog::RECORD_UNTIL_FULL); 77 TraceLog::RECORD_UNTIL_FULL);
78 } 78 }
79 79
80 void EndTraceAndFlush() { 80 void EndTraceAndFlush() {
81 while (TraceLog::GetInstance()->IsEnabled()) 81 while (TraceLog::GetInstance()->IsEnabled())
82 TraceLog::GetInstance()->SetDisabled(); 82 TraceLog::GetInstance()->SetDisabled();
83 TraceLog::GetInstance()->Flush( 83 TraceLog::GetInstance()->Flush(
84 base::Bind(&TraceEventTestFixture::OnTraceDataCollected, 84 base::Bind(&TraceEventTestFixture::OnTraceDataCollected,
85 base::Unretained(this))); 85 base::Unretained(this)));
86 } 86 }
(...skipping 679 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 void HighResSleepForTraceTest(base::TimeDelta elapsed) { 766 void HighResSleepForTraceTest(base::TimeDelta elapsed) {
767 base::TimeTicks end_time = base::TimeTicks::HighResNow() + elapsed; 767 base::TimeTicks end_time = base::TimeTicks::HighResNow() + elapsed;
768 do { 768 do {
769 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1)); 769 base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(1));
770 } while (base::TimeTicks::HighResNow() < end_time); 770 } while (base::TimeTicks::HighResNow() < end_time);
771 } 771 }
772 772
773 // Simple Test for emitting data and validating it was received. 773 // Simple Test for emitting data and validating it was received.
774 TEST_F(TraceEventTestFixture, DataCaptured) { 774 TEST_F(TraceEventTestFixture, DataCaptured) {
775 ManualTestSetUp(); 775 ManualTestSetUp();
776 TraceLog::GetInstance()->SetEnabled(true, TraceLog::RECORD_UNTIL_FULL); 776 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
777 TraceLog::RECORD_UNTIL_FULL);
777 778
778 TraceWithAllMacroVariants(NULL); 779 TraceWithAllMacroVariants(NULL);
779 780
780 EndTraceAndFlush(); 781 EndTraceAndFlush();
781 782
782 ValidateAllTraceMacrosCreatedData(trace_parsed_); 783 ValidateAllTraceMacrosCreatedData(trace_parsed_);
783 } 784 }
784 785
785 class MockEnabledStateChangedObserver : 786 class MockEnabledStateChangedObserver :
786 public base::debug::TraceLog::EnabledStateChangedObserver { 787 public base::debug::TraceLog::EnabledStateChangedObserver {
787 public: 788 public:
788 MOCK_METHOD0(OnTraceLogWillEnable, void()); 789 MOCK_METHOD0(OnTraceLogWillEnable, void());
789 MOCK_METHOD0(OnTraceLogWillDisable, void()); 790 MOCK_METHOD0(OnTraceLogWillDisable, void());
790 }; 791 };
791 792
792 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnEnable) { 793 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnEnable) {
793 ManualTestSetUp(); 794 ManualTestSetUp();
794 795
795 MockEnabledStateChangedObserver observer; 796 MockEnabledStateChangedObserver observer;
796 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); 797 TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
797 798
798 EXPECT_CALL(observer, OnTraceLogWillEnable()) 799 EXPECT_CALL(observer, OnTraceLogWillEnable())
799 .Times(1); 800 .Times(1);
800 TraceLog::GetInstance()->SetEnabled(true, TraceLog::RECORD_UNTIL_FULL); 801 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
802 TraceLog::RECORD_UNTIL_FULL);
801 testing::Mock::VerifyAndClear(&observer); 803 testing::Mock::VerifyAndClear(&observer);
802 804
803 // Cleanup. 805 // Cleanup.
804 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); 806 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
805 TraceLog::GetInstance()->SetEnabled(false, TraceLog::RECORD_UNTIL_FULL); 807 TraceLog::GetInstance()->SetDisabled();
806 } 808 }
807 809
808 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnSecondEnable) { 810 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnSecondEnable) {
809 ManualTestSetUp(); 811 ManualTestSetUp();
810 812
811 TraceLog::GetInstance()->SetEnabled(true, TraceLog::RECORD_UNTIL_FULL); 813 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
814 TraceLog::RECORD_UNTIL_FULL);
812 815
813 testing::StrictMock<MockEnabledStateChangedObserver> observer; 816 testing::StrictMock<MockEnabledStateChangedObserver> observer;
814 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); 817 TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
815 818
816 EXPECT_CALL(observer, OnTraceLogWillEnable()) 819 EXPECT_CALL(observer, OnTraceLogWillEnable())
817 .Times(0); 820 .Times(0);
818 EXPECT_CALL(observer, OnTraceLogWillDisable()) 821 EXPECT_CALL(observer, OnTraceLogWillDisable())
819 .Times(0); 822 .Times(0);
820 TraceLog::GetInstance()->SetEnabled(true, TraceLog::RECORD_UNTIL_FULL); 823 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
824 TraceLog::RECORD_UNTIL_FULL);
821 testing::Mock::VerifyAndClear(&observer); 825 testing::Mock::VerifyAndClear(&observer);
822 826
823 // Cleanup. 827 // Cleanup.
824 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); 828 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
825 TraceLog::GetInstance()->SetEnabled(false, TraceLog::RECORD_UNTIL_FULL); 829 TraceLog::GetInstance()->SetDisabled();
826 TraceLog::GetInstance()->SetEnabled(false, TraceLog::RECORD_UNTIL_FULL); 830 TraceLog::GetInstance()->SetDisabled();
827 } 831 }
828 832
829 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnNestedDisable) { 833 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnNestedDisable) {
830 ManualTestSetUp(); 834 ManualTestSetUp();
831 835
832 TraceLog::GetInstance()->SetEnabled(true, TraceLog::RECORD_UNTIL_FULL); 836 CategoryFilter cf_inc_all("*");
833 TraceLog::GetInstance()->SetEnabled(true, TraceLog::RECORD_UNTIL_FULL); 837 TraceLog::GetInstance()->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL);
838 TraceLog::GetInstance()->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL);
834 839
835 testing::StrictMock<MockEnabledStateChangedObserver> observer; 840 testing::StrictMock<MockEnabledStateChangedObserver> observer;
836 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); 841 TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
837 842
838 EXPECT_CALL(observer, OnTraceLogWillEnable()) 843 EXPECT_CALL(observer, OnTraceLogWillEnable())
839 .Times(0); 844 .Times(0);
840 EXPECT_CALL(observer, OnTraceLogWillDisable()) 845 EXPECT_CALL(observer, OnTraceLogWillDisable())
841 .Times(0); 846 .Times(0);
842 TraceLog::GetInstance()->SetEnabled(false, TraceLog::RECORD_UNTIL_FULL); 847 TraceLog::GetInstance()->SetDisabled();
843 testing::Mock::VerifyAndClear(&observer); 848 testing::Mock::VerifyAndClear(&observer);
844 849
845 // Cleanup. 850 // Cleanup.
846 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); 851 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
847 TraceLog::GetInstance()->SetEnabled(false, TraceLog::RECORD_UNTIL_FULL); 852 TraceLog::GetInstance()->SetDisabled();
848 } 853 }
849 854
850 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnDisable) { 855 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnDisable) {
851 ManualTestSetUp(); 856 ManualTestSetUp();
852 857
853 TraceLog::GetInstance()->SetEnabled(true, TraceLog::RECORD_UNTIL_FULL); 858 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
859 TraceLog::RECORD_UNTIL_FULL);
854 860
855 MockEnabledStateChangedObserver observer; 861 MockEnabledStateChangedObserver observer;
856 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); 862 TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
857 863
858 EXPECT_CALL(observer, OnTraceLogWillDisable()) 864 EXPECT_CALL(observer, OnTraceLogWillDisable())
859 .Times(1); 865 .Times(1);
860 TraceLog::GetInstance()->SetEnabled(false, TraceLog::RECORD_UNTIL_FULL); 866 TraceLog::GetInstance()->SetDisabled();
861 testing::Mock::VerifyAndClear(&observer); 867 testing::Mock::VerifyAndClear(&observer);
862 868
863 // Cleanup. 869 // Cleanup.
864 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); 870 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
865 } 871 }
866 872
867 // Test that categories work. 873 // Test that categories work.
868 TEST_F(TraceEventTestFixture, Categories) { 874 TEST_F(TraceEventTestFixture, Categories) {
869 ManualTestSetUp(); 875 ManualTestSetUp();
870 876
871 // Test that categories that are used can be retrieved whether trace was 877 // Test that categories that are used can be retrieved whether trace was
872 // enabled or disabled when the trace event was encountered. 878 // enabled or disabled when the trace event was encountered.
873 TRACE_EVENT_INSTANT0("c1", "name", TRACE_EVENT_SCOPE_THREAD); 879 TRACE_EVENT_INSTANT0("c1", "name", TRACE_EVENT_SCOPE_THREAD);
874 TRACE_EVENT_INSTANT0("c2", "name", TRACE_EVENT_SCOPE_THREAD); 880 TRACE_EVENT_INSTANT0("c2", "name", TRACE_EVENT_SCOPE_THREAD);
875 BeginTrace(); 881 BeginTrace();
876 TRACE_EVENT_INSTANT0("c3", "name", TRACE_EVENT_SCOPE_THREAD); 882 TRACE_EVENT_INSTANT0("c3", "name", TRACE_EVENT_SCOPE_THREAD);
877 TRACE_EVENT_INSTANT0("c4", "name", TRACE_EVENT_SCOPE_THREAD); 883 TRACE_EVENT_INSTANT0("c4", "name", TRACE_EVENT_SCOPE_THREAD);
884 // Category groups containing more than one category.
885 TRACE_EVENT_INSTANT0("c5,c6", "name", TRACE_EVENT_SCOPE_THREAD);
886 TRACE_EVENT_INSTANT0("c7,c8", "name", TRACE_EVENT_SCOPE_THREAD);
887
878 EndTraceAndFlush(); 888 EndTraceAndFlush();
879 std::vector<std::string> cats; 889 std::vector<std::string> cat_groups;
880 TraceLog::GetInstance()->GetKnownCategories(&cats); 890 TraceLog::GetInstance()->GetKnownCategoryGroups(&cat_groups);
881 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c1") != cats.end()); 891 EXPECT_TRUE(std::find(cat_groups.begin(),
882 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c2") != cats.end()); 892 cat_groups.end(), "c1") != cat_groups.end());
883 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c3") != cats.end()); 893 EXPECT_TRUE(std::find(cat_groups.begin(),
884 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "c4") != cats.end()); 894 cat_groups.end(), "c2") != cat_groups.end());
885 // Make sure metadata isn't returned. 895 EXPECT_TRUE(std::find(cat_groups.begin(),
886 EXPECT_TRUE(std::find(cats.begin(), cats.end(), "__metadata") == cats.end()); 896 cat_groups.end(), "c3") != cat_groups.end());
897 EXPECT_TRUE(std::find(cat_groups.begin(),
898 cat_groups.end(), "c4") != cat_groups.end());
899 EXPECT_TRUE(std::find(cat_groups.begin(),
900 cat_groups.end(), "c5,c6") != cat_groups.end());
901 EXPECT_TRUE(std::find(cat_groups.begin(),
902 cat_groups.end(), "c7,c8") != cat_groups.end());
903
887 const std::vector<std::string> empty_categories; 904 const std::vector<std::string> empty_categories;
888 std::vector<std::string> included_categories; 905 std::vector<std::string> included_categories;
889 std::vector<std::string> excluded_categories; 906 std::vector<std::string> excluded_categories;
890 907
891 // Test that category filtering works. 908 // Test that category filtering works.
892 909
893 // Include nonexistent category -> no events 910 // Include nonexistent category -> no events
894 Clear(); 911 Clear();
895 included_categories.clear(); 912 included_categories.clear();
896 included_categories.push_back("not_found823564786"); 913 TraceLog::GetInstance()->SetEnabled(CategoryFilter("not_found823564786"),
897 TraceLog::GetInstance()->SetEnabled(included_categories, empty_categories,
898 TraceLog::RECORD_UNTIL_FULL); 914 TraceLog::RECORD_UNTIL_FULL);
899 TRACE_EVENT_INSTANT0("cat1", "name", TRACE_EVENT_SCOPE_THREAD); 915 TRACE_EVENT_INSTANT0("cat1", "name", TRACE_EVENT_SCOPE_THREAD);
900 TRACE_EVENT_INSTANT0("cat2", "name", TRACE_EVENT_SCOPE_THREAD); 916 TRACE_EVENT_INSTANT0("cat2", "name", TRACE_EVENT_SCOPE_THREAD);
901 EndTraceAndFlush(); 917 EndTraceAndFlush();
902 EXPECT_TRUE(trace_parsed_.empty()); 918 EXPECT_TRUE(trace_parsed_.empty());
903 919
904 // Include existent category -> only events of that category 920 // Include existent category -> only events of that category
905 Clear(); 921 Clear();
906 included_categories.clear(); 922 included_categories.clear();
907 included_categories.push_back("inc"); 923 TraceLog::GetInstance()->SetEnabled(CategoryFilter("inc"),
908 TraceLog::GetInstance()->SetEnabled(included_categories, empty_categories,
909 TraceLog::RECORD_UNTIL_FULL); 924 TraceLog::RECORD_UNTIL_FULL);
910 TRACE_EVENT_INSTANT0("inc", "name", TRACE_EVENT_SCOPE_THREAD); 925 TRACE_EVENT_INSTANT0("inc", "name", TRACE_EVENT_SCOPE_THREAD);
911 TRACE_EVENT_INSTANT0("inc2", "name", TRACE_EVENT_SCOPE_THREAD); 926 TRACE_EVENT_INSTANT0("inc2", "name", TRACE_EVENT_SCOPE_THREAD);
912 EndTraceAndFlush(); 927 EndTraceAndFlush();
913 EXPECT_TRUE(FindMatchingValue("cat", "inc")); 928 EXPECT_TRUE(FindMatchingValue("cat", "inc"));
914 EXPECT_FALSE(FindNonMatchingValue("cat", "inc")); 929 EXPECT_FALSE(FindNonMatchingValue("cat", "inc"));
915 930
916 // Include existent wildcard -> all categories matching wildcard 931 // Include existent wildcard -> all categories matching wildcard
917 Clear(); 932 Clear();
918 included_categories.clear(); 933 included_categories.clear();
919 included_categories.push_back("inc_wildcard_*"); 934 TraceLog::GetInstance()->SetEnabled(
920 included_categories.push_back("inc_wildchar_?_end"); 935 CategoryFilter("inc_wildcard_*,inc_wildchar_?_end"),
921 TraceLog::GetInstance()->SetEnabled(included_categories, empty_categories, 936 TraceLog::RECORD_UNTIL_FULL);
922 TraceLog::RECORD_UNTIL_FULL);
923 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "included", 937 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "included",
924 TRACE_EVENT_SCOPE_THREAD); 938 TRACE_EVENT_SCOPE_THREAD);
925 TRACE_EVENT_INSTANT0("inc_wildcard_", "included", TRACE_EVENT_SCOPE_THREAD); 939 TRACE_EVENT_INSTANT0("inc_wildcard_", "included", TRACE_EVENT_SCOPE_THREAD);
926 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "included", 940 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "included",
927 TRACE_EVENT_SCOPE_THREAD); 941 TRACE_EVENT_SCOPE_THREAD);
928 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "not_inc", 942 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "not_inc",
929 TRACE_EVENT_SCOPE_THREAD); 943 TRACE_EVENT_SCOPE_THREAD);
930 TRACE_EVENT_INSTANT0("cat1", "not_inc", TRACE_EVENT_SCOPE_THREAD); 944 TRACE_EVENT_INSTANT0("cat1", "not_inc", TRACE_EVENT_SCOPE_THREAD);
931 TRACE_EVENT_INSTANT0("cat2", "not_inc", TRACE_EVENT_SCOPE_THREAD); 945 TRACE_EVENT_INSTANT0("cat2", "not_inc", TRACE_EVENT_SCOPE_THREAD);
946 TRACE_EVENT_INSTANT0("inc_wildcard_category,other_category", "included",
947 TRACE_EVENT_SCOPE_THREAD);
948 TRACE_EVENT_INSTANT0(
949 "non_included_category,inc_wildcard_category", "included",
950 TRACE_EVENT_SCOPE_THREAD);
932 EndTraceAndFlush(); 951 EndTraceAndFlush();
933 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_abc")); 952 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_abc"));
934 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_")); 953 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_"));
935 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_x_end")); 954 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_x_end"));
936 EXPECT_FALSE(FindMatchingValue("name", "not_inc")); 955 EXPECT_FALSE(FindMatchingValue("name", "not_inc"));
956 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_category,other_category"));
957 EXPECT_TRUE(FindMatchingValue("cat",
958 "non_included_category,inc_wildcard_category"));
937 959
938 included_categories.clear(); 960 included_categories.clear();
939 961
940 // Exclude nonexistent category -> all events 962 // Exclude nonexistent category -> all events
941 Clear(); 963 Clear();
942 excluded_categories.clear(); 964 TraceLog::GetInstance()->SetEnabled(CategoryFilter("-not_found823564786"),
943 excluded_categories.push_back("not_found823564786");
944 TraceLog::GetInstance()->SetEnabled(empty_categories, excluded_categories,
945 TraceLog::RECORD_UNTIL_FULL); 965 TraceLog::RECORD_UNTIL_FULL);
946 TRACE_EVENT_INSTANT0("cat1", "name", TRACE_EVENT_SCOPE_THREAD); 966 TRACE_EVENT_INSTANT0("cat1", "name", TRACE_EVENT_SCOPE_THREAD);
947 TRACE_EVENT_INSTANT0("cat2", "name", TRACE_EVENT_SCOPE_THREAD); 967 TRACE_EVENT_INSTANT0("cat2", "name", TRACE_EVENT_SCOPE_THREAD);
968 TRACE_EVENT_INSTANT0("category1,category2", "name", TRACE_EVENT_SCOPE_THREAD);
948 EndTraceAndFlush(); 969 EndTraceAndFlush();
949 EXPECT_TRUE(FindMatchingValue("cat", "cat1")); 970 EXPECT_TRUE(FindMatchingValue("cat", "cat1"));
950 EXPECT_TRUE(FindMatchingValue("cat", "cat2")); 971 EXPECT_TRUE(FindMatchingValue("cat", "cat2"));
972 EXPECT_TRUE(FindMatchingValue("cat", "category1,category2"));
951 973
952 // Exclude existent category -> only events of other categories 974 // Exclude existent category -> only events of other categories
953 Clear(); 975 Clear();
954 excluded_categories.clear(); 976 TraceLog::GetInstance()->SetEnabled(CategoryFilter("-inc"),
955 excluded_categories.push_back("inc");
956 TraceLog::GetInstance()->SetEnabled(empty_categories, excluded_categories,
957 TraceLog::RECORD_UNTIL_FULL); 977 TraceLog::RECORD_UNTIL_FULL);
958 TRACE_EVENT_INSTANT0("inc", "name", TRACE_EVENT_SCOPE_THREAD); 978 TRACE_EVENT_INSTANT0("inc", "name", TRACE_EVENT_SCOPE_THREAD);
959 TRACE_EVENT_INSTANT0("inc2", "name", TRACE_EVENT_SCOPE_THREAD); 979 TRACE_EVENT_INSTANT0("inc2", "name", TRACE_EVENT_SCOPE_THREAD);
980 TRACE_EVENT_INSTANT0("inc2,inc", "name", TRACE_EVENT_SCOPE_THREAD);
981 TRACE_EVENT_INSTANT0("inc,inc2", "name", TRACE_EVENT_SCOPE_THREAD);
960 EndTraceAndFlush(); 982 EndTraceAndFlush();
961 EXPECT_TRUE(FindMatchingValue("cat", "inc2")); 983 EXPECT_TRUE(FindMatchingValue("cat", "inc2"));
962 EXPECT_FALSE(FindMatchingValue("cat", "inc")); 984 EXPECT_FALSE(FindMatchingValue("cat", "inc"));
985 EXPECT_FALSE(FindMatchingValue("cat", "inc2,inc"));
986 EXPECT_FALSE(FindMatchingValue("cat", "inc,inc2"));
963 987
964 // Exclude existent wildcard -> all categories not matching wildcard 988 // Exclude existent wildcard -> all categories not matching wildcard
965 Clear(); 989 Clear();
966 excluded_categories.clear(); 990 TraceLog::GetInstance()->SetEnabled(
967 excluded_categories.push_back("inc_wildcard_*"); 991 CategoryFilter("-inc_wildcard_*,-inc_wildchar_?_end"),
968 excluded_categories.push_back("inc_wildchar_?_end"); 992 TraceLog::RECORD_UNTIL_FULL);
969 TraceLog::GetInstance()->SetEnabled(empty_categories, excluded_categories, 993 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "not_inc",
970 TraceLog::RECORD_UNTIL_FULL); 994 TRACE_EVENT_SCOPE_THREAD);
971 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "not_inc", TRACE_EVENT_SCOPE_THREAD); 995 TRACE_EVENT_INSTANT0("inc_wildcard_", "not_inc",
972 TRACE_EVENT_INSTANT0("inc_wildcard_", "not_inc", TRACE_EVENT_SCOPE_THREAD); 996 TRACE_EVENT_SCOPE_THREAD);
973 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "not_inc", 997 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "not_inc",
974 TRACE_EVENT_SCOPE_THREAD); 998 TRACE_EVENT_SCOPE_THREAD);
975 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "included", 999 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "included",
976 TRACE_EVENT_SCOPE_THREAD); 1000 TRACE_EVENT_SCOPE_THREAD);
977 TRACE_EVENT_INSTANT0("cat1", "included", TRACE_EVENT_SCOPE_THREAD); 1001 TRACE_EVENT_INSTANT0("cat1", "included", TRACE_EVENT_SCOPE_THREAD);
978 TRACE_EVENT_INSTANT0("cat2", "included", TRACE_EVENT_SCOPE_THREAD); 1002 TRACE_EVENT_INSTANT0("cat2", "included", TRACE_EVENT_SCOPE_THREAD);
979 EndTraceAndFlush(); 1003 EndTraceAndFlush();
980 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_bla_end")); 1004 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_bla_end"));
981 EXPECT_TRUE(FindMatchingValue("cat", "cat1")); 1005 EXPECT_TRUE(FindMatchingValue("cat", "cat1"));
982 EXPECT_TRUE(FindMatchingValue("cat", "cat2")); 1006 EXPECT_TRUE(FindMatchingValue("cat", "cat2"));
983 EXPECT_FALSE(FindMatchingValue("name", "not_inc")); 1007 EXPECT_FALSE(FindMatchingValue("name", "not_inc"));
984 } 1008 }
985 1009
986 1010
(...skipping 514 matching lines...) Expand 10 before | Expand all | Expand 10 after
1501 TRACE_EVENT_INSTANT1("category", "test", TRACE_EVENT_SCOPE_THREAD, "a", a++); 1525 TRACE_EVENT_INSTANT1("category", "test", TRACE_EVENT_SCOPE_THREAD, "a", a++);
1502 EXPECT_EQ(1, a); 1526 EXPECT_EQ(1, a);
1503 1527
1504 EndTraceAndFlush(); 1528 EndTraceAndFlush();
1505 } 1529 }
1506 1530
1507 TEST_F(TraceEventTestFixture, TraceEnableDisable) { 1531 TEST_F(TraceEventTestFixture, TraceEnableDisable) {
1508 ManualTestSetUp(); 1532 ManualTestSetUp();
1509 1533
1510 TraceLog* trace_log = TraceLog::GetInstance(); 1534 TraceLog* trace_log = TraceLog::GetInstance();
1511 trace_log->SetEnabled(std::string(), TraceLog::RECORD_UNTIL_FULL); 1535 CategoryFilter cf_inc_all("*");
1536 trace_log->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL);
1512 EXPECT_TRUE(trace_log->IsEnabled()); 1537 EXPECT_TRUE(trace_log->IsEnabled());
1513 trace_log->SetDisabled(); 1538 trace_log->SetDisabled();
1514 EXPECT_FALSE(trace_log->IsEnabled()); 1539 EXPECT_FALSE(trace_log->IsEnabled());
1515 1540
1516 trace_log->SetEnabled(true, TraceLog::RECORD_UNTIL_FULL); 1541 trace_log->SetEnabled(cf_inc_all, TraceLog::RECORD_UNTIL_FULL);
1517 EXPECT_TRUE(trace_log->IsEnabled()); 1542 EXPECT_TRUE(trace_log->IsEnabled());
1518 const std::vector<std::string> empty; 1543 const std::vector<std::string> empty;
1519 trace_log->SetEnabled(empty, empty, TraceLog::RECORD_UNTIL_FULL); 1544 trace_log->SetEnabled(CategoryFilter(""), TraceLog::RECORD_UNTIL_FULL);
1520 EXPECT_TRUE(trace_log->IsEnabled()); 1545 EXPECT_TRUE(trace_log->IsEnabled());
1521 trace_log->SetEnabled(false, TraceLog::RECORD_UNTIL_FULL); 1546 trace_log->SetDisabled();
1522 EXPECT_TRUE(trace_log->IsEnabled()); 1547 EXPECT_TRUE(trace_log->IsEnabled());
1523 trace_log->SetDisabled(); 1548 trace_log->SetDisabled();
1524 EXPECT_FALSE(trace_log->IsEnabled()); 1549 EXPECT_FALSE(trace_log->IsEnabled());
1525 } 1550 }
1526 1551
1527 TEST_F(TraceEventTestFixture, TraceCategoriesAfterNestedEnable) { 1552 TEST_F(TraceEventTestFixture, TraceCategoriesAfterNestedEnable) {
1528 ManualTestSetUp(); 1553 ManualTestSetUp();
1529 1554
1530 TraceLog* trace_log = TraceLog::GetInstance(); 1555 TraceLog* trace_log = TraceLog::GetInstance();
1531 trace_log->SetEnabled(std::string("foo,bar"), TraceLog::RECORD_UNTIL_FULL); 1556 trace_log->SetEnabled(CategoryFilter("foo,bar"), TraceLog::RECORD_UNTIL_FULL);
1532 EXPECT_TRUE(*trace_log->GetCategoryEnabled("foo")); 1557 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo"));
1533 EXPECT_TRUE(*trace_log->GetCategoryEnabled("bar")); 1558 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("bar"));
1534 EXPECT_FALSE(*trace_log->GetCategoryEnabled("baz")); 1559 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz"));
1535 trace_log->SetEnabled(std::string("foo2"), TraceLog::RECORD_UNTIL_FULL); 1560 trace_log->SetEnabled(CategoryFilter("foo2"), TraceLog::RECORD_UNTIL_FULL);
1536 EXPECT_TRUE(*trace_log->GetCategoryEnabled("foo2")); 1561 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo2"));
1537 EXPECT_FALSE(*trace_log->GetCategoryEnabled("baz")); 1562 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz"));
1538 trace_log->SetEnabled(std::string(), TraceLog::RECORD_UNTIL_FULL); 1563 trace_log->SetEnabled(CategoryFilter(""), TraceLog::RECORD_UNTIL_FULL);
1539 EXPECT_TRUE(*trace_log->GetCategoryEnabled("foo")); 1564 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo"));
1540 EXPECT_TRUE(*trace_log->GetCategoryEnabled("baz")); 1565 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("baz"));
1541 trace_log->SetDisabled(); 1566 trace_log->SetDisabled();
1542 trace_log->SetDisabled(); 1567 trace_log->SetDisabled();
1543 trace_log->SetDisabled(); 1568 trace_log->SetDisabled();
1544 EXPECT_FALSE(*trace_log->GetCategoryEnabled("foo")); 1569 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("foo"));
1545 EXPECT_FALSE(*trace_log->GetCategoryEnabled("baz")); 1570 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz"));
1546 1571
1547 trace_log->SetEnabled(std::string("-foo,-bar"), TraceLog::RECORD_UNTIL_FULL); 1572 trace_log->SetEnabled(CategoryFilter("-foo,-bar"),
1548 EXPECT_FALSE(*trace_log->GetCategoryEnabled("foo")); 1573 TraceLog::RECORD_UNTIL_FULL);
1549 EXPECT_TRUE(*trace_log->GetCategoryEnabled("baz")); 1574 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("foo"));
1550 trace_log->SetEnabled(std::string("moo"), TraceLog::RECORD_UNTIL_FULL); 1575 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("baz"));
1551 EXPECT_TRUE(*trace_log->GetCategoryEnabled("baz")); 1576 trace_log->SetEnabled(CategoryFilter("moo"), TraceLog::RECORD_UNTIL_FULL);
1552 EXPECT_TRUE(*trace_log->GetCategoryEnabled("moo")); 1577 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("baz"));
1553 EXPECT_TRUE(*trace_log->GetCategoryEnabled("foo")); 1578 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("moo"));
1579 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo"));
1554 trace_log->SetDisabled(); 1580 trace_log->SetDisabled();
1555 trace_log->SetDisabled(); 1581 trace_log->SetDisabled();
1556 } 1582 }
1557 1583
1558 TEST_F(TraceEventTestFixture, TraceOptionsParsing) { 1584 TEST_F(TraceEventTestFixture, TraceOptionsParsing) {
1559 ManualTestSetUp(); 1585 ManualTestSetUp();
1560 1586
1561 EXPECT_EQ(TraceLog::RECORD_UNTIL_FULL, 1587 EXPECT_EQ(TraceLog::RECORD_UNTIL_FULL,
1562 TraceLog::TraceOptionsFromString(std::string())); 1588 TraceLog::TraceOptionsFromString(std::string()));
1563 1589
1564 EXPECT_EQ(TraceLog::RECORD_UNTIL_FULL, 1590 EXPECT_EQ(TraceLog::RECORD_UNTIL_FULL,
1565 TraceLog::TraceOptionsFromString("record-until-full")); 1591 TraceLog::TraceOptionsFromString("record-until-full"));
1566 EXPECT_EQ(TraceLog::RECORD_CONTINUOUSLY, 1592 EXPECT_EQ(TraceLog::RECORD_CONTINUOUSLY,
1567 TraceLog::TraceOptionsFromString("record-continuously")); 1593 TraceLog::TraceOptionsFromString("record-continuously"));
1568 } 1594 }
1569 1595
1570 TEST_F(TraceEventTestFixture, TraceSampling) { 1596 TEST_F(TraceEventTestFixture, TraceSampling) {
1571 ManualTestSetUp(); 1597 ManualTestSetUp();
1572 1598
1573 event_watch_notification_ = 0; 1599 event_watch_notification_ = 0;
1574 TraceLog::GetInstance()->SetEnabled( 1600 TraceLog::GetInstance()->SetEnabled(
1575 std::string("*"), 1601 CategoryFilter("*"),
1576 TraceLog::Options(TraceLog::RECORD_UNTIL_FULL | 1602 TraceLog::Options(TraceLog::RECORD_UNTIL_FULL |
1577 TraceLog::ENABLE_SAMPLING)); 1603 TraceLog::ENABLE_SAMPLING));
1578 1604
1579 WaitableEvent* sampled = new WaitableEvent(false, false); 1605 WaitableEvent* sampled = new WaitableEvent(false, false);
1580 TraceLog::GetInstance()->InstallWaitableEventForSamplingTesting(sampled); 1606 TraceLog::GetInstance()->InstallWaitableEventForSamplingTesting(sampled);
1581 1607
1582 TRACE_EVENT_SAMPLE_STATE(1, "cc", "Stuff"); 1608 TRACE_EVENT_SAMPLE_STATE(1, "cc", "Stuff");
1583 sampled->Wait(); 1609 sampled->Wait();
1584 TRACE_EVENT_SAMPLE_STATE(1, "cc", "Things"); 1610 TRACE_EVENT_SAMPLE_STATE(1, "cc", "Things");
1585 sampled->Wait(); 1611 sampled->Wait();
(...skipping 13 matching lines...) Expand all
1599 virtual void AppendAsTraceFormat(std::string* out) const OVERRIDE { 1625 virtual void AppendAsTraceFormat(std::string* out) const OVERRIDE {
1600 out->append("{\"foo\":1}"); 1626 out->append("{\"foo\":1}");
1601 } 1627 }
1602 1628
1603 private: 1629 private:
1604 DISALLOW_COPY_AND_ASSIGN(MyData); 1630 DISALLOW_COPY_AND_ASSIGN(MyData);
1605 }; 1631 };
1606 1632
1607 TEST_F(TraceEventTestFixture, ConvertableTypes) { 1633 TEST_F(TraceEventTestFixture, ConvertableTypes) {
1608 ManualTestSetUp(); 1634 ManualTestSetUp();
1609 TraceLog::GetInstance()->SetEnabled(true, TraceLog::RECORD_UNTIL_FULL); 1635 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
1636 TraceLog::RECORD_UNTIL_FULL);
1610 1637
1611 scoped_ptr<MyData> data(new MyData()); 1638 scoped_ptr<MyData> data(new MyData());
1612 TRACE_EVENT1("foo", "bar", "data", 1639 TRACE_EVENT1("foo", "bar", "data",
1613 data.PassAs<base::debug::ConvertableToTraceFormat>()); 1640 data.PassAs<base::debug::ConvertableToTraceFormat>());
1614 EndTraceAndFlush(); 1641 EndTraceAndFlush();
1615 1642
1616 DictionaryValue* dict = FindNamePhase("bar", "B"); 1643 DictionaryValue* dict = FindNamePhase("bar", "B");
1617 ASSERT_TRUE(dict); 1644 ASSERT_TRUE(dict);
1618 1645
1619 const DictionaryValue* args_dict = NULL; 1646 const DictionaryValue* args_dict = NULL;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1660 const unsigned char arg_types[], 1687 const unsigned char arg_types[],
1661 const unsigned long long arg_values[], 1688 const unsigned long long arg_values[],
1662 unsigned char flags) { 1689 unsigned char flags) {
1663 s_instance->collected_events_.push_back(name); 1690 s_instance->collected_events_.push_back(name);
1664 } 1691 }
1665 }; 1692 };
1666 1693
1667 TraceEventCallbackTest* TraceEventCallbackTest::s_instance; 1694 TraceEventCallbackTest* TraceEventCallbackTest::s_instance;
1668 1695
1669 TEST_F(TraceEventCallbackTest, TraceEventCallback) { 1696 TEST_F(TraceEventCallbackTest, TraceEventCallback) {
1670 TRACE_EVENT_INSTANT0("all", "before enable", TRACE_EVENT_SCOPE_GLOBAL); 1697 TRACE_EVENT_INSTANT0("all", "before enable", TRACE_EVENT_SCOPE_THREAD);
1671 TraceLog::GetInstance()->SetEnabled(true, TraceLog::RECORD_UNTIL_FULL); 1698 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
1672 TRACE_EVENT_INSTANT0("all", "before callback set", TRACE_EVENT_SCOPE_GLOBAL); 1699 TraceLog::RECORD_UNTIL_FULL);
1700 TRACE_EVENT_INSTANT0("all", "before callback set", TRACE_EVENT_SCOPE_THREAD);
1673 TraceLog::GetInstance()->SetEventCallback(Callback); 1701 TraceLog::GetInstance()->SetEventCallback(Callback);
1674 TRACE_EVENT_INSTANT0("all", "event1", TRACE_EVENT_SCOPE_GLOBAL); 1702 TRACE_EVENT_INSTANT0("all", "event1", TRACE_EVENT_SCOPE_GLOBAL);
1675 TRACE_EVENT_INSTANT0("all", "event2", TRACE_EVENT_SCOPE_GLOBAL); 1703 TRACE_EVENT_INSTANT0("all", "event2", TRACE_EVENT_SCOPE_GLOBAL);
1676 TraceLog::GetInstance()->SetEventCallback(NULL); 1704 TraceLog::GetInstance()->SetEventCallback(NULL);
1677 TRACE_EVENT_INSTANT0("all", "after callback removed", 1705 TRACE_EVENT_INSTANT0("all", "after callback removed",
1678 TRACE_EVENT_SCOPE_GLOBAL); 1706 TRACE_EVENT_SCOPE_GLOBAL);
1679 EXPECT_EQ(2u, collected_events_.size()); 1707 EXPECT_EQ(2u, collected_events_.size());
1680 EXPECT_EQ("event1", collected_events_[0]); 1708 EXPECT_EQ("event1", collected_events_[0]);
1681 EXPECT_EQ("event2", collected_events_[1]); 1709 EXPECT_EQ("event2", collected_events_[1]);
1682 } 1710 }
1683 1711
1684 // TODO(dsinclair): Continuous Tracing unit test. 1712 // TODO(dsinclair): Continuous Tracing unit test.
1685 1713
1714 // Test the category filter.
1715 TEST_F(TraceEventTestFixture, CategoryFilter) {
1716 ManualTestSetUp();
1717
1718 // Using the default filter.
1719 CategoryFilter default_cf = CategoryFilter(
1720 CategoryFilter::kDefaultCategoryFilterString);
1721 std::string category_filter_str = default_cf.ToString();
1722 EXPECT_STREQ("-*Debug,-*Test", category_filter_str.c_str());
1723 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("not-excluded-category"));
1724 EXPECT_FALSE(default_cf.IsCategoryGroupEnabled("Category1,CategoryDebug"));
1725 EXPECT_FALSE(default_cf.IsCategoryGroupEnabled("CategoryDebug,Category1"));
1726 EXPECT_FALSE(default_cf.IsCategoryGroupEnabled("CategoryTest,Category2"));
1727
1728 // Make sure that upon an empty string, we fall back to the default filter.
1729 default_cf = CategoryFilter("");
1730 category_filter_str = default_cf.ToString();
1731 EXPECT_STREQ("-*Debug,-*Test", category_filter_str.c_str());
1732 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("not-excluded-category"));
1733 EXPECT_FALSE(default_cf.IsCategoryGroupEnabled("Category1,CategoryDebug"));
1734 EXPECT_FALSE(default_cf.IsCategoryGroupEnabled("CategoryDebug,Category1"));
1735 EXPECT_FALSE(default_cf.IsCategoryGroupEnabled("CategoryTest,Category2"));
1736
1737 // Using an arbitrary non-empty filter.
1738 CategoryFilter cf("included,-excluded,inc_pattern*,-exc_pattern*");
1739 category_filter_str = cf.ToString();
1740 EXPECT_STREQ("included,inc_pattern*,-excluded,-exc_pattern*",
1741 category_filter_str.c_str());
1742 EXPECT_TRUE(cf.IsCategoryGroupEnabled("included"));
1743 EXPECT_TRUE(cf.IsCategoryGroupEnabled("inc_pattern_category"));
1744 EXPECT_FALSE(cf.IsCategoryGroupEnabled("exc_pattern_category"));
1745 EXPECT_FALSE(cf.IsCategoryGroupEnabled("excluded"));
1746 EXPECT_FALSE(cf.IsCategoryGroupEnabled("not-excluded-nor-included"));
1747 EXPECT_FALSE(cf.IsCategoryGroupEnabled("Category1,CategoryDebug"));
1748 EXPECT_FALSE(cf.IsCategoryGroupEnabled("CategoryDebug,Category1"));
1749 EXPECT_FALSE(cf.IsCategoryGroupEnabled("CategoryTest,Category2"));
1750
1751 cf.Merge(default_cf);
1752 category_filter_str = cf.ToString();
1753 EXPECT_STREQ("included,inc_pattern*,-excluded,-exc_pattern*,-*Debug,-*Test",
1754 category_filter_str.c_str());
1755 cf.Clear();
1756 EXPECT_FALSE(cf.HasIncludedPatterns());
1757
1758 CategoryFilter reconstructed_cf(category_filter_str);
1759 category_filter_str = reconstructed_cf.ToString();
1760 EXPECT_STREQ("included,inc_pattern*,-excluded,-exc_pattern*,-*Debug,-*Test",
1761 category_filter_str.c_str());
1762
1763 // One included category.
1764 CategoryFilter one_inc_cf("only_inc_cat");
1765 category_filter_str = one_inc_cf.ToString();
1766 EXPECT_STREQ("only_inc_cat", category_filter_str.c_str());
1767
1768 // One excluded category.
1769 CategoryFilter one_exc_cf("-only_exc_cat");
1770 category_filter_str = one_exc_cf.ToString();
1771 EXPECT_STREQ("-only_exc_cat", category_filter_str.c_str());
1772
1773 // Test that IsEmptyOrContainsLeadingOrTrailingWhitespace actually catches
1774 // categories that are explicitly forbiden.
1775 // This method is called in a DCHECK to assert that we don't have these types
1776 // of strings as categories.
1777 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
1778 " bad_category "));
1779 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
1780 " bad_category"));
1781 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
1782 "bad_category "));
1783 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
1784 " bad_category"));
1785 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
1786 "bad_category "));
1787 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
1788 " bad_category "));
1789 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
1790 ""));
1791 EXPECT_FALSE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
1792 "good_category"));
1793 }
1794
1686 } // namespace debug 1795 } // namespace debug
1687 } // namespace base 1796 } // namespace base
OLDNEW
« no previous file with comments | « base/debug/trace_event_impl.cc ('k') | base/test/trace_event_analyzer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698