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

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

Issue 1180693002: Update from https://crrev.com/333737 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: rebased Created 5 years, 6 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
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 <math.h> 5 #include <math.h>
6 #include <cstdlib> 6 #include <cstdlib>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
(...skipping 30 matching lines...) Expand all
41 const char* value; 41 const char* value;
42 CompareOp op; 42 CompareOp op;
43 }; 43 };
44 44
45 const int kThreadId = 42; 45 const int kThreadId = 42;
46 const int kAsyncId = 5; 46 const int kAsyncId = 5;
47 const char kAsyncIdStr[] = "0x5"; 47 const char kAsyncIdStr[] = "0x5";
48 const int kAsyncId2 = 6; 48 const int kAsyncId2 = 6;
49 const char kAsyncId2Str[] = "0x6"; 49 const char kAsyncId2Str[] = "0x6";
50 50
51 const char kRecordAllCategoryFilter[] = "*";
52
51 class TraceEventTestFixture : public testing::Test { 53 class TraceEventTestFixture : public testing::Test {
52 public: 54 public:
53 void OnTraceDataCollected( 55 void OnTraceDataCollected(
54 WaitableEvent* flush_complete_event, 56 WaitableEvent* flush_complete_event,
55 const scoped_refptr<base::RefCountedString>& events_str, 57 const scoped_refptr<base::RefCountedString>& events_str,
56 bool has_more_events); 58 bool has_more_events);
57 void OnWatchEventMatched() { 59 void OnWatchEventMatched() {
58 ++event_watch_notification_; 60 ++event_watch_notification_;
59 } 61 }
60 DictionaryValue* FindMatchingTraceEntry(const JsonKeyValue* key_values); 62 DictionaryValue* FindMatchingTraceEntry(const JsonKeyValue* key_values);
(...skipping 11 matching lines...) Expand all
72 trace_parsed_.Clear(); 74 trace_parsed_.Clear();
73 json_output_.json_output.clear(); 75 json_output_.json_output.clear();
74 } 76 }
75 77
76 void BeginTrace() { 78 void BeginTrace() {
77 BeginSpecificTrace("*"); 79 BeginSpecificTrace("*");
78 } 80 }
79 81
80 void BeginSpecificTrace(const std::string& filter) { 82 void BeginSpecificTrace(const std::string& filter) {
81 event_watch_notification_ = 0; 83 event_watch_notification_ = 0;
82 TraceLog::GetInstance()->SetEnabled( 84 TraceLog::GetInstance()->SetEnabled(TraceConfig(filter, ""),
83 CategoryFilter(filter), 85 TraceLog::RECORDING_MODE);
84 TraceLog::RECORDING_MODE,
85 TraceOptions());
86 } 86 }
87 87
88 void EndTraceAndFlush() { 88 void EndTraceAndFlush() {
89 WaitableEvent flush_complete_event(false, false); 89 WaitableEvent flush_complete_event(false, false);
90 EndTraceAndFlushAsync(&flush_complete_event); 90 EndTraceAndFlushAsync(&flush_complete_event);
91 flush_complete_event.Wait(); 91 flush_complete_event.Wait();
92 } 92 }
93 93
94 // Used when testing thread-local buffers which requires the thread initiating 94 // Used when testing thread-local buffers which requires the thread initiating
95 // flush to have a message loop. 95 // flush to have a message loop.
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
161 WaitableEvent* flush_complete_event, 161 WaitableEvent* flush_complete_event,
162 const scoped_refptr<base::RefCountedString>& events_str, 162 const scoped_refptr<base::RefCountedString>& events_str,
163 bool has_more_events) { 163 bool has_more_events) {
164 AutoLock lock(lock_); 164 AutoLock lock(lock_);
165 json_output_.json_output.clear(); 165 json_output_.json_output.clear();
166 trace_buffer_.Start(); 166 trace_buffer_.Start();
167 trace_buffer_.AddFragment(events_str->data()); 167 trace_buffer_.AddFragment(events_str->data());
168 trace_buffer_.Finish(); 168 trace_buffer_.Finish();
169 169
170 scoped_ptr<Value> root; 170 scoped_ptr<Value> root;
171 root.reset(base::JSONReader::Read(json_output_.json_output, 171 root.reset(base::JSONReader::DeprecatedRead(
172 JSON_PARSE_RFC | JSON_DETACHABLE_CHILDREN)); 172 json_output_.json_output, JSON_PARSE_RFC | JSON_DETACHABLE_CHILDREN));
173 173
174 if (!root.get()) { 174 if (!root.get()) {
175 LOG(ERROR) << json_output_.json_output; 175 LOG(ERROR) << json_output_.json_output;
176 } 176 }
177 177
178 ListValue* root_list = NULL; 178 ListValue* root_list = NULL;
179 ASSERT_TRUE(root.get()); 179 ASSERT_TRUE(root.get());
180 ASSERT_TRUE(root->GetAsList(&root_list)); 180 ASSERT_TRUE(root->GetAsList(&root_list));
181 181
182 // Move items into our aggregate collection 182 // Move items into our aggregate collection
(...skipping 682 matching lines...) Expand 10 before | Expand all | Expand 10 after
865 for (int event = 0; event < num_events; event++) { 865 for (int event = 0; event < num_events; event++) {
866 EXPECT_TRUE(results[thread][event]); 866 EXPECT_TRUE(results[thread][event]);
867 } 867 }
868 } 868 }
869 } 869 }
870 870
871 } // namespace 871 } // namespace
872 872
873 // Simple Test for emitting data and validating it was received. 873 // Simple Test for emitting data and validating it was received.
874 TEST_F(TraceEventTestFixture, DataCaptured) { 874 TEST_F(TraceEventTestFixture, DataCaptured) {
875 TraceLog::GetInstance()->SetEnabled( 875 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
876 CategoryFilter("*"), 876 TraceLog::RECORDING_MODE);
877 TraceLog::RECORDING_MODE,
878 TraceOptions());
879 877
880 TraceWithAllMacroVariants(NULL); 878 TraceWithAllMacroVariants(NULL);
881 879
882 EndTraceAndFlush(); 880 EndTraceAndFlush();
883 881
884 ValidateAllTraceMacrosCreatedData(trace_parsed_); 882 ValidateAllTraceMacrosCreatedData(trace_parsed_);
885 } 883 }
886 884
887 class MockEnabledStateChangedObserver : 885 class MockEnabledStateChangedObserver :
888 public TraceLog::EnabledStateObserver { 886 public TraceLog::EnabledStateObserver {
889 public: 887 public:
890 MOCK_METHOD0(OnTraceLogEnabled, void()); 888 MOCK_METHOD0(OnTraceLogEnabled, void());
891 MOCK_METHOD0(OnTraceLogDisabled, void()); 889 MOCK_METHOD0(OnTraceLogDisabled, void());
892 }; 890 };
893 891
894 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnEnable) { 892 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnEnable) {
895 MockEnabledStateChangedObserver observer; 893 MockEnabledStateChangedObserver observer;
896 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); 894 TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
897 895
898 EXPECT_CALL(observer, OnTraceLogEnabled()) 896 EXPECT_CALL(observer, OnTraceLogEnabled())
899 .Times(1); 897 .Times(1);
900 TraceLog::GetInstance()->SetEnabled( 898 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
901 CategoryFilter("*"), 899 TraceLog::RECORDING_MODE);
902 TraceLog::RECORDING_MODE,
903 TraceOptions());
904 testing::Mock::VerifyAndClear(&observer); 900 testing::Mock::VerifyAndClear(&observer);
905 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); 901 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled());
906 902
907 // Cleanup. 903 // Cleanup.
908 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); 904 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
909 TraceLog::GetInstance()->SetDisabled(); 905 TraceLog::GetInstance()->SetDisabled();
910 } 906 }
911 907
912 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnSecondEnable) { 908 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnSecondEnable) {
913 TraceLog::GetInstance()->SetEnabled( 909 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
914 CategoryFilter("*"), 910 TraceLog::RECORDING_MODE);
915 TraceLog::RECORDING_MODE,
916 TraceOptions());
917 911
918 testing::StrictMock<MockEnabledStateChangedObserver> observer; 912 testing::StrictMock<MockEnabledStateChangedObserver> observer;
919 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); 913 TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
920 914
921 EXPECT_CALL(observer, OnTraceLogEnabled()) 915 EXPECT_CALL(observer, OnTraceLogEnabled())
922 .Times(0); 916 .Times(0);
923 EXPECT_CALL(observer, OnTraceLogDisabled()) 917 EXPECT_CALL(observer, OnTraceLogDisabled())
924 .Times(0); 918 .Times(0);
925 TraceLog::GetInstance()->SetEnabled( 919 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
926 CategoryFilter("*"), 920 TraceLog::RECORDING_MODE);
927 TraceLog::RECORDING_MODE,
928 TraceOptions());
929 testing::Mock::VerifyAndClear(&observer); 921 testing::Mock::VerifyAndClear(&observer);
930 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); 922 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled());
931 923
932 // Cleanup. 924 // Cleanup.
933 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); 925 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
934 TraceLog::GetInstance()->SetDisabled(); 926 TraceLog::GetInstance()->SetDisabled();
935 TraceLog::GetInstance()->SetDisabled(); 927 TraceLog::GetInstance()->SetDisabled();
936 } 928 }
937 929
938 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnFirstDisable) { 930 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnFirstDisable) {
939 CategoryFilter cf_inc_all("*"); 931 TraceConfig tc_inc_all("*", "");
940 TraceLog::GetInstance()->SetEnabled( 932 TraceLog::GetInstance()->SetEnabled(tc_inc_all, TraceLog::RECORDING_MODE);
941 cf_inc_all, 933 TraceLog::GetInstance()->SetEnabled(tc_inc_all, TraceLog::RECORDING_MODE);
942 TraceLog::RECORDING_MODE,
943 TraceOptions());
944 TraceLog::GetInstance()->SetEnabled(
945 cf_inc_all,
946 TraceLog::RECORDING_MODE,
947 TraceOptions());
948 934
949 testing::StrictMock<MockEnabledStateChangedObserver> observer; 935 testing::StrictMock<MockEnabledStateChangedObserver> observer;
950 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); 936 TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
951 937
952 EXPECT_CALL(observer, OnTraceLogEnabled()) 938 EXPECT_CALL(observer, OnTraceLogEnabled())
953 .Times(0); 939 .Times(0);
954 EXPECT_CALL(observer, OnTraceLogDisabled()) 940 EXPECT_CALL(observer, OnTraceLogDisabled())
955 .Times(1); 941 .Times(1);
956 TraceLog::GetInstance()->SetDisabled(); 942 TraceLog::GetInstance()->SetDisabled();
957 testing::Mock::VerifyAndClear(&observer); 943 testing::Mock::VerifyAndClear(&observer);
958 944
959 // Cleanup. 945 // Cleanup.
960 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); 946 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
961 TraceLog::GetInstance()->SetDisabled(); 947 TraceLog::GetInstance()->SetDisabled();
962 } 948 }
963 949
964 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnDisable) { 950 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnDisable) {
965 TraceLog::GetInstance()->SetEnabled( 951 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
966 CategoryFilter("*"), 952 TraceLog::RECORDING_MODE);
967 TraceLog::RECORDING_MODE,
968 TraceOptions());
969 953
970 MockEnabledStateChangedObserver observer; 954 MockEnabledStateChangedObserver observer;
971 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); 955 TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
972 956
973 EXPECT_CALL(observer, OnTraceLogDisabled()) 957 EXPECT_CALL(observer, OnTraceLogDisabled())
974 .Times(1); 958 .Times(1);
975 TraceLog::GetInstance()->SetDisabled(); 959 TraceLog::GetInstance()->SetDisabled();
976 testing::Mock::VerifyAndClear(&observer); 960 testing::Mock::VerifyAndClear(&observer);
977 961
978 // Cleanup. 962 // Cleanup.
(...skipping 14 matching lines...) Expand all
993 977
994 void OnTraceLogDisabled() override { 978 void OnTraceLogDisabled() override {
995 EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled()); 979 EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled());
996 } 980 }
997 }; 981 };
998 982
999 TEST_F(TraceEventTestFixture, ObserversFireAfterStateChange) { 983 TEST_F(TraceEventTestFixture, ObserversFireAfterStateChange) {
1000 AfterStateChangeEnabledStateObserver observer; 984 AfterStateChangeEnabledStateObserver observer;
1001 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); 985 TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
1002 986
1003 TraceLog::GetInstance()->SetEnabled( 987 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
1004 CategoryFilter("*"), 988 TraceLog::RECORDING_MODE);
1005 TraceLog::RECORDING_MODE,
1006 TraceOptions());
1007 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); 989 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled());
1008 990
1009 TraceLog::GetInstance()->SetDisabled(); 991 TraceLog::GetInstance()->SetDisabled();
1010 EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled()); 992 EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled());
1011 993
1012 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); 994 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer);
1013 } 995 }
1014 996
1015 // Tests that a state observer can remove itself during a callback. 997 // Tests that a state observer can remove itself during a callback.
1016 class SelfRemovingEnabledStateObserver 998 class SelfRemovingEnabledStateObserver
(...skipping 10 matching lines...) Expand all
1027 } 1009 }
1028 }; 1010 };
1029 1011
1030 TEST_F(TraceEventTestFixture, SelfRemovingObserver) { 1012 TEST_F(TraceEventTestFixture, SelfRemovingObserver) {
1031 ASSERT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest()); 1013 ASSERT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest());
1032 1014
1033 SelfRemovingEnabledStateObserver observer; 1015 SelfRemovingEnabledStateObserver observer;
1034 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); 1016 TraceLog::GetInstance()->AddEnabledStateObserver(&observer);
1035 EXPECT_EQ(1u, TraceLog::GetInstance()->GetObserverCountForTest()); 1017 EXPECT_EQ(1u, TraceLog::GetInstance()->GetObserverCountForTest());
1036 1018
1037 TraceLog::GetInstance()->SetEnabled( 1019 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
1038 CategoryFilter("*"), 1020 TraceLog::RECORDING_MODE);
1039 TraceLog::RECORDING_MODE,
1040 TraceOptions());
1041 TraceLog::GetInstance()->SetDisabled(); 1021 TraceLog::GetInstance()->SetDisabled();
1042 // The observer removed itself on disable. 1022 // The observer removed itself on disable.
1043 EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest()); 1023 EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest());
1044 } 1024 }
1045 1025
1046 bool IsNewTrace() { 1026 bool IsNewTrace() {
1047 bool is_new_trace; 1027 bool is_new_trace;
1048 TRACE_EVENT_IS_NEW_TRACE(&is_new_trace); 1028 TRACE_EVENT_IS_NEW_TRACE(&is_new_trace);
1049 return is_new_trace; 1029 return is_new_trace;
1050 } 1030 }
1051 1031
1052 TEST_F(TraceEventTestFixture, NewTraceRecording) { 1032 TEST_F(TraceEventTestFixture, NewTraceRecording) {
1053 ASSERT_FALSE(IsNewTrace()); 1033 ASSERT_FALSE(IsNewTrace());
1054 TraceLog::GetInstance()->SetEnabled( 1034 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
1055 CategoryFilter("*"), 1035 TraceLog::RECORDING_MODE);
1056 TraceLog::RECORDING_MODE,
1057 TraceOptions());
1058 // First call to IsNewTrace() should succeed. But, the second shouldn't. 1036 // First call to IsNewTrace() should succeed. But, the second shouldn't.
1059 ASSERT_TRUE(IsNewTrace()); 1037 ASSERT_TRUE(IsNewTrace());
1060 ASSERT_FALSE(IsNewTrace()); 1038 ASSERT_FALSE(IsNewTrace());
1061 EndTraceAndFlush(); 1039 EndTraceAndFlush();
1062 1040
1063 // IsNewTrace() should definitely be false now. 1041 // IsNewTrace() should definitely be false now.
1064 ASSERT_FALSE(IsNewTrace()); 1042 ASSERT_FALSE(IsNewTrace());
1065 1043
1066 // Start another trace. IsNewTrace() should become true again, briefly, as 1044 // Start another trace. IsNewTrace() should become true again, briefly, as
1067 // before. 1045 // before.
1068 TraceLog::GetInstance()->SetEnabled( 1046 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
1069 CategoryFilter("*"), 1047 TraceLog::RECORDING_MODE);
1070 TraceLog::RECORDING_MODE,
1071 TraceOptions());
1072 ASSERT_TRUE(IsNewTrace()); 1048 ASSERT_TRUE(IsNewTrace());
1073 ASSERT_FALSE(IsNewTrace()); 1049 ASSERT_FALSE(IsNewTrace());
1074 1050
1075 // Cleanup. 1051 // Cleanup.
1076 EndTraceAndFlush(); 1052 EndTraceAndFlush();
1077 } 1053 }
1078 1054
1079 1055
1080 // Test that categories work. 1056 // Test that categories work.
1081 TEST_F(TraceEventTestFixture, Categories) { 1057 TEST_F(TraceEventTestFixture, Categories) {
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
1116 1092
1117 const std::vector<std::string> empty_categories; 1093 const std::vector<std::string> empty_categories;
1118 std::vector<std::string> included_categories; 1094 std::vector<std::string> included_categories;
1119 std::vector<std::string> excluded_categories; 1095 std::vector<std::string> excluded_categories;
1120 1096
1121 // Test that category filtering works. 1097 // Test that category filtering works.
1122 1098
1123 // Include nonexistent category -> no events 1099 // Include nonexistent category -> no events
1124 Clear(); 1100 Clear();
1125 included_categories.clear(); 1101 included_categories.clear();
1126 TraceLog::GetInstance()->SetEnabled( 1102 TraceLog::GetInstance()->SetEnabled(TraceConfig("not_found823564786", ""),
1127 CategoryFilter("not_found823564786"), 1103 TraceLog::RECORDING_MODE);
1128 TraceLog::RECORDING_MODE,
1129 TraceOptions());
1130 TRACE_EVENT_INSTANT0("cat1", "name", TRACE_EVENT_SCOPE_THREAD); 1104 TRACE_EVENT_INSTANT0("cat1", "name", TRACE_EVENT_SCOPE_THREAD);
1131 TRACE_EVENT_INSTANT0("cat2", "name", TRACE_EVENT_SCOPE_THREAD); 1105 TRACE_EVENT_INSTANT0("cat2", "name", TRACE_EVENT_SCOPE_THREAD);
1132 EndTraceAndFlush(); 1106 EndTraceAndFlush();
1133 DropTracedMetadataRecords(); 1107 DropTracedMetadataRecords();
1134 EXPECT_TRUE(trace_parsed_.empty()); 1108 EXPECT_TRUE(trace_parsed_.empty());
1135 1109
1136 // Include existent category -> only events of that category 1110 // Include existent category -> only events of that category
1137 Clear(); 1111 Clear();
1138 included_categories.clear(); 1112 included_categories.clear();
1139 TraceLog::GetInstance()->SetEnabled( 1113 TraceLog::GetInstance()->SetEnabled(TraceConfig("inc", ""),
1140 CategoryFilter("inc"), 1114 TraceLog::RECORDING_MODE);
1141 TraceLog::RECORDING_MODE,
1142 TraceOptions());
1143 TRACE_EVENT_INSTANT0("inc", "name", TRACE_EVENT_SCOPE_THREAD); 1115 TRACE_EVENT_INSTANT0("inc", "name", TRACE_EVENT_SCOPE_THREAD);
1144 TRACE_EVENT_INSTANT0("inc2", "name", TRACE_EVENT_SCOPE_THREAD); 1116 TRACE_EVENT_INSTANT0("inc2", "name", TRACE_EVENT_SCOPE_THREAD);
1145 EndTraceAndFlush(); 1117 EndTraceAndFlush();
1146 DropTracedMetadataRecords(); 1118 DropTracedMetadataRecords();
1147 EXPECT_TRUE(FindMatchingValue("cat", "inc")); 1119 EXPECT_TRUE(FindMatchingValue("cat", "inc"));
1148 EXPECT_FALSE(FindNonMatchingValue("cat", "inc")); 1120 EXPECT_FALSE(FindNonMatchingValue("cat", "inc"));
1149 1121
1150 // Include existent wildcard -> all categories matching wildcard 1122 // Include existent wildcard -> all categories matching wildcard
1151 Clear(); 1123 Clear();
1152 included_categories.clear(); 1124 included_categories.clear();
1153 TraceLog::GetInstance()->SetEnabled( 1125 TraceLog::GetInstance()->SetEnabled(
1154 CategoryFilter("inc_wildcard_*,inc_wildchar_?_end"), 1126 TraceConfig("inc_wildcard_*,inc_wildchar_?_end", ""),
1155 TraceLog::RECORDING_MODE, 1127 TraceLog::RECORDING_MODE);
1156 TraceOptions());
1157 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "included", 1128 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "included",
1158 TRACE_EVENT_SCOPE_THREAD); 1129 TRACE_EVENT_SCOPE_THREAD);
1159 TRACE_EVENT_INSTANT0("inc_wildcard_", "included", TRACE_EVENT_SCOPE_THREAD); 1130 TRACE_EVENT_INSTANT0("inc_wildcard_", "included", TRACE_EVENT_SCOPE_THREAD);
1160 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "included", 1131 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "included",
1161 TRACE_EVENT_SCOPE_THREAD); 1132 TRACE_EVENT_SCOPE_THREAD);
1162 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "not_inc", 1133 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "not_inc",
1163 TRACE_EVENT_SCOPE_THREAD); 1134 TRACE_EVENT_SCOPE_THREAD);
1164 TRACE_EVENT_INSTANT0("cat1", "not_inc", TRACE_EVENT_SCOPE_THREAD); 1135 TRACE_EVENT_INSTANT0("cat1", "not_inc", TRACE_EVENT_SCOPE_THREAD);
1165 TRACE_EVENT_INSTANT0("cat2", "not_inc", TRACE_EVENT_SCOPE_THREAD); 1136 TRACE_EVENT_INSTANT0("cat2", "not_inc", TRACE_EVENT_SCOPE_THREAD);
1166 TRACE_EVENT_INSTANT0("inc_wildcard_category,other_category", "included", 1137 TRACE_EVENT_INSTANT0("inc_wildcard_category,other_category", "included",
1167 TRACE_EVENT_SCOPE_THREAD); 1138 TRACE_EVENT_SCOPE_THREAD);
1168 TRACE_EVENT_INSTANT0( 1139 TRACE_EVENT_INSTANT0(
1169 "non_included_category,inc_wildcard_category", "included", 1140 "non_included_category,inc_wildcard_category", "included",
1170 TRACE_EVENT_SCOPE_THREAD); 1141 TRACE_EVENT_SCOPE_THREAD);
1171 EndTraceAndFlush(); 1142 EndTraceAndFlush();
1172 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_abc")); 1143 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_abc"));
1173 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_")); 1144 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_"));
1174 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_x_end")); 1145 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildchar_x_end"));
1175 EXPECT_FALSE(FindMatchingValue("name", "not_inc")); 1146 EXPECT_FALSE(FindMatchingValue("name", "not_inc"));
1176 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_category,other_category")); 1147 EXPECT_TRUE(FindMatchingValue("cat", "inc_wildcard_category,other_category"));
1177 EXPECT_TRUE(FindMatchingValue("cat", 1148 EXPECT_TRUE(FindMatchingValue("cat",
1178 "non_included_category,inc_wildcard_category")); 1149 "non_included_category,inc_wildcard_category"));
1179 1150
1180 included_categories.clear(); 1151 included_categories.clear();
1181 1152
1182 // Exclude nonexistent category -> all events 1153 // Exclude nonexistent category -> all events
1183 Clear(); 1154 Clear();
1184 TraceLog::GetInstance()->SetEnabled( 1155 TraceLog::GetInstance()->SetEnabled(TraceConfig("-not_found823564786", ""),
1185 CategoryFilter("-not_found823564786"), 1156 TraceLog::RECORDING_MODE);
1186 TraceLog::RECORDING_MODE,
1187 TraceOptions());
1188 TRACE_EVENT_INSTANT0("cat1", "name", TRACE_EVENT_SCOPE_THREAD); 1157 TRACE_EVENT_INSTANT0("cat1", "name", TRACE_EVENT_SCOPE_THREAD);
1189 TRACE_EVENT_INSTANT0("cat2", "name", TRACE_EVENT_SCOPE_THREAD); 1158 TRACE_EVENT_INSTANT0("cat2", "name", TRACE_EVENT_SCOPE_THREAD);
1190 TRACE_EVENT_INSTANT0("category1,category2", "name", TRACE_EVENT_SCOPE_THREAD); 1159 TRACE_EVENT_INSTANT0("category1,category2", "name", TRACE_EVENT_SCOPE_THREAD);
1191 EndTraceAndFlush(); 1160 EndTraceAndFlush();
1192 EXPECT_TRUE(FindMatchingValue("cat", "cat1")); 1161 EXPECT_TRUE(FindMatchingValue("cat", "cat1"));
1193 EXPECT_TRUE(FindMatchingValue("cat", "cat2")); 1162 EXPECT_TRUE(FindMatchingValue("cat", "cat2"));
1194 EXPECT_TRUE(FindMatchingValue("cat", "category1,category2")); 1163 EXPECT_TRUE(FindMatchingValue("cat", "category1,category2"));
1195 1164
1196 // Exclude existent category -> only events of other categories 1165 // Exclude existent category -> only events of other categories
1197 Clear(); 1166 Clear();
1198 TraceLog::GetInstance()->SetEnabled( 1167 TraceLog::GetInstance()->SetEnabled(TraceConfig("-inc", ""),
1199 CategoryFilter("-inc"), 1168 TraceLog::RECORDING_MODE);
1200 TraceLog::RECORDING_MODE,
1201 TraceOptions());
1202 TRACE_EVENT_INSTANT0("inc", "name", TRACE_EVENT_SCOPE_THREAD); 1169 TRACE_EVENT_INSTANT0("inc", "name", TRACE_EVENT_SCOPE_THREAD);
1203 TRACE_EVENT_INSTANT0("inc2", "name", TRACE_EVENT_SCOPE_THREAD); 1170 TRACE_EVENT_INSTANT0("inc2", "name", TRACE_EVENT_SCOPE_THREAD);
1204 TRACE_EVENT_INSTANT0("inc2,inc", "name", TRACE_EVENT_SCOPE_THREAD); 1171 TRACE_EVENT_INSTANT0("inc2,inc", "name", TRACE_EVENT_SCOPE_THREAD);
1205 TRACE_EVENT_INSTANT0("inc,inc2", "name", TRACE_EVENT_SCOPE_THREAD); 1172 TRACE_EVENT_INSTANT0("inc,inc2", "name", TRACE_EVENT_SCOPE_THREAD);
1206 EndTraceAndFlush(); 1173 EndTraceAndFlush();
1207 EXPECT_TRUE(FindMatchingValue("cat", "inc2")); 1174 EXPECT_TRUE(FindMatchingValue("cat", "inc2"));
1208 EXPECT_FALSE(FindMatchingValue("cat", "inc")); 1175 EXPECT_FALSE(FindMatchingValue("cat", "inc"));
1209 EXPECT_TRUE(FindMatchingValue("cat", "inc2,inc")); 1176 EXPECT_TRUE(FindMatchingValue("cat", "inc2,inc"));
1210 EXPECT_TRUE(FindMatchingValue("cat", "inc,inc2")); 1177 EXPECT_TRUE(FindMatchingValue("cat", "inc,inc2"));
1211 1178
1212 // Exclude existent wildcard -> all categories not matching wildcard 1179 // Exclude existent wildcard -> all categories not matching wildcard
1213 Clear(); 1180 Clear();
1214 TraceLog::GetInstance()->SetEnabled( 1181 TraceLog::GetInstance()->SetEnabled(
1215 CategoryFilter("-inc_wildcard_*,-inc_wildchar_?_end"), 1182 TraceConfig("-inc_wildcard_*,-inc_wildchar_?_end", ""),
1216 TraceLog::RECORDING_MODE, 1183 TraceLog::RECORDING_MODE);
1217 TraceOptions());
1218 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "not_inc", 1184 TRACE_EVENT_INSTANT0("inc_wildcard_abc", "not_inc",
1219 TRACE_EVENT_SCOPE_THREAD); 1185 TRACE_EVENT_SCOPE_THREAD);
1220 TRACE_EVENT_INSTANT0("inc_wildcard_", "not_inc", 1186 TRACE_EVENT_INSTANT0("inc_wildcard_", "not_inc",
1221 TRACE_EVENT_SCOPE_THREAD); 1187 TRACE_EVENT_SCOPE_THREAD);
1222 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "not_inc", 1188 TRACE_EVENT_INSTANT0("inc_wildchar_x_end", "not_inc",
1223 TRACE_EVENT_SCOPE_THREAD); 1189 TRACE_EVENT_SCOPE_THREAD);
1224 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "included", 1190 TRACE_EVENT_INSTANT0("inc_wildchar_bla_end", "included",
1225 TRACE_EVENT_SCOPE_THREAD); 1191 TRACE_EVENT_SCOPE_THREAD);
1226 TRACE_EVENT_INSTANT0("cat1", "included", TRACE_EVENT_SCOPE_THREAD); 1192 TRACE_EVENT_INSTANT0("cat1", "included", TRACE_EVENT_SCOPE_THREAD);
1227 TRACE_EVENT_INSTANT0("cat2", "included", TRACE_EVENT_SCOPE_THREAD); 1193 TRACE_EVENT_INSTANT0("cat2", "included", TRACE_EVENT_SCOPE_THREAD);
(...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after
1726 TraceLog::GetInstance()->SetDisabled(); 1692 TraceLog::GetInstance()->SetDisabled();
1727 1693
1728 TRACE_EVENT_INSTANT1("category", "test", TRACE_EVENT_SCOPE_THREAD, "a", a++); 1694 TRACE_EVENT_INSTANT1("category", "test", TRACE_EVENT_SCOPE_THREAD, "a", a++);
1729 EXPECT_EQ(1, a); 1695 EXPECT_EQ(1, a);
1730 1696
1731 EndTraceAndFlush(); 1697 EndTraceAndFlush();
1732 } 1698 }
1733 1699
1734 TEST_F(TraceEventTestFixture, TraceEnableDisable) { 1700 TEST_F(TraceEventTestFixture, TraceEnableDisable) {
1735 TraceLog* trace_log = TraceLog::GetInstance(); 1701 TraceLog* trace_log = TraceLog::GetInstance();
1736 CategoryFilter cf_inc_all("*"); 1702 TraceConfig tc_inc_all("*", "");
1737 trace_log->SetEnabled(cf_inc_all, 1703 trace_log->SetEnabled(tc_inc_all, TraceLog::RECORDING_MODE);
1738 TraceLog::RECORDING_MODE,
1739 TraceOptions());
1740 EXPECT_TRUE(trace_log->IsEnabled()); 1704 EXPECT_TRUE(trace_log->IsEnabled());
1741 trace_log->SetDisabled(); 1705 trace_log->SetDisabled();
1742 EXPECT_FALSE(trace_log->IsEnabled()); 1706 EXPECT_FALSE(trace_log->IsEnabled());
1743 1707
1744 trace_log->SetEnabled(cf_inc_all, 1708 trace_log->SetEnabled(tc_inc_all, TraceLog::RECORDING_MODE);
1745 TraceLog::RECORDING_MODE,
1746 TraceOptions());
1747 EXPECT_TRUE(trace_log->IsEnabled()); 1709 EXPECT_TRUE(trace_log->IsEnabled());
1748 const std::vector<std::string> empty; 1710 const std::vector<std::string> empty;
1749 trace_log->SetEnabled(CategoryFilter(), 1711 trace_log->SetEnabled(TraceConfig(), TraceLog::RECORDING_MODE);
1750 TraceLog::RECORDING_MODE,
1751 TraceOptions());
1752 EXPECT_TRUE(trace_log->IsEnabled()); 1712 EXPECT_TRUE(trace_log->IsEnabled());
1753 trace_log->SetDisabled(); 1713 trace_log->SetDisabled();
1754 EXPECT_FALSE(trace_log->IsEnabled()); 1714 EXPECT_FALSE(trace_log->IsEnabled());
1755 trace_log->SetDisabled(); 1715 trace_log->SetDisabled();
1756 EXPECT_FALSE(trace_log->IsEnabled()); 1716 EXPECT_FALSE(trace_log->IsEnabled());
1757 } 1717 }
1758 1718
1759 TEST_F(TraceEventTestFixture, TraceCategoriesAfterNestedEnable) { 1719 TEST_F(TraceEventTestFixture, TraceCategoriesAfterNestedEnable) {
1760 TraceLog* trace_log = TraceLog::GetInstance(); 1720 TraceLog* trace_log = TraceLog::GetInstance();
1761 trace_log->SetEnabled(CategoryFilter("foo,bar"), 1721 trace_log->SetEnabled(TraceConfig("foo,bar", ""), TraceLog::RECORDING_MODE);
1762 TraceLog::RECORDING_MODE,
1763 TraceOptions());
1764 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo")); 1722 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo"));
1765 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("bar")); 1723 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("bar"));
1766 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz")); 1724 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz"));
1767 trace_log->SetEnabled(CategoryFilter("foo2"), 1725 trace_log->SetEnabled(TraceConfig("foo2", ""), TraceLog::RECORDING_MODE);
1768 TraceLog::RECORDING_MODE,
1769 TraceOptions());
1770 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo2")); 1726 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo2"));
1771 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz")); 1727 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz"));
1772 // The "" becomes the default catergory set when applied. 1728 // The "" becomes the default catergory set when applied.
1773 trace_log->SetEnabled(CategoryFilter(), 1729 trace_log->SetEnabled(TraceConfig(), TraceLog::RECORDING_MODE);
1774 TraceLog::RECORDING_MODE,
1775 TraceOptions());
1776 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo")); 1730 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("foo"));
1777 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("baz")); 1731 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("baz"));
1778 EXPECT_STREQ("-*Debug,-*Test", 1732 EXPECT_STREQ(
1779 trace_log->GetCurrentCategoryFilter().ToString().c_str()); 1733 "-*Debug,-*Test",
1734 trace_log->GetCurrentTraceConfig().ToCategoryFilterString().c_str());
1780 trace_log->SetDisabled(); 1735 trace_log->SetDisabled();
1781 trace_log->SetDisabled(); 1736 trace_log->SetDisabled();
1782 trace_log->SetDisabled(); 1737 trace_log->SetDisabled();
1783 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("foo")); 1738 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("foo"));
1784 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz")); 1739 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("baz"));
1785 1740
1786 trace_log->SetEnabled(CategoryFilter("-foo,-bar"), 1741 trace_log->SetEnabled(TraceConfig("-foo,-bar", ""), TraceLog::RECORDING_MODE);
1787 TraceLog::RECORDING_MODE,
1788 TraceOptions());
1789 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("foo")); 1742 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("foo"));
1790 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("baz")); 1743 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("baz"));
1791 trace_log->SetEnabled(CategoryFilter("moo"), 1744 trace_log->SetEnabled(TraceConfig("moo", ""), TraceLog::RECORDING_MODE);
1792 TraceLog::RECORDING_MODE,
1793 TraceOptions());
1794 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("baz")); 1745 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("baz"));
1795 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("moo")); 1746 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("moo"));
1796 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("foo")); 1747 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("foo"));
1797 EXPECT_STREQ("-foo,-bar", 1748 EXPECT_STREQ(
1798 trace_log->GetCurrentCategoryFilter().ToString().c_str()); 1749 "-foo,-bar",
1750 trace_log->GetCurrentTraceConfig().ToCategoryFilterString().c_str());
1799 trace_log->SetDisabled(); 1751 trace_log->SetDisabled();
1800 trace_log->SetDisabled(); 1752 trace_log->SetDisabled();
1801 1753
1802 // Make sure disabled categories aren't cleared if we set in the second. 1754 // Make sure disabled categories aren't cleared if we set in the second.
1803 trace_log->SetEnabled(CategoryFilter("disabled-by-default-cc,foo"), 1755 trace_log->SetEnabled(TraceConfig("disabled-by-default-cc,foo", ""),
1804 TraceLog::RECORDING_MODE, 1756 TraceLog::RECORDING_MODE);
1805 TraceOptions());
1806 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("bar")); 1757 EXPECT_FALSE(*trace_log->GetCategoryGroupEnabled("bar"));
1807 trace_log->SetEnabled(CategoryFilter("disabled-by-default-gpu"), 1758 trace_log->SetEnabled(TraceConfig("disabled-by-default-gpu", ""),
1808 TraceLog::RECORDING_MODE, 1759 TraceLog::RECORDING_MODE);
1809 TraceOptions());
1810 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("disabled-by-default-cc")); 1760 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("disabled-by-default-cc"));
1811 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("disabled-by-default-gpu")); 1761 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("disabled-by-default-gpu"));
1812 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("bar")); 1762 EXPECT_TRUE(*trace_log->GetCategoryGroupEnabled("bar"));
1813 EXPECT_STREQ("disabled-by-default-cc,disabled-by-default-gpu", 1763 EXPECT_STREQ(
1814 trace_log->GetCurrentCategoryFilter().ToString().c_str()); 1764 "disabled-by-default-cc,disabled-by-default-gpu",
1765 trace_log->GetCurrentTraceConfig().ToCategoryFilterString().c_str());
1815 trace_log->SetDisabled(); 1766 trace_log->SetDisabled();
1816 trace_log->SetDisabled(); 1767 trace_log->SetDisabled();
1817 } 1768 }
1818 1769
1819 TEST_F(TraceEventTestFixture, TraceSampling) { 1770 TEST_F(TraceEventTestFixture, TraceSampling) {
1820 TraceOptions trace_options(RECORD_UNTIL_FULL); 1771 TraceLog::GetInstance()->SetEnabled(
1821 trace_options.enable_sampling = true; 1772 TraceConfig(kRecordAllCategoryFilter, "record-until-full,enable-sampling"),
1822 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), 1773 TraceLog::RECORDING_MODE);
1823 TraceLog::RECORDING_MODE,
1824 trace_options);
1825 1774
1826 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "cc", "Stuff"); 1775 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "cc", "Stuff");
1827 TraceLog::GetInstance()->WaitSamplingEventForTesting(); 1776 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1828 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "cc", "Things"); 1777 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "cc", "Things");
1829 TraceLog::GetInstance()->WaitSamplingEventForTesting(); 1778 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1830 1779
1831 EndTraceAndFlush(); 1780 EndTraceAndFlush();
1832 1781
1833 // Make sure we hit at least once. 1782 // Make sure we hit at least once.
1834 EXPECT_TRUE(FindNamePhase("Stuff", "P")); 1783 EXPECT_TRUE(FindNamePhase("Stuff", "P"));
1835 EXPECT_TRUE(FindNamePhase("Things", "P")); 1784 EXPECT_TRUE(FindNamePhase("Things", "P"));
1836 } 1785 }
1837 1786
1838 TEST_F(TraceEventTestFixture, TraceSamplingScope) { 1787 TEST_F(TraceEventTestFixture, TraceSamplingScope) {
1839 TraceOptions trace_options(RECORD_UNTIL_FULL); 1788 TraceLog::GetInstance()->SetEnabled(
1840 trace_options.enable_sampling = true; 1789 TraceConfig(kRecordAllCategoryFilter, "record-until-full,enable-sampling"),
1841 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), 1790 TraceLog::RECORDING_MODE);
1842 TraceLog::RECORDING_MODE,
1843 trace_options);
1844 1791
1845 TRACE_EVENT_SCOPED_SAMPLING_STATE("AAA", "name"); 1792 TRACE_EVENT_SCOPED_SAMPLING_STATE("AAA", "name");
1846 TraceLog::GetInstance()->WaitSamplingEventForTesting(); 1793 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1847 { 1794 {
1848 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "AAA"); 1795 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "AAA");
1849 TRACE_EVENT_SCOPED_SAMPLING_STATE("BBB", "name"); 1796 TRACE_EVENT_SCOPED_SAMPLING_STATE("BBB", "name");
1850 TraceLog::GetInstance()->WaitSamplingEventForTesting(); 1797 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1851 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "BBB"); 1798 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "BBB");
1852 } 1799 }
1853 TraceLog::GetInstance()->WaitSamplingEventForTesting(); 1800 TraceLog::GetInstance()->WaitSamplingEventForTesting();
(...skipping 10 matching lines...) Expand all
1864 TraceLog::GetInstance()->WaitSamplingEventForTesting(); 1811 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1865 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "DDD"); 1812 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "DDD");
1866 } 1813 }
1867 TraceLog::GetInstance()->WaitSamplingEventForTesting(); 1814 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1868 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "DDD"); 1815 EXPECT_STREQ(TRACE_EVENT_GET_SAMPLING_STATE(), "DDD");
1869 1816
1870 EndTraceAndFlush(); 1817 EndTraceAndFlush();
1871 } 1818 }
1872 1819
1873 TEST_F(TraceEventTestFixture, TraceContinuousSampling) { 1820 TEST_F(TraceEventTestFixture, TraceContinuousSampling) {
1874 TraceOptions trace_options(RECORD_UNTIL_FULL); 1821 TraceLog::GetInstance()->SetEnabled(
1875 trace_options.enable_sampling = true; 1822 TraceConfig(kRecordAllCategoryFilter, "record-until-full,enable-sampling"),
1876 1823 TraceLog::MONITORING_MODE);
1877 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"),
1878 TraceLog::MONITORING_MODE,
1879 trace_options);
1880 1824
1881 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "category", "AAA"); 1825 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "category", "AAA");
1882 TraceLog::GetInstance()->WaitSamplingEventForTesting(); 1826 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1883 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "category", "BBB"); 1827 TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(1, "category", "BBB");
1884 TraceLog::GetInstance()->WaitSamplingEventForTesting(); 1828 TraceLog::GetInstance()->WaitSamplingEventForTesting();
1885 1829
1886 FlushMonitoring(); 1830 FlushMonitoring();
1887 1831
1888 // Make sure we can get the profiled data. 1832 // Make sure we can get the profiled data.
1889 EXPECT_TRUE(FindNamePhase("AAA", "P")); 1833 EXPECT_TRUE(FindNamePhase("AAA", "P"));
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1926 void AppendAsTraceFormat(std::string* out) const override { 1870 void AppendAsTraceFormat(std::string* out) const override {
1927 out->append("{\"foo\":1}"); 1871 out->append("{\"foo\":1}");
1928 } 1872 }
1929 1873
1930 private: 1874 private:
1931 ~MyData() override {} 1875 ~MyData() override {}
1932 DISALLOW_COPY_AND_ASSIGN(MyData); 1876 DISALLOW_COPY_AND_ASSIGN(MyData);
1933 }; 1877 };
1934 1878
1935 TEST_F(TraceEventTestFixture, ConvertableTypes) { 1879 TEST_F(TraceEventTestFixture, ConvertableTypes) {
1936 TraceLog::GetInstance()->SetEnabled( 1880 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
1937 CategoryFilter("*"), 1881 TraceLog::RECORDING_MODE);
1938 TraceLog::RECORDING_MODE,
1939 TraceOptions());
1940 1882
1941 scoped_refptr<ConvertableToTraceFormat> data(new MyData()); 1883 scoped_refptr<ConvertableToTraceFormat> data(new MyData());
1942 scoped_refptr<ConvertableToTraceFormat> data1(new MyData()); 1884 scoped_refptr<ConvertableToTraceFormat> data1(new MyData());
1943 scoped_refptr<ConvertableToTraceFormat> data2(new MyData()); 1885 scoped_refptr<ConvertableToTraceFormat> data2(new MyData());
1944 TRACE_EVENT1("foo", "bar", "data", data); 1886 TRACE_EVENT1("foo", "bar", "data", data);
1945 TRACE_EVENT2("foo", "baz", 1887 TRACE_EVENT2("foo", "baz",
1946 "data1", data1, 1888 "data1", data1,
1947 "data2", data2); 1889 "data2", data2);
1948 1890
1949 1891
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
2033 value = NULL; 1975 value = NULL;
2034 convertable_dict = NULL; 1976 convertable_dict = NULL;
2035 foo_val = 0; 1977 foo_val = 0;
2036 EXPECT_TRUE(args_dict->Get("convert", &value)); 1978 EXPECT_TRUE(args_dict->Get("convert", &value));
2037 ASSERT_TRUE(value->GetAsDictionary(&convertable_dict)); 1979 ASSERT_TRUE(value->GetAsDictionary(&convertable_dict));
2038 EXPECT_TRUE(convertable_dict->GetInteger("foo", &foo_val)); 1980 EXPECT_TRUE(convertable_dict->GetInteger("foo", &foo_val));
2039 EXPECT_EQ(1, foo_val); 1981 EXPECT_EQ(1, foo_val);
2040 } 1982 }
2041 1983
2042 TEST_F(TraceEventTestFixture, PrimitiveArgs) { 1984 TEST_F(TraceEventTestFixture, PrimitiveArgs) {
2043 TraceLog::GetInstance()->SetEnabled( 1985 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
2044 CategoryFilter("*"), 1986 TraceLog::RECORDING_MODE);
2045 TraceLog::RECORDING_MODE,
2046 TraceOptions());
2047 1987
2048 TRACE_EVENT1("foo", "event1", "int_one", 1); 1988 TRACE_EVENT1("foo", "event1", "int_one", 1);
2049 TRACE_EVENT1("foo", "event2", "int_neg_ten", -10); 1989 TRACE_EVENT1("foo", "event2", "int_neg_ten", -10);
2050 TRACE_EVENT1("foo", "event3", "float_one", 1.0f); 1990 TRACE_EVENT1("foo", "event3", "float_one", 1.0f);
2051 TRACE_EVENT1("foo", "event4", "float_half", .5f); 1991 TRACE_EVENT1("foo", "event4", "float_half", .5f);
2052 TRACE_EVENT1("foo", "event5", "float_neghalf", -.5f); 1992 TRACE_EVENT1("foo", "event5", "float_neghalf", -.5f);
2053 TRACE_EVENT1("foo", "event6", "float_infinity", 1993 TRACE_EVENT1("foo", "event6", "float_infinity",
2054 std::numeric_limits<float>::infinity()); 1994 std::numeric_limits<float>::infinity());
2055 TRACE_EVENT1("foo", "event6b", "float_neg_infinity", 1995 TRACE_EVENT1("foo", "event6b", "float_neg_infinity",
2056 -std::numeric_limits<float>::infinity()); 1996 -std::numeric_limits<float>::infinity());
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
2198 EXPECT_EQ(0, int_value); 2138 EXPECT_EQ(0, int_value);
2199 2139
2200 dict = FindNamePhase("event15", "X"); 2140 dict = FindNamePhase("event15", "X");
2201 ASSERT_TRUE(dict); 2141 ASSERT_TRUE(dict);
2202 dict->GetDictionary("args", &args_dict); 2142 dict->GetDictionary("args", &args_dict);
2203 ASSERT_TRUE(args_dict); 2143 ASSERT_TRUE(args_dict);
2204 EXPECT_TRUE(args_dict->GetInteger("timeticks_one", &int_value)); 2144 EXPECT_TRUE(args_dict->GetInteger("timeticks_one", &int_value));
2205 EXPECT_EQ(1, int_value); 2145 EXPECT_EQ(1, int_value);
2206 } 2146 }
2207 2147
2148 namespace {
2149
2150 bool IsTraceEventArgsWhitelisted(const char* category_group_name,
2151 const char* event_name) {
2152 if (MatchPattern(category_group_name, "toplevel") &&
2153 MatchPattern(event_name, "*")) {
2154 return true;
2155 }
2156
2157 return false;
2158 }
2159
2160 } // namespace
2161
2162 TEST_F(TraceEventTestFixture, ArgsWhitelisting) {
2163 TraceLog::GetInstance()->SetArgumentFilterPredicate(
2164 base::Bind(&IsTraceEventArgsWhitelisted));
2165
2166 TraceLog::GetInstance()->SetEnabled(
2167 TraceConfig(kRecordAllCategoryFilter, "enable-argument-filter"),
2168 TraceLog::RECORDING_MODE);
2169
2170 TRACE_EVENT1("toplevel", "event1", "int_one", 1);
2171 TRACE_EVENT1("whitewashed", "event2", "int_two", 1);
2172 EndTraceAndFlush();
2173
2174 const DictionaryValue* args_dict = NULL;
2175 DictionaryValue* dict = NULL;
2176 int int_value;
2177
2178 dict = FindNamePhase("event1", "X");
2179 ASSERT_TRUE(dict);
2180 dict->GetDictionary("args", &args_dict);
2181 ASSERT_TRUE(args_dict);
2182 EXPECT_TRUE(args_dict->GetInteger("int_one", &int_value));
2183 EXPECT_EQ(1, int_value);
2184
2185 dict = FindNamePhase("event2", "X");
2186 ASSERT_TRUE(dict);
2187 dict->GetDictionary("args", &args_dict);
2188 ASSERT_TRUE(args_dict);
2189 EXPECT_FALSE(args_dict->GetInteger("int_two", &int_value));
2190 EXPECT_TRUE(args_dict->GetInteger("stripped", &int_value));
2191 }
2192
2208 class TraceEventCallbackTest : public TraceEventTestFixture { 2193 class TraceEventCallbackTest : public TraceEventTestFixture {
2209 public: 2194 public:
2210 void SetUp() override { 2195 void SetUp() override {
2211 TraceEventTestFixture::SetUp(); 2196 TraceEventTestFixture::SetUp();
2212 ASSERT_EQ(NULL, s_instance); 2197 ASSERT_EQ(NULL, s_instance);
2213 s_instance = this; 2198 s_instance = this;
2214 } 2199 }
2215 void TearDown() override { 2200 void TearDown() override {
2216 TraceLog::GetInstance()->SetDisabled(); 2201 TraceLog::GetInstance()->SetDisabled();
2217 ASSERT_TRUE(s_instance); 2202 ASSERT_TRUE(s_instance);
(...skipping 25 matching lines...) Expand all
2243 const std::string& category, 2228 const std::string& category,
2244 const std::string& name) { 2229 const std::string& name) {
2245 EXPECT_EQ(phase, collected_events_phases_[i]); 2230 EXPECT_EQ(phase, collected_events_phases_[i]);
2246 EXPECT_EQ(category, collected_events_categories_[i]); 2231 EXPECT_EQ(category, collected_events_categories_[i]);
2247 EXPECT_EQ(name, collected_events_names_[i]); 2232 EXPECT_EQ(name, collected_events_names_[i]);
2248 } 2233 }
2249 2234
2250 std::vector<std::string> collected_events_categories_; 2235 std::vector<std::string> collected_events_categories_;
2251 std::vector<std::string> collected_events_names_; 2236 std::vector<std::string> collected_events_names_;
2252 std::vector<unsigned char> collected_events_phases_; 2237 std::vector<unsigned char> collected_events_phases_;
2253 std::vector<TimeTicks> collected_events_timestamps_; 2238 std::vector<TraceTicks> collected_events_timestamps_;
2254 2239
2255 static TraceEventCallbackTest* s_instance; 2240 static TraceEventCallbackTest* s_instance;
2256 static void Callback(TimeTicks timestamp, 2241 static void Callback(TraceTicks timestamp,
2257 char phase, 2242 char phase,
2258 const unsigned char* category_group_enabled, 2243 const unsigned char* category_group_enabled,
2259 const char* name, 2244 const char* name,
2260 unsigned long long id, 2245 unsigned long long id,
2261 int num_args, 2246 int num_args,
2262 const char* const arg_names[], 2247 const char* const arg_names[],
2263 const unsigned char arg_types[], 2248 const unsigned char arg_types[],
2264 const unsigned long long arg_values[], 2249 const unsigned long long arg_values[],
2265 unsigned char flags) { 2250 unsigned char flags) {
2266 s_instance->collected_events_phases_.push_back(phase); 2251 s_instance->collected_events_phases_.push_back(phase);
2267 s_instance->collected_events_categories_.push_back( 2252 s_instance->collected_events_categories_.push_back(
2268 TraceLog::GetCategoryGroupName(category_group_enabled)); 2253 TraceLog::GetCategoryGroupName(category_group_enabled));
2269 s_instance->collected_events_names_.push_back(name); 2254 s_instance->collected_events_names_.push_back(name);
2270 s_instance->collected_events_timestamps_.push_back(timestamp); 2255 s_instance->collected_events_timestamps_.push_back(timestamp);
2271 } 2256 }
2272 }; 2257 };
2273 2258
2274 TraceEventCallbackTest* TraceEventCallbackTest::s_instance; 2259 TraceEventCallbackTest* TraceEventCallbackTest::s_instance;
2275 2260
2276 TEST_F(TraceEventCallbackTest, TraceEventCallback) { 2261 TEST_F(TraceEventCallbackTest, TraceEventCallback) {
2277 TRACE_EVENT_INSTANT0("all", "before enable", TRACE_EVENT_SCOPE_THREAD); 2262 TRACE_EVENT_INSTANT0("all", "before enable", TRACE_EVENT_SCOPE_THREAD);
2278 TraceLog::GetInstance()->SetEventCallbackEnabled( 2263 TraceLog::GetInstance()->SetEventCallbackEnabled(
2279 CategoryFilter("*"), Callback); 2264 TraceConfig(kRecordAllCategoryFilter, ""), Callback);
2280 TRACE_EVENT_INSTANT0("all", "event1", TRACE_EVENT_SCOPE_GLOBAL); 2265 TRACE_EVENT_INSTANT0("all", "event1", TRACE_EVENT_SCOPE_GLOBAL);
2281 TRACE_EVENT_INSTANT0("all", "event2", TRACE_EVENT_SCOPE_GLOBAL); 2266 TRACE_EVENT_INSTANT0("all", "event2", TRACE_EVENT_SCOPE_GLOBAL);
2282 { 2267 {
2283 TRACE_EVENT0("all", "duration"); 2268 TRACE_EVENT0("all", "duration");
2284 TRACE_EVENT_INSTANT0("all", "event3", TRACE_EVENT_SCOPE_GLOBAL); 2269 TRACE_EVENT_INSTANT0("all", "event3", TRACE_EVENT_SCOPE_GLOBAL);
2285 } 2270 }
2286 TraceLog::GetInstance()->SetEventCallbackDisabled(); 2271 TraceLog::GetInstance()->SetEventCallbackDisabled();
2287 TRACE_EVENT_INSTANT0("all", "after callback removed", 2272 TRACE_EVENT_INSTANT0("all", "after callback removed",
2288 TRACE_EVENT_SCOPE_GLOBAL); 2273 TRACE_EVENT_SCOPE_GLOBAL);
2289 ASSERT_EQ(5u, collected_events_names_.size()); 2274 ASSERT_EQ(5u, collected_events_names_.size());
2290 EXPECT_EQ("event1", collected_events_names_[0]); 2275 EXPECT_EQ("event1", collected_events_names_[0]);
2291 EXPECT_EQ(TRACE_EVENT_PHASE_INSTANT, collected_events_phases_[0]); 2276 EXPECT_EQ(TRACE_EVENT_PHASE_INSTANT, collected_events_phases_[0]);
2292 EXPECT_EQ("event2", collected_events_names_[1]); 2277 EXPECT_EQ("event2", collected_events_names_[1]);
2293 EXPECT_EQ(TRACE_EVENT_PHASE_INSTANT, collected_events_phases_[1]); 2278 EXPECT_EQ(TRACE_EVENT_PHASE_INSTANT, collected_events_phases_[1]);
2294 EXPECT_EQ("duration", collected_events_names_[2]); 2279 EXPECT_EQ("duration", collected_events_names_[2]);
2295 EXPECT_EQ(TRACE_EVENT_PHASE_BEGIN, collected_events_phases_[2]); 2280 EXPECT_EQ(TRACE_EVENT_PHASE_BEGIN, collected_events_phases_[2]);
2296 EXPECT_EQ("event3", collected_events_names_[3]); 2281 EXPECT_EQ("event3", collected_events_names_[3]);
2297 EXPECT_EQ(TRACE_EVENT_PHASE_INSTANT, collected_events_phases_[3]); 2282 EXPECT_EQ(TRACE_EVENT_PHASE_INSTANT, collected_events_phases_[3]);
2298 EXPECT_EQ("duration", collected_events_names_[4]); 2283 EXPECT_EQ("duration", collected_events_names_[4]);
2299 EXPECT_EQ(TRACE_EVENT_PHASE_END, collected_events_phases_[4]); 2284 EXPECT_EQ(TRACE_EVENT_PHASE_END, collected_events_phases_[4]);
2300 for (size_t i = 1; i < collected_events_timestamps_.size(); i++) { 2285 for (size_t i = 1; i < collected_events_timestamps_.size(); i++) {
2301 EXPECT_LE(collected_events_timestamps_[i - 1], 2286 EXPECT_LE(collected_events_timestamps_[i - 1],
2302 collected_events_timestamps_[i]); 2287 collected_events_timestamps_[i]);
2303 } 2288 }
2304 } 2289 }
2305 2290
2306 TEST_F(TraceEventCallbackTest, TraceEventCallbackWhileFull) { 2291 TEST_F(TraceEventCallbackTest, TraceEventCallbackWhileFull) {
2307 TraceLog::GetInstance()->SetEnabled( 2292 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""),
2308 CategoryFilter("*"), 2293 TraceLog::RECORDING_MODE);
2309 TraceLog::RECORDING_MODE,
2310 TraceOptions());
2311 do { 2294 do {
2312 TRACE_EVENT_INSTANT0("all", "badger badger", TRACE_EVENT_SCOPE_GLOBAL); 2295 TRACE_EVENT_INSTANT0("all", "badger badger", TRACE_EVENT_SCOPE_GLOBAL);
2313 } while (!TraceLog::GetInstance()->BufferIsFull()); 2296 } while (!TraceLog::GetInstance()->BufferIsFull());
2314 TraceLog::GetInstance()->SetEventCallbackEnabled(CategoryFilter("*"), 2297 TraceLog::GetInstance()->SetEventCallbackEnabled(
2315 Callback); 2298 TraceConfig(kRecordAllCategoryFilter, ""), Callback);
2316 TRACE_EVENT_INSTANT0("all", "a snake", TRACE_EVENT_SCOPE_GLOBAL); 2299 TRACE_EVENT_INSTANT0("all", "a snake", TRACE_EVENT_SCOPE_GLOBAL);
2317 TraceLog::GetInstance()->SetEventCallbackDisabled(); 2300 TraceLog::GetInstance()->SetEventCallbackDisabled();
2318 ASSERT_EQ(1u, collected_events_names_.size()); 2301 ASSERT_EQ(1u, collected_events_names_.size());
2319 EXPECT_EQ("a snake", collected_events_names_[0]); 2302 EXPECT_EQ("a snake", collected_events_names_[0]);
2320 } 2303 }
2321 2304
2322 // 1: Enable callback, enable recording, disable callback, disable recording. 2305 // 1: Enable callback, enable recording, disable callback, disable recording.
2323 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording1) { 2306 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording1) {
2324 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); 2307 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2325 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); 2308 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2326 TraceLog::GetInstance()->SetEventCallbackEnabled(CategoryFilter("callback"), 2309 TraceLog::GetInstance()->SetEventCallbackEnabled(TraceConfig("callback", ""),
2327 Callback); 2310 Callback);
2328 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); 2311 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2329 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); 2312 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2330 TraceLog::GetInstance()->SetEnabled( 2313 TraceLog::GetInstance()->SetEnabled(TraceConfig("recording", ""),
2331 CategoryFilter("recording"), 2314 TraceLog::RECORDING_MODE);
2332 TraceLog::RECORDING_MODE,
2333 TraceOptions());
2334 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); 2315 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2335 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); 2316 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2336 TraceLog::GetInstance()->SetEventCallbackDisabled(); 2317 TraceLog::GetInstance()->SetEventCallbackDisabled();
2337 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); 2318 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2338 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); 2319 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2339 EndTraceAndFlush(); 2320 EndTraceAndFlush();
2340 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); 2321 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2341 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); 2322 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2342 2323
2343 DropTracedMetadataRecords(); 2324 DropTracedMetadataRecords();
2344 VerifyCallbackAndRecordedEvents(2, 2); 2325 VerifyCallbackAndRecordedEvents(2, 2);
2345 } 2326 }
2346 2327
2347 // 2: Enable callback, enable recording, disable recording, disable callback. 2328 // 2: Enable callback, enable recording, disable recording, disable callback.
2348 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording2) { 2329 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording2) {
2349 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); 2330 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2350 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); 2331 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2351 TraceLog::GetInstance()->SetEventCallbackEnabled(CategoryFilter("callback"), 2332 TraceLog::GetInstance()->SetEventCallbackEnabled(TraceConfig("callback", ""),
2352 Callback); 2333 Callback);
2353 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); 2334 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2354 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); 2335 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2355 TraceLog::GetInstance()->SetEnabled( 2336 TraceLog::GetInstance()->SetEnabled(TraceConfig("recording", ""),
2356 CategoryFilter("recording"), 2337 TraceLog::RECORDING_MODE);
2357 TraceLog::RECORDING_MODE,
2358 TraceOptions());
2359 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); 2338 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2360 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); 2339 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2361 EndTraceAndFlush(); 2340 EndTraceAndFlush();
2362 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); 2341 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2363 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); 2342 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2364 TraceLog::GetInstance()->SetEventCallbackDisabled(); 2343 TraceLog::GetInstance()->SetEventCallbackDisabled();
2365 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); 2344 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2366 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); 2345 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2367 2346
2368 DropTracedMetadataRecords(); 2347 DropTracedMetadataRecords();
2369 VerifyCallbackAndRecordedEvents(3, 1); 2348 VerifyCallbackAndRecordedEvents(3, 1);
2370 } 2349 }
2371 2350
2372 // 3: Enable recording, enable callback, disable callback, disable recording. 2351 // 3: Enable recording, enable callback, disable callback, disable recording.
2373 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording3) { 2352 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording3) {
2374 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); 2353 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2375 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); 2354 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2376 TraceLog::GetInstance()->SetEnabled( 2355 TraceLog::GetInstance()->SetEnabled(TraceConfig("recording", ""),
2377 CategoryFilter("recording"), 2356 TraceLog::RECORDING_MODE);
2378 TraceLog::RECORDING_MODE,
2379 TraceOptions());
2380 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); 2357 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2381 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); 2358 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2382 TraceLog::GetInstance()->SetEventCallbackEnabled(CategoryFilter("callback"), 2359 TraceLog::GetInstance()->SetEventCallbackEnabled(TraceConfig("callback", ""),
2383 Callback); 2360 Callback);
2384 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); 2361 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2385 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); 2362 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2386 TraceLog::GetInstance()->SetEventCallbackDisabled(); 2363 TraceLog::GetInstance()->SetEventCallbackDisabled();
2387 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); 2364 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2388 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); 2365 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2389 EndTraceAndFlush(); 2366 EndTraceAndFlush();
2390 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); 2367 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2391 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); 2368 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2392 2369
2393 DropTracedMetadataRecords(); 2370 DropTracedMetadataRecords();
2394 VerifyCallbackAndRecordedEvents(1, 3); 2371 VerifyCallbackAndRecordedEvents(1, 3);
2395 } 2372 }
2396 2373
2397 // 4: Enable recording, enable callback, disable recording, disable callback. 2374 // 4: Enable recording, enable callback, disable recording, disable callback.
2398 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording4) { 2375 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecording4) {
2399 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); 2376 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2400 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); 2377 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2401 TraceLog::GetInstance()->SetEnabled( 2378 TraceLog::GetInstance()->SetEnabled(TraceConfig("recording", ""),
2402 CategoryFilter("recording"), 2379 TraceLog::RECORDING_MODE);
2403 TraceLog::RECORDING_MODE,
2404 TraceOptions());
2405 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); 2380 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2406 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); 2381 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2407 TraceLog::GetInstance()->SetEventCallbackEnabled(CategoryFilter("callback"), 2382 TraceLog::GetInstance()->SetEventCallbackEnabled(TraceConfig("callback", ""),
2408 Callback); 2383 Callback);
2409 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL); 2384 TRACE_EVENT_INSTANT0("recording", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2410 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); 2385 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2411 EndTraceAndFlush(); 2386 EndTraceAndFlush();
2412 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); 2387 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2413 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL); 2388 TRACE_EVENT_INSTANT0("callback", "yes", TRACE_EVENT_SCOPE_GLOBAL);
2414 TraceLog::GetInstance()->SetEventCallbackDisabled(); 2389 TraceLog::GetInstance()->SetEventCallbackDisabled();
2415 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL); 2390 TRACE_EVENT_INSTANT0("recording", "no", TRACE_EVENT_SCOPE_GLOBAL);
2416 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL); 2391 TRACE_EVENT_INSTANT0("callback", "no", TRACE_EVENT_SCOPE_GLOBAL);
2417 2392
2418 DropTracedMetadataRecords(); 2393 DropTracedMetadataRecords();
2419 VerifyCallbackAndRecordedEvents(2, 2); 2394 VerifyCallbackAndRecordedEvents(2, 2);
2420 } 2395 }
2421 2396
2422 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecordingDuration) { 2397 TEST_F(TraceEventCallbackTest, TraceEventCallbackAndRecordingDuration) {
2423 TraceLog::GetInstance()->SetEventCallbackEnabled(CategoryFilter("*"), 2398 TraceLog::GetInstance()->SetEventCallbackEnabled(
2424 Callback); 2399 TraceConfig(kRecordAllCategoryFilter, ""), Callback);
2425 { 2400 {
2426 TRACE_EVENT0("callback", "duration1"); 2401 TRACE_EVENT0("callback", "duration1");
2427 TraceLog::GetInstance()->SetEnabled( 2402 TraceLog::GetInstance()->SetEnabled(
2428 CategoryFilter("*"), 2403 TraceConfig(kRecordAllCategoryFilter, ""), TraceLog::RECORDING_MODE);
2429 TraceLog::RECORDING_MODE,
2430 TraceOptions());
2431 TRACE_EVENT0("callback", "duration2"); 2404 TRACE_EVENT0("callback", "duration2");
2432 EndTraceAndFlush(); 2405 EndTraceAndFlush();
2433 TRACE_EVENT0("callback", "duration3"); 2406 TRACE_EVENT0("callback", "duration3");
2434 } 2407 }
2435 TraceLog::GetInstance()->SetEventCallbackDisabled(); 2408 TraceLog::GetInstance()->SetEventCallbackDisabled();
2436 2409
2437 ASSERT_EQ(6u, collected_events_names_.size()); 2410 ASSERT_EQ(6u, collected_events_names_.size());
2438 VerifyCollectedEvent(0, TRACE_EVENT_PHASE_BEGIN, "callback", "duration1"); 2411 VerifyCollectedEvent(0, TRACE_EVENT_PHASE_BEGIN, "callback", "duration1");
2439 VerifyCollectedEvent(1, TRACE_EVENT_PHASE_BEGIN, "callback", "duration2"); 2412 VerifyCollectedEvent(1, TRACE_EVENT_PHASE_BEGIN, "callback", "duration2");
2440 VerifyCollectedEvent(2, TRACE_EVENT_PHASE_BEGIN, "callback", "duration3"); 2413 VerifyCollectedEvent(2, TRACE_EVENT_PHASE_BEGIN, "callback", "duration3");
2441 VerifyCollectedEvent(3, TRACE_EVENT_PHASE_END, "callback", "duration3"); 2414 VerifyCollectedEvent(3, TRACE_EVENT_PHASE_END, "callback", "duration3");
2442 VerifyCollectedEvent(4, TRACE_EVENT_PHASE_END, "callback", "duration2"); 2415 VerifyCollectedEvent(4, TRACE_EVENT_PHASE_END, "callback", "duration2");
2443 VerifyCollectedEvent(5, TRACE_EVENT_PHASE_END, "callback", "duration1"); 2416 VerifyCollectedEvent(5, TRACE_EVENT_PHASE_END, "callback", "duration1");
2444 } 2417 }
2445 2418
2446 TEST_F(TraceEventTestFixture, TraceBufferVectorReportFull) { 2419 TEST_F(TraceEventTestFixture, TraceBufferVectorReportFull) {
2447 TraceLog* trace_log = TraceLog::GetInstance(); 2420 TraceLog* trace_log = TraceLog::GetInstance();
2448 trace_log->SetEnabled(CategoryFilter("*"), 2421 trace_log->SetEnabled(
2449 TraceLog::RECORDING_MODE, 2422 TraceConfig(kRecordAllCategoryFilter, ""), TraceLog::RECORDING_MODE);
2450 TraceOptions());
2451 trace_log->logged_events_.reset( 2423 trace_log->logged_events_.reset(
2452 trace_log->CreateTraceBufferVectorOfSize(100)); 2424 trace_log->CreateTraceBufferVectorOfSize(100));
2453 do { 2425 do {
2454 TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0( 2426 TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0(
2455 "all", "with_timestamp", 0, 0, 2427 "all", "with_timestamp", 0, 0, TraceTicks::Now().ToInternalValue());
2456 TimeTicks::NowFromSystemTraceTime().ToInternalValue());
2457 TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0( 2428 TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0(
2458 "all", "with_timestamp", 0, 0, 2429 "all", "with_timestamp", 0, 0, TraceTicks::Now().ToInternalValue());
2459 TimeTicks::NowFromSystemTraceTime().ToInternalValue());
2460 } while (!trace_log->BufferIsFull()); 2430 } while (!trace_log->BufferIsFull());
2461 2431
2462 EndTraceAndFlush(); 2432 EndTraceAndFlush();
2463 2433
2464 const DictionaryValue* trace_full_metadata = NULL; 2434 const DictionaryValue* trace_full_metadata = NULL;
2465 2435
2466 trace_full_metadata = FindTraceEntry(trace_parsed_, 2436 trace_full_metadata = FindTraceEntry(trace_parsed_,
2467 "overflowed_at_ts"); 2437 "overflowed_at_ts");
2468 std::string phase; 2438 std::string phase;
2469 double buffer_limit_reached_timestamp = 0; 2439 double buffer_limit_reached_timestamp = 0;
(...skipping 15 matching lines...) Expand all
2485 double last_trace_event_timestamp = 0; 2455 double last_trace_event_timestamp = 0;
2486 EXPECT_TRUE(trace_parsed_.GetDictionary(trace_parsed_.GetSize() - 1, 2456 EXPECT_TRUE(trace_parsed_.GetDictionary(trace_parsed_.GetSize() - 1,
2487 &last_trace_event)); 2457 &last_trace_event));
2488 EXPECT_TRUE(last_trace_event->GetDouble("ts", &last_trace_event_timestamp)); 2458 EXPECT_TRUE(last_trace_event->GetDouble("ts", &last_trace_event_timestamp));
2489 EXPECT_LE(last_trace_event_timestamp, buffer_limit_reached_timestamp); 2459 EXPECT_LE(last_trace_event_timestamp, buffer_limit_reached_timestamp);
2490 EXPECT_LE(buffer_limit_reached_timestamp, 2460 EXPECT_LE(buffer_limit_reached_timestamp,
2491 trace_log->OffsetNow().ToInternalValue()); 2461 trace_log->OffsetNow().ToInternalValue());
2492 } 2462 }
2493 2463
2494 TEST_F(TraceEventTestFixture, TraceBufferRingBufferGetReturnChunk) { 2464 TEST_F(TraceEventTestFixture, TraceBufferRingBufferGetReturnChunk) {
2495 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), 2465 TraceLog::GetInstance()->SetEnabled(
2496 TraceLog::RECORDING_MODE, 2466 TraceConfig(kRecordAllCategoryFilter, RECORD_CONTINUOUSLY),
2497 TraceOptions(RECORD_CONTINUOUSLY)); 2467 TraceLog::RECORDING_MODE);
2498 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer(); 2468 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer();
2499 size_t capacity = buffer->Capacity(); 2469 size_t capacity = buffer->Capacity();
2500 size_t num_chunks = capacity / TraceBufferChunk::kTraceBufferChunkSize; 2470 size_t num_chunks = capacity / TraceBufferChunk::kTraceBufferChunkSize;
2501 uint32 last_seq = 0; 2471 uint32 last_seq = 0;
2502 size_t chunk_index; 2472 size_t chunk_index;
2503 EXPECT_EQ(0u, buffer->Size()); 2473 EXPECT_EQ(0u, buffer->Size());
2504 2474
2505 scoped_ptr<TraceBufferChunk*[]> chunks(new TraceBufferChunk*[num_chunks]); 2475 scoped_ptr<TraceBufferChunk*[]> chunks(new TraceBufferChunk*[num_chunks]);
2506 for (size_t i = 0; i < num_chunks; ++i) { 2476 for (size_t i = 0; i < num_chunks; ++i) {
2507 chunks[i] = buffer->GetChunk(&chunk_index).release(); 2477 chunks[i] = buffer->GetChunk(&chunk_index).release();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2545 last_seq = chunks[i]->seq(); 2515 last_seq = chunks[i]->seq();
2546 } 2516 }
2547 2517
2548 for (size_t i = 0; i < num_chunks; ++i) 2518 for (size_t i = 0; i < num_chunks; ++i)
2549 buffer->ReturnChunk(i, scoped_ptr<TraceBufferChunk>(chunks[i])); 2519 buffer->ReturnChunk(i, scoped_ptr<TraceBufferChunk>(chunks[i]));
2550 2520
2551 TraceLog::GetInstance()->SetDisabled(); 2521 TraceLog::GetInstance()->SetDisabled();
2552 } 2522 }
2553 2523
2554 TEST_F(TraceEventTestFixture, TraceBufferRingBufferHalfIteration) { 2524 TEST_F(TraceEventTestFixture, TraceBufferRingBufferHalfIteration) {
2555 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), 2525 TraceLog::GetInstance()->SetEnabled(
2556 TraceLog::RECORDING_MODE, 2526 TraceConfig(kRecordAllCategoryFilter, RECORD_CONTINUOUSLY),
2557 TraceOptions(RECORD_CONTINUOUSLY)); 2527 TraceLog::RECORDING_MODE);
2558 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer(); 2528 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer();
2559 size_t capacity = buffer->Capacity(); 2529 size_t capacity = buffer->Capacity();
2560 size_t num_chunks = capacity / TraceBufferChunk::kTraceBufferChunkSize; 2530 size_t num_chunks = capacity / TraceBufferChunk::kTraceBufferChunkSize;
2561 size_t chunk_index; 2531 size_t chunk_index;
2562 EXPECT_EQ(0u, buffer->Size()); 2532 EXPECT_EQ(0u, buffer->Size());
2563 EXPECT_FALSE(buffer->NextChunk()); 2533 EXPECT_FALSE(buffer->NextChunk());
2564 2534
2565 size_t half_chunks = num_chunks / 2; 2535 size_t half_chunks = num_chunks / 2;
2566 scoped_ptr<TraceBufferChunk*[]> chunks(new TraceBufferChunk*[half_chunks]); 2536 scoped_ptr<TraceBufferChunk*[]> chunks(new TraceBufferChunk*[half_chunks]);
2567 2537
2568 for (size_t i = 0; i < half_chunks; ++i) { 2538 for (size_t i = 0; i < half_chunks; ++i) {
2569 chunks[i] = buffer->GetChunk(&chunk_index).release(); 2539 chunks[i] = buffer->GetChunk(&chunk_index).release();
2570 EXPECT_TRUE(chunks[i]); 2540 EXPECT_TRUE(chunks[i]);
2571 EXPECT_EQ(i, chunk_index); 2541 EXPECT_EQ(i, chunk_index);
2572 } 2542 }
2573 for (size_t i = 0; i < half_chunks; ++i) 2543 for (size_t i = 0; i < half_chunks; ++i)
2574 buffer->ReturnChunk(i, scoped_ptr<TraceBufferChunk>(chunks[i])); 2544 buffer->ReturnChunk(i, scoped_ptr<TraceBufferChunk>(chunks[i]));
2575 2545
2576 for (size_t i = 0; i < half_chunks; ++i) 2546 for (size_t i = 0; i < half_chunks; ++i)
2577 EXPECT_EQ(chunks[i], buffer->NextChunk()); 2547 EXPECT_EQ(chunks[i], buffer->NextChunk());
2578 EXPECT_FALSE(buffer->NextChunk()); 2548 EXPECT_FALSE(buffer->NextChunk());
2579 TraceLog::GetInstance()->SetDisabled(); 2549 TraceLog::GetInstance()->SetDisabled();
2580 } 2550 }
2581 2551
2582 TEST_F(TraceEventTestFixture, TraceBufferRingBufferFullIteration) { 2552 TEST_F(TraceEventTestFixture, TraceBufferRingBufferFullIteration) {
2583 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), 2553 TraceLog::GetInstance()->SetEnabled(
2584 TraceLog::RECORDING_MODE, 2554 TraceConfig(kRecordAllCategoryFilter, RECORD_CONTINUOUSLY),
2585 TraceOptions(RECORD_CONTINUOUSLY)); 2555 TraceLog::RECORDING_MODE);
2586 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer(); 2556 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer();
2587 size_t capacity = buffer->Capacity(); 2557 size_t capacity = buffer->Capacity();
2588 size_t num_chunks = capacity / TraceBufferChunk::kTraceBufferChunkSize; 2558 size_t num_chunks = capacity / TraceBufferChunk::kTraceBufferChunkSize;
2589 size_t chunk_index; 2559 size_t chunk_index;
2590 EXPECT_EQ(0u, buffer->Size()); 2560 EXPECT_EQ(0u, buffer->Size());
2591 EXPECT_FALSE(buffer->NextChunk()); 2561 EXPECT_FALSE(buffer->NextChunk());
2592 2562
2593 scoped_ptr<TraceBufferChunk*[]> chunks(new TraceBufferChunk*[num_chunks]); 2563 scoped_ptr<TraceBufferChunk*[]> chunks(new TraceBufferChunk*[num_chunks]);
2594 2564
2595 for (size_t i = 0; i < num_chunks; ++i) { 2565 for (size_t i = 0; i < num_chunks; ++i) {
2596 chunks[i] = buffer->GetChunk(&chunk_index).release(); 2566 chunks[i] = buffer->GetChunk(&chunk_index).release();
2597 EXPECT_TRUE(chunks[i]); 2567 EXPECT_TRUE(chunks[i]);
2598 EXPECT_EQ(i, chunk_index); 2568 EXPECT_EQ(i, chunk_index);
2599 } 2569 }
2600 for (size_t i = 0; i < num_chunks; ++i) 2570 for (size_t i = 0; i < num_chunks; ++i)
2601 buffer->ReturnChunk(i, scoped_ptr<TraceBufferChunk>(chunks[i])); 2571 buffer->ReturnChunk(i, scoped_ptr<TraceBufferChunk>(chunks[i]));
2602 2572
2603 for (size_t i = 0; i < num_chunks; ++i) 2573 for (size_t i = 0; i < num_chunks; ++i)
2604 EXPECT_TRUE(chunks[i] == buffer->NextChunk()); 2574 EXPECT_TRUE(chunks[i] == buffer->NextChunk());
2605 EXPECT_FALSE(buffer->NextChunk()); 2575 EXPECT_FALSE(buffer->NextChunk());
2606 TraceLog::GetInstance()->SetDisabled(); 2576 TraceLog::GetInstance()->SetDisabled();
2607 } 2577 }
2608 2578
2609 TEST_F(TraceEventTestFixture, TraceRecordAsMuchAsPossibleMode) { 2579 TEST_F(TraceEventTestFixture, TraceRecordAsMuchAsPossibleMode) {
2610 TraceLog::GetInstance()->SetEnabled(CategoryFilter("*"), 2580 TraceLog::GetInstance()->SetEnabled(
2611 TraceLog::RECORDING_MODE, 2581 TraceConfig(kRecordAllCategoryFilter, RECORD_AS_MUCH_AS_POSSIBLE),
2612 TraceOptions(RECORD_AS_MUCH_AS_POSSIBLE)); 2582 TraceLog::RECORDING_MODE);
2613 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer(); 2583 TraceBuffer* buffer = TraceLog::GetInstance()->trace_buffer();
2614 EXPECT_EQ(512000000UL, buffer->Capacity()); 2584 EXPECT_EQ(512000000UL, buffer->Capacity());
2615 TraceLog::GetInstance()->SetDisabled(); 2585 TraceLog::GetInstance()->SetDisabled();
2616 } 2586 }
2617 2587
2618 // Test the category filter.
2619 TEST_F(TraceEventTestFixture, CategoryFilter) {
2620 // Using the default filter.
2621 CategoryFilter default_cf = CategoryFilter(
2622 CategoryFilter::kDefaultCategoryFilterString);
2623 std::string category_filter_str = default_cf.ToString();
2624 EXPECT_STREQ("-*Debug,-*Test", category_filter_str.c_str());
2625 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("not-excluded-category"));
2626 EXPECT_FALSE(
2627 default_cf.IsCategoryGroupEnabled("disabled-by-default-category"));
2628 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("Category1,CategoryDebug"));
2629 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryDebug,Category1"));
2630 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryTest,Category2"));
2631
2632 // Make sure that upon an empty string, we fall back to the default filter.
2633 default_cf = CategoryFilter();
2634 category_filter_str = default_cf.ToString();
2635 EXPECT_STREQ("-*Debug,-*Test", category_filter_str.c_str());
2636 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("not-excluded-category"));
2637 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("Category1,CategoryDebug"));
2638 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryDebug,Category1"));
2639 EXPECT_TRUE(default_cf.IsCategoryGroupEnabled("CategoryTest,Category2"));
2640
2641 // Using an arbitrary non-empty filter.
2642 CategoryFilter cf("included,-excluded,inc_pattern*,-exc_pattern*");
2643 category_filter_str = cf.ToString();
2644 EXPECT_STREQ("included,inc_pattern*,-excluded,-exc_pattern*",
2645 category_filter_str.c_str());
2646 EXPECT_TRUE(cf.IsCategoryGroupEnabled("included"));
2647 EXPECT_TRUE(cf.IsCategoryGroupEnabled("inc_pattern_category"));
2648 EXPECT_FALSE(cf.IsCategoryGroupEnabled("exc_pattern_category"));
2649 EXPECT_FALSE(cf.IsCategoryGroupEnabled("excluded"));
2650 EXPECT_FALSE(cf.IsCategoryGroupEnabled("not-excluded-nor-included"));
2651 EXPECT_FALSE(cf.IsCategoryGroupEnabled("Category1,CategoryDebug"));
2652 EXPECT_FALSE(cf.IsCategoryGroupEnabled("CategoryDebug,Category1"));
2653 EXPECT_FALSE(cf.IsCategoryGroupEnabled("CategoryTest,Category2"));
2654
2655 cf.Merge(default_cf);
2656 category_filter_str = cf.ToString();
2657 EXPECT_STREQ("-excluded,-exc_pattern*,-*Debug,-*Test",
2658 category_filter_str.c_str());
2659 cf.Clear();
2660
2661 CategoryFilter reconstructed_cf(category_filter_str);
2662 category_filter_str = reconstructed_cf.ToString();
2663 EXPECT_STREQ("-excluded,-exc_pattern*,-*Debug,-*Test",
2664 category_filter_str.c_str());
2665
2666 // One included category.
2667 CategoryFilter one_inc_cf("only_inc_cat");
2668 category_filter_str = one_inc_cf.ToString();
2669 EXPECT_STREQ("only_inc_cat", category_filter_str.c_str());
2670
2671 // One excluded category.
2672 CategoryFilter one_exc_cf("-only_exc_cat");
2673 category_filter_str = one_exc_cf.ToString();
2674 EXPECT_STREQ("-only_exc_cat", category_filter_str.c_str());
2675
2676 // Enabling a disabled- category does not require all categories to be traced
2677 // to be included.
2678 CategoryFilter disabled_cat("disabled-by-default-cc,-excluded");
2679 EXPECT_STREQ("disabled-by-default-cc,-excluded",
2680 disabled_cat.ToString().c_str());
2681 EXPECT_TRUE(disabled_cat.IsCategoryGroupEnabled("disabled-by-default-cc"));
2682 EXPECT_TRUE(disabled_cat.IsCategoryGroupEnabled("some_other_group"));
2683 EXPECT_FALSE(disabled_cat.IsCategoryGroupEnabled("excluded"));
2684
2685 // Enabled a disabled- category and also including makes all categories to
2686 // be traced require including.
2687 CategoryFilter disabled_inc_cat("disabled-by-default-cc,included");
2688 EXPECT_STREQ("included,disabled-by-default-cc",
2689 disabled_inc_cat.ToString().c_str());
2690 EXPECT_TRUE(
2691 disabled_inc_cat.IsCategoryGroupEnabled("disabled-by-default-cc"));
2692 EXPECT_TRUE(disabled_inc_cat.IsCategoryGroupEnabled("included"));
2693 EXPECT_FALSE(disabled_inc_cat.IsCategoryGroupEnabled("other_included"));
2694
2695 // Test that IsEmptyOrContainsLeadingOrTrailingWhitespace actually catches
2696 // categories that are explicitly forbiden.
2697 // This method is called in a DCHECK to assert that we don't have these types
2698 // of strings as categories.
2699 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
2700 " bad_category "));
2701 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
2702 " bad_category"));
2703 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
2704 "bad_category "));
2705 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
2706 " bad_category"));
2707 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
2708 "bad_category "));
2709 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
2710 " bad_category "));
2711 EXPECT_TRUE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
2712 ""));
2713 EXPECT_FALSE(CategoryFilter::IsEmptyOrContainsLeadingOrTrailingWhitespace(
2714 "good_category"));
2715 }
2716
2717 void BlockUntilStopped(WaitableEvent* task_start_event, 2588 void BlockUntilStopped(WaitableEvent* task_start_event,
2718 WaitableEvent* task_stop_event) { 2589 WaitableEvent* task_stop_event) {
2719 task_start_event->Signal(); 2590 task_start_event->Signal();
2720 task_stop_event->Wait(); 2591 task_stop_event->Wait();
2721 } 2592 }
2722 2593
2723 TEST_F(TraceEventTestFixture, SetCurrentThreadBlocksMessageLoopBeforeTracing) { 2594 TEST_F(TraceEventTestFixture, SetCurrentThreadBlocksMessageLoopBeforeTracing) {
2724 BeginTrace(); 2595 BeginTrace();
2725 2596
2726 Thread thread("1"); 2597 Thread thread("1");
(...skipping 13 matching lines...) Expand all
2740 FROM_HERE, Bind(&BlockUntilStopped, &task_start_event, &task_stop_event)); 2611 FROM_HERE, Bind(&BlockUntilStopped, &task_start_event, &task_stop_event));
2741 task_start_event.Wait(); 2612 task_start_event.Wait();
2742 2613
2743 EndTraceAndFlush(); 2614 EndTraceAndFlush();
2744 ValidateAllTraceMacrosCreatedData(trace_parsed_); 2615 ValidateAllTraceMacrosCreatedData(trace_parsed_);
2745 2616
2746 task_stop_event.Signal(); 2617 task_stop_event.Signal();
2747 thread.Stop(); 2618 thread.Stop();
2748 } 2619 }
2749 2620
2750 TEST_F(TraceEventTestFixture, ConvertTraceOptionsToInternalOptions) { 2621 TEST_F(TraceEventTestFixture, ConvertTraceConfigToInternalOptions) {
2751 TraceLog* trace_log = TraceLog::GetInstance(); 2622 TraceLog* trace_log = TraceLog::GetInstance();
2752 TraceOptions options(RECORD_UNTIL_FULL);
2753 EXPECT_EQ(TraceLog::kInternalRecordUntilFull, 2623 EXPECT_EQ(TraceLog::kInternalRecordUntilFull,
2754 trace_log->GetInternalOptionsFromTraceOptions(options)); 2624 trace_log->GetInternalOptionsFromTraceConfig(
2625 TraceConfig(kRecordAllCategoryFilter, RECORD_UNTIL_FULL)));
2755 2626
2756 options.record_mode = RECORD_CONTINUOUSLY;
2757 EXPECT_EQ(TraceLog::kInternalRecordContinuously, 2627 EXPECT_EQ(TraceLog::kInternalRecordContinuously,
2758 trace_log->GetInternalOptionsFromTraceOptions(options)); 2628 trace_log->GetInternalOptionsFromTraceConfig(
2629 TraceConfig(kRecordAllCategoryFilter, RECORD_CONTINUOUSLY)));
2759 2630
2760 options.record_mode = ECHO_TO_CONSOLE;
2761 EXPECT_EQ(TraceLog::kInternalEchoToConsole, 2631 EXPECT_EQ(TraceLog::kInternalEchoToConsole,
2762 trace_log->GetInternalOptionsFromTraceOptions(options)); 2632 trace_log->GetInternalOptionsFromTraceConfig(
2633 TraceConfig(kRecordAllCategoryFilter, ECHO_TO_CONSOLE)));
2763 2634
2764 options.enable_sampling = true;
2765
2766 options.record_mode = RECORD_UNTIL_FULL;
2767 EXPECT_EQ( 2635 EXPECT_EQ(
2768 TraceLog::kInternalRecordUntilFull | TraceLog::kInternalEnableSampling, 2636 TraceLog::kInternalRecordUntilFull | TraceLog::kInternalEnableSampling,
2769 trace_log->GetInternalOptionsFromTraceOptions(options)); 2637 trace_log->GetInternalOptionsFromTraceConfig(
2638 TraceConfig(kRecordAllCategoryFilter,
2639 "record-until-full,enable-sampling")));
2770 2640
2771 options.record_mode = RECORD_CONTINUOUSLY;
2772 EXPECT_EQ( 2641 EXPECT_EQ(
2773 TraceLog::kInternalRecordContinuously | TraceLog::kInternalEnableSampling, 2642 TraceLog::kInternalRecordContinuously | TraceLog::kInternalEnableSampling,
2774 trace_log->GetInternalOptionsFromTraceOptions(options)); 2643 trace_log->GetInternalOptionsFromTraceConfig(
2644 TraceConfig(kRecordAllCategoryFilter,
2645 "record-continuously,enable-sampling")));
2775 2646
2776 options.record_mode = ECHO_TO_CONSOLE;
2777 EXPECT_EQ( 2647 EXPECT_EQ(
2778 TraceLog::kInternalEchoToConsole | TraceLog::kInternalEnableSampling, 2648 TraceLog::kInternalEchoToConsole | TraceLog::kInternalEnableSampling,
2779 trace_log->GetInternalOptionsFromTraceOptions(options)); 2649 trace_log->GetInternalOptionsFromTraceConfig(
2650 TraceConfig(kRecordAllCategoryFilter,
2651 "trace-to-console,enable-sampling")));
2780 2652
2781 options.enable_systrace = true;
2782 EXPECT_EQ( 2653 EXPECT_EQ(
2783 TraceLog::kInternalEchoToConsole | TraceLog::kInternalEnableSampling, 2654 TraceLog::kInternalEchoToConsole | TraceLog::kInternalEnableSampling,
2784 trace_log->GetInternalOptionsFromTraceOptions(options)); 2655 trace_log->GetInternalOptionsFromTraceConfig(
2656 TraceConfig("*",
2657 "trace-to-console,enable-sampling,enable-systrace")));
2785 } 2658 }
2786 2659
2787 void SetBlockingFlagAndBlockUntilStopped(WaitableEvent* task_start_event, 2660 void SetBlockingFlagAndBlockUntilStopped(WaitableEvent* task_start_event,
2788 WaitableEvent* task_stop_event) { 2661 WaitableEvent* task_stop_event) {
2789 TraceLog::GetInstance()->SetCurrentThreadBlocksMessageLoop(); 2662 TraceLog::GetInstance()->SetCurrentThreadBlocksMessageLoop();
2790 BlockUntilStopped(task_start_event, task_stop_event); 2663 BlockUntilStopped(task_start_event, task_stop_event);
2791 } 2664 }
2792 2665
2793 TEST_F(TraceEventTestFixture, SetCurrentThreadBlocksMessageLoopAfterTracing) { 2666 TEST_F(TraceEventTestFixture, SetCurrentThreadBlocksMessageLoopAfterTracing) {
2794 BeginTrace(); 2667 BeginTrace();
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
2869 g_log_buffer->append(str); 2742 g_log_buffer->append(str);
2870 return false; 2743 return false;
2871 } 2744 }
2872 2745
2873 TEST_F(TraceEventTestFixture, EchoToConsole) { 2746 TEST_F(TraceEventTestFixture, EchoToConsole) {
2874 logging::LogMessageHandlerFunction old_log_message_handler = 2747 logging::LogMessageHandlerFunction old_log_message_handler =
2875 logging::GetLogMessageHandler(); 2748 logging::GetLogMessageHandler();
2876 logging::SetLogMessageHandler(MockLogMessageHandler); 2749 logging::SetLogMessageHandler(MockLogMessageHandler);
2877 2750
2878 TraceLog::GetInstance()->SetEnabled( 2751 TraceLog::GetInstance()->SetEnabled(
2879 CategoryFilter("*"), 2752 TraceConfig(kRecordAllCategoryFilter, ECHO_TO_CONSOLE),
2880 TraceLog::RECORDING_MODE, 2753 TraceLog::RECORDING_MODE);
2881 TraceOptions(ECHO_TO_CONSOLE));
2882 TRACE_EVENT_BEGIN0("a", "begin_end"); 2754 TRACE_EVENT_BEGIN0("a", "begin_end");
2883 { 2755 {
2884 TRACE_EVENT0("b", "duration"); 2756 TRACE_EVENT0("b", "duration");
2885 TRACE_EVENT0("b1", "duration1"); 2757 TRACE_EVENT0("b1", "duration1");
2886 } 2758 }
2887 TRACE_EVENT_INSTANT0("c", "instant", TRACE_EVENT_SCOPE_GLOBAL); 2759 TRACE_EVENT_INSTANT0("c", "instant", TRACE_EVENT_SCOPE_GLOBAL);
2888 TRACE_EVENT_END0("a", "begin_end"); 2760 TRACE_EVENT_END0("a", "begin_end");
2889 2761
2890 EXPECT_NE(std::string::npos, g_log_buffer->find("begin_end[a]\x1b")); 2762 EXPECT_NE(std::string::npos, g_log_buffer->find("begin_end[a]\x1b"));
2891 EXPECT_NE(std::string::npos, g_log_buffer->find("| duration[b]\x1b")); 2763 EXPECT_NE(std::string::npos, g_log_buffer->find("| duration[b]\x1b"));
(...skipping 14 matching lines...) Expand all
2906 TRACE_EVENT0("log", "trace_event"); 2778 TRACE_EVENT0("log", "trace_event");
2907 return false; 2779 return false;
2908 } 2780 }
2909 2781
2910 TEST_F(TraceEventTestFixture, EchoToConsoleTraceEventRecursion) { 2782 TEST_F(TraceEventTestFixture, EchoToConsoleTraceEventRecursion) {
2911 logging::LogMessageHandlerFunction old_log_message_handler = 2783 logging::LogMessageHandlerFunction old_log_message_handler =
2912 logging::GetLogMessageHandler(); 2784 logging::GetLogMessageHandler();
2913 logging::SetLogMessageHandler(LogMessageHandlerWithTraceEvent); 2785 logging::SetLogMessageHandler(LogMessageHandlerWithTraceEvent);
2914 2786
2915 TraceLog::GetInstance()->SetEnabled( 2787 TraceLog::GetInstance()->SetEnabled(
2916 CategoryFilter("*"), 2788 TraceConfig(kRecordAllCategoryFilter, ECHO_TO_CONSOLE),
2917 TraceLog::RECORDING_MODE, 2789 TraceLog::RECORDING_MODE);
2918 TraceOptions(ECHO_TO_CONSOLE));
2919 { 2790 {
2920 // This should not cause deadlock or infinite recursion. 2791 // This should not cause deadlock or infinite recursion.
2921 TRACE_EVENT0("b", "duration"); 2792 TRACE_EVENT0("b", "duration");
2922 } 2793 }
2923 2794
2924 EndTraceAndFlush(); 2795 EndTraceAndFlush();
2925 logging::SetLogMessageHandler(old_log_message_handler); 2796 logging::SetLogMessageHandler(old_log_message_handler);
2926 } 2797 }
2927 2798
2928 TEST_F(TraceEventTestFixture, TimeOffset) { 2799 TEST_F(TraceEventTestFixture, TimeOffset) {
2929 BeginTrace(); 2800 BeginTrace();
2930 // Let TraceLog timer start from 0. 2801 // Let TraceLog timer start from 0.
2931 TimeDelta time_offset = TimeTicks::NowFromSystemTraceTime() - TimeTicks(); 2802 TimeDelta time_offset = TraceTicks::Now() - TraceTicks();
2932 TraceLog::GetInstance()->SetTimeOffset(time_offset); 2803 TraceLog::GetInstance()->SetTimeOffset(time_offset);
2933 2804
2934 { 2805 {
2935 TRACE_EVENT0("all", "duration1"); 2806 TRACE_EVENT0("all", "duration1");
2936 TRACE_EVENT0("all", "duration2"); 2807 TRACE_EVENT0("all", "duration2");
2937 } 2808 }
2938 TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0( 2809 TRACE_EVENT_BEGIN_WITH_ID_TID_AND_TIMESTAMP0(
2939 "all", "with_timestamp", 0, 0, 2810 "all", "with_timestamp", 0, 0, TraceTicks::Now().ToInternalValue());
2940 TimeTicks::NowFromSystemTraceTime().ToInternalValue());
2941 TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0( 2811 TRACE_EVENT_END_WITH_ID_TID_AND_TIMESTAMP0(
2942 "all", "with_timestamp", 0, 0, 2812 "all", "with_timestamp", 0, 0, TraceTicks::Now().ToInternalValue());
2943 TimeTicks::NowFromSystemTraceTime().ToInternalValue());
2944 2813
2945 EndTraceAndFlush(); 2814 EndTraceAndFlush();
2946 DropTracedMetadataRecords(); 2815 DropTracedMetadataRecords();
2947 2816
2948 double end_time = static_cast<double>( 2817 double end_time = static_cast<double>(
2949 (TimeTicks::NowFromSystemTraceTime() - time_offset).ToInternalValue()); 2818 (TraceTicks::Now() - time_offset).ToInternalValue());
2950 double last_timestamp = 0; 2819 double last_timestamp = 0;
2951 for (size_t i = 0; i < trace_parsed_.GetSize(); ++i) { 2820 for (size_t i = 0; i < trace_parsed_.GetSize(); ++i) {
2952 const DictionaryValue* item; 2821 const DictionaryValue* item;
2953 EXPECT_TRUE(trace_parsed_.GetDictionary(i, &item)); 2822 EXPECT_TRUE(trace_parsed_.GetDictionary(i, &item));
2954 double timestamp; 2823 double timestamp;
2955 EXPECT_TRUE(item->GetDouble("ts", &timestamp)); 2824 EXPECT_TRUE(item->GetDouble("ts", &timestamp));
2956 EXPECT_GE(timestamp, last_timestamp); 2825 EXPECT_GE(timestamp, last_timestamp);
2957 EXPECT_LE(timestamp, end_time); 2826 EXPECT_LE(timestamp, end_time);
2958 last_timestamp = timestamp; 2827 last_timestamp = timestamp;
2959 } 2828 }
2960 } 2829 }
2961 2830
2962 TEST_F(TraceEventTestFixture, ConfigureSyntheticDelays) { 2831 TEST_F(TraceEventTestFixture, ConfigureSyntheticDelays) {
2963 BeginSpecificTrace("DELAY(test.Delay;0.05)"); 2832 BeginSpecificTrace("DELAY(test.Delay;0.05)");
2964 2833
2965 base::TimeTicks start = base::TimeTicks::Now(); 2834 base::TimeTicks start = base::TimeTicks::Now();
2966 { 2835 {
2967 TRACE_EVENT_SYNTHETIC_DELAY("test.Delay"); 2836 TRACE_EVENT_SYNTHETIC_DELAY("test.Delay");
2968 } 2837 }
2969 base::TimeDelta duration = base::TimeTicks::Now() - start; 2838 base::TimeDelta duration = base::TimeTicks::Now() - start;
2970 EXPECT_GE(duration.InMilliseconds(), 50); 2839 EXPECT_GE(duration.InMilliseconds(), 50);
2971 2840
2972 EndTraceAndFlush(); 2841 EndTraceAndFlush();
2973 } 2842 }
2974 2843
2975 TEST_F(TraceEventTestFixture, BadSyntheticDelayConfigurations) { 2844 TEST_F(TraceEventTestFixture, BadSyntheticDelayConfigurations) {
2976 const char* const configs[] = { 2845 const char* const filters[] = {
2977 "", 2846 "",
2978 "DELAY(", 2847 "DELAY(",
2979 "DELAY(;", 2848 "DELAY(;",
2980 "DELAY(;)", 2849 "DELAY(;)",
2981 "DELAY(test.Delay)", 2850 "DELAY(test.Delay)",
2982 "DELAY(test.Delay;)" 2851 "DELAY(test.Delay;)"
2983 }; 2852 };
2984 for (size_t i = 0; i < arraysize(configs); i++) { 2853 for (size_t i = 0; i < arraysize(filters); i++) {
2985 BeginSpecificTrace(configs[i]); 2854 BeginSpecificTrace(filters[i]);
2986 EndTraceAndFlush(); 2855 EndTraceAndFlush();
2987 CategoryFilter filter = TraceLog::GetInstance()->GetCurrentCategoryFilter(); 2856 TraceConfig trace_config = TraceLog::GetInstance()->GetCurrentTraceConfig();
2988 EXPECT_EQ(0u, filter.GetSyntheticDelayValues().size()); 2857 EXPECT_EQ(0u, trace_config.GetSyntheticDelayValues().size());
2989 } 2858 }
2990 } 2859 }
2991 2860
2992 TEST_F(TraceEventTestFixture, SyntheticDelayConfigurationMerging) { 2861 TEST_F(TraceEventTestFixture, SyntheticDelayConfigurationMerging) {
2993 CategoryFilter filter1("DELAY(test.Delay1;16)"); 2862 TraceConfig config1("DELAY(test.Delay1;16)", "");
2994 CategoryFilter filter2("DELAY(test.Delay2;32)"); 2863 TraceConfig config2("DELAY(test.Delay2;32)", "");
2995 filter1.Merge(filter2); 2864 config1.Merge(config2);
2996 EXPECT_EQ(2u, filter1.GetSyntheticDelayValues().size()); 2865 EXPECT_EQ(2u, config1.GetSyntheticDelayValues().size());
2997 } 2866 }
2998 2867
2999 TEST_F(TraceEventTestFixture, SyntheticDelayConfigurationToString) { 2868 TEST_F(TraceEventTestFixture, SyntheticDelayConfigurationToString) {
3000 const char config[] = "DELAY(test.Delay;16;oneshot)"; 2869 const char filter[] = "DELAY(test.Delay;16;oneshot)";
3001 CategoryFilter filter(config); 2870 TraceConfig config(filter, "");
3002 EXPECT_EQ(config, filter.ToString()); 2871 EXPECT_EQ(filter, config.ToCategoryFilterString());
3003 }
3004
3005 TEST(TraceOptionsTest, TraceOptionsFromString) {
3006 TraceOptions options;
3007 EXPECT_TRUE(options.SetFromString("record-until-full"));
3008 EXPECT_EQ(RECORD_UNTIL_FULL, options.record_mode);
3009 EXPECT_FALSE(options.enable_sampling);
3010 EXPECT_FALSE(options.enable_systrace);
3011
3012 EXPECT_TRUE(options.SetFromString("record-continuously"));
3013 EXPECT_EQ(RECORD_CONTINUOUSLY, options.record_mode);
3014 EXPECT_FALSE(options.enable_sampling);
3015 EXPECT_FALSE(options.enable_systrace);
3016
3017 EXPECT_TRUE(options.SetFromString("trace-to-console"));
3018 EXPECT_EQ(ECHO_TO_CONSOLE, options.record_mode);
3019 EXPECT_FALSE(options.enable_sampling);
3020 EXPECT_FALSE(options.enable_systrace);
3021
3022 EXPECT_TRUE(options.SetFromString("record-as-much-as-possible"));
3023 EXPECT_EQ(RECORD_AS_MUCH_AS_POSSIBLE, options.record_mode);
3024 EXPECT_FALSE(options.enable_sampling);
3025 EXPECT_FALSE(options.enable_systrace);
3026
3027 EXPECT_TRUE(options.SetFromString("record-until-full, enable-sampling"));
3028 EXPECT_EQ(RECORD_UNTIL_FULL, options.record_mode);
3029 EXPECT_TRUE(options.enable_sampling);
3030 EXPECT_FALSE(options.enable_systrace);
3031
3032 EXPECT_TRUE(options.SetFromString("enable-systrace,record-continuously"));
3033 EXPECT_EQ(RECORD_CONTINUOUSLY, options.record_mode);
3034 EXPECT_FALSE(options.enable_sampling);
3035 EXPECT_TRUE(options.enable_systrace);
3036
3037 EXPECT_TRUE(options.SetFromString(
3038 "enable-systrace, trace-to-console,enable-sampling"));
3039 EXPECT_EQ(ECHO_TO_CONSOLE, options.record_mode);
3040 EXPECT_TRUE(options.enable_sampling);
3041 EXPECT_TRUE(options.enable_systrace);
3042
3043 EXPECT_TRUE(options.SetFromString(
3044 "record-continuously,record-until-full,trace-to-console"));
3045 EXPECT_EQ(ECHO_TO_CONSOLE, options.record_mode);
3046 EXPECT_FALSE(options.enable_systrace);
3047 EXPECT_FALSE(options.enable_sampling);
3048
3049 EXPECT_TRUE(options.SetFromString(""));
3050 EXPECT_EQ(RECORD_UNTIL_FULL, options.record_mode);
3051 EXPECT_FALSE(options.enable_systrace);
3052 EXPECT_FALSE(options.enable_sampling);
3053
3054 EXPECT_FALSE(options.SetFromString("foo-bar-baz"));
3055 }
3056
3057 TEST(TraceOptionsTest, TraceOptionsToString) {
3058 // Test that we can intialize TraceOptions from a string got from
3059 // TraceOptions.ToString() method to get a same TraceOptions.
3060 TraceRecordMode modes[] = {RECORD_UNTIL_FULL,
3061 RECORD_CONTINUOUSLY,
3062 ECHO_TO_CONSOLE,
3063 RECORD_AS_MUCH_AS_POSSIBLE};
3064 bool enable_sampling_options[] = {true, false};
3065 bool enable_systrace_options[] = {true, false};
3066
3067 for (int i = 0; i < 4; ++i) {
3068 for (int j = 0; j < 2; ++j) {
3069 for (int k = 0; k < 2; ++k) {
3070 TraceOptions original_option = TraceOptions(modes[i]);
3071 original_option.enable_sampling = enable_sampling_options[j];
3072 original_option.enable_systrace = enable_systrace_options[k];
3073 TraceOptions new_options;
3074 EXPECT_TRUE(new_options.SetFromString(original_option.ToString()));
3075 EXPECT_EQ(original_option.record_mode, new_options.record_mode);
3076 EXPECT_EQ(original_option.enable_sampling, new_options.enable_sampling);
3077 EXPECT_EQ(original_option.enable_systrace, new_options.enable_systrace);
3078 }
3079 }
3080 }
3081 } 2872 }
3082 2873
3083 } // namespace trace_event 2874 } // namespace trace_event
3084 } // namespace base 2875 } // namespace base
OLDNEW
« no previous file with comments | « base/trace_event/trace_event_system_stats_monitor.cc ('k') | base/trace_event/winheap_dump_provider_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698