OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/trace_event/trace_event.h" | 5 #include "base/trace_event/trace_event.h" |
6 | 6 |
7 #include <math.h> | 7 #include <math.h> |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 | 10 |
(...skipping 1074 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1085 CancelTrace(); | 1085 CancelTrace(); |
1086 | 1086 |
1087 EXPECT_TRUE(trace_parsed_.empty()); | 1087 EXPECT_TRUE(trace_parsed_.empty()); |
1088 } | 1088 } |
1089 | 1089 |
1090 class MockEnabledStateChangedObserver : | 1090 class MockEnabledStateChangedObserver : |
1091 public TraceLog::EnabledStateObserver { | 1091 public TraceLog::EnabledStateObserver { |
1092 public: | 1092 public: |
1093 MOCK_METHOD0(OnTraceLogEnabled, void()); | 1093 MOCK_METHOD0(OnTraceLogEnabled, void()); |
1094 MOCK_METHOD0(OnTraceLogDisabled, void()); | 1094 MOCK_METHOD0(OnTraceLogDisabled, void()); |
| 1095 MOCK_METHOD0(OnBeforeTraceLogDisabled, void()); |
1095 }; | 1096 }; |
1096 | 1097 |
1097 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnEnable) { | 1098 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnEnable) { |
1098 MockEnabledStateChangedObserver observer; | 1099 MockEnabledStateChangedObserver observer; |
1099 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); | 1100 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
1100 | 1101 |
1101 EXPECT_CALL(observer, OnTraceLogEnabled()) | 1102 EXPECT_CALL(observer, OnTraceLogEnabled()) |
1102 .Times(1); | 1103 .Times(1); |
1103 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), | 1104 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
1104 TraceLog::RECORDING_MODE); | 1105 TraceLog::RECORDING_MODE); |
1105 testing::Mock::VerifyAndClear(&observer); | 1106 testing::Mock::VerifyAndClear(&observer); |
1106 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); | 1107 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); |
1107 | 1108 |
1108 // Cleanup. | 1109 // Cleanup. |
1109 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); | 1110 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); |
1110 TraceLog::GetInstance()->SetDisabled(); | 1111 TraceLog::GetInstance()->SetDisabled(); |
1111 } | 1112 } |
1112 | 1113 |
1113 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnSecondEnable) { | 1114 TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnSecondEnable) { |
1114 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), | 1115 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
1115 TraceLog::RECORDING_MODE); | 1116 TraceLog::RECORDING_MODE); |
1116 | 1117 |
1117 testing::StrictMock<MockEnabledStateChangedObserver> observer; | 1118 testing::StrictMock<MockEnabledStateChangedObserver> observer; |
1118 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); | 1119 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
1119 | 1120 |
1120 EXPECT_CALL(observer, OnTraceLogEnabled()) | 1121 EXPECT_CALL(observer, OnTraceLogEnabled()) |
1121 .Times(0); | 1122 .Times(0); |
| 1123 EXPECT_CALL(observer, OnBeforeTraceLogDisabled()).Times(0); |
1122 EXPECT_CALL(observer, OnTraceLogDisabled()) | 1124 EXPECT_CALL(observer, OnTraceLogDisabled()) |
1123 .Times(0); | 1125 .Times(0); |
1124 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), | 1126 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
1125 TraceLog::RECORDING_MODE); | 1127 TraceLog::RECORDING_MODE); |
1126 testing::Mock::VerifyAndClear(&observer); | 1128 testing::Mock::VerifyAndClear(&observer); |
1127 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); | 1129 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); |
1128 | 1130 |
1129 // Cleanup. | 1131 // Cleanup. |
1130 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); | 1132 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); |
1131 TraceLog::GetInstance()->SetDisabled(); | 1133 TraceLog::GetInstance()->SetDisabled(); |
1132 TraceLog::GetInstance()->SetDisabled(); | 1134 TraceLog::GetInstance()->SetDisabled(); |
1133 } | 1135 } |
1134 | 1136 |
1135 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnFirstDisable) { | 1137 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnFirstDisable) { |
1136 TraceConfig tc_inc_all("*", ""); | 1138 TraceConfig tc_inc_all("*", ""); |
1137 TraceLog::GetInstance()->SetEnabled(tc_inc_all, TraceLog::RECORDING_MODE); | 1139 TraceLog::GetInstance()->SetEnabled(tc_inc_all, TraceLog::RECORDING_MODE); |
1138 TraceLog::GetInstance()->SetEnabled(tc_inc_all, TraceLog::RECORDING_MODE); | 1140 TraceLog::GetInstance()->SetEnabled(tc_inc_all, TraceLog::RECORDING_MODE); |
1139 | 1141 |
1140 testing::StrictMock<MockEnabledStateChangedObserver> observer; | 1142 testing::StrictMock<MockEnabledStateChangedObserver> observer; |
1141 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); | 1143 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
1142 | 1144 |
1143 EXPECT_CALL(observer, OnTraceLogEnabled()) | 1145 EXPECT_CALL(observer, OnTraceLogEnabled()) |
1144 .Times(0); | 1146 .Times(0); |
| 1147 EXPECT_CALL(observer, OnBeforeTraceLogDisabled()).Times(1); |
1145 EXPECT_CALL(observer, OnTraceLogDisabled()) | 1148 EXPECT_CALL(observer, OnTraceLogDisabled()) |
1146 .Times(1); | 1149 .Times(1); |
1147 TraceLog::GetInstance()->SetDisabled(); | 1150 TraceLog::GetInstance()->SetDisabled(); |
1148 testing::Mock::VerifyAndClear(&observer); | 1151 testing::Mock::VerifyAndClear(&observer); |
1149 | 1152 |
1150 // Cleanup. | 1153 // Cleanup. |
1151 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); | 1154 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); |
1152 TraceLog::GetInstance()->SetDisabled(); | 1155 TraceLog::GetInstance()->SetDisabled(); |
1153 } | 1156 } |
1154 | 1157 |
1155 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnDisable) { | 1158 TEST_F(TraceEventTestFixture, EnabledObserverFiresOnDisable) { |
1156 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), | 1159 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
1157 TraceLog::RECORDING_MODE); | 1160 TraceLog::RECORDING_MODE); |
1158 | 1161 |
1159 MockEnabledStateChangedObserver observer; | 1162 MockEnabledStateChangedObserver observer; |
1160 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); | 1163 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
1161 | 1164 |
| 1165 EXPECT_CALL(observer, OnBeforeTraceLogDisabled()).Times(1); |
1162 EXPECT_CALL(observer, OnTraceLogDisabled()) | 1166 EXPECT_CALL(observer, OnTraceLogDisabled()) |
1163 .Times(1); | 1167 .Times(1); |
1164 TraceLog::GetInstance()->SetDisabled(); | 1168 TraceLog::GetInstance()->SetDisabled(); |
1165 testing::Mock::VerifyAndClear(&observer); | 1169 testing::Mock::VerifyAndClear(&observer); |
1166 | 1170 |
1167 // Cleanup. | 1171 // Cleanup. |
1168 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); | 1172 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); |
1169 } | 1173 } |
1170 | 1174 |
1171 // Tests the IsEnabled() state of TraceLog changes before callbacks. | 1175 // Tests the IsEnabled() state of TraceLog changes before callbacks. |
1172 class AfterStateChangeEnabledStateObserver | 1176 class AfterStateChangeEnabledStateObserver |
1173 : public TraceLog::EnabledStateObserver { | 1177 : public TraceLog::EnabledStateObserver { |
1174 public: | 1178 public: |
1175 AfterStateChangeEnabledStateObserver() {} | 1179 AfterStateChangeEnabledStateObserver() {} |
1176 ~AfterStateChangeEnabledStateObserver() override {} | 1180 ~AfterStateChangeEnabledStateObserver() override {} |
1177 | 1181 |
1178 // TraceLog::EnabledStateObserver overrides: | 1182 // TraceLog::EnabledStateObserver overrides: |
1179 void OnTraceLogEnabled() override { | 1183 void OnTraceLogEnabled() override { |
1180 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); | 1184 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); |
1181 } | 1185 } |
1182 | 1186 |
| 1187 void OnBeforeTraceLogDisabled() override { |
| 1188 EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); |
| 1189 } |
| 1190 |
1183 void OnTraceLogDisabled() override { | 1191 void OnTraceLogDisabled() override { |
1184 EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled()); | 1192 EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled()); |
1185 } | 1193 } |
1186 }; | 1194 }; |
1187 | 1195 |
1188 TEST_F(TraceEventTestFixture, ObserversFireAfterStateChange) { | 1196 TEST_F(TraceEventTestFixture, ObserversFireAfterStateChange) { |
1189 AfterStateChangeEnabledStateObserver observer; | 1197 AfterStateChangeEnabledStateObserver observer; |
1190 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); | 1198 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
1191 | 1199 |
1192 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), | 1200 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
(...skipping 28 matching lines...) Expand all Loading... |
1221 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); | 1229 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
1222 EXPECT_EQ(1u, TraceLog::GetInstance()->GetObserverCountForTest()); | 1230 EXPECT_EQ(1u, TraceLog::GetInstance()->GetObserverCountForTest()); |
1223 | 1231 |
1224 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), | 1232 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
1225 TraceLog::RECORDING_MODE); | 1233 TraceLog::RECORDING_MODE); |
1226 TraceLog::GetInstance()->SetDisabled(); | 1234 TraceLog::GetInstance()->SetDisabled(); |
1227 // The observer removed itself on disable. | 1235 // The observer removed itself on disable. |
1228 EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest()); | 1236 EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest()); |
1229 } | 1237 } |
1230 | 1238 |
| 1239 // Tests that an event can be fired during OnBeforeTraceLogDisabled. |
| 1240 class EventWritingStateObserver : public TraceLog::EnabledStateObserver { |
| 1241 public: |
| 1242 // TraceLog::EnabledStateObserver overrides: |
| 1243 void OnTraceLogEnabled() override {} |
| 1244 void OnTraceLogDisabled() override {} |
| 1245 void OnBeforeTraceLogDisabled() override { |
| 1246 TRACE_EVENT_INSTANT0("x", "y", TRACE_EVENT_SCOPE_THREAD); |
| 1247 } |
| 1248 }; |
| 1249 |
| 1250 TEST_F(TraceEventTestFixture, WriteTraceEventOnBeforeTraceLogDisabled) { |
| 1251 EventWritingStateObserver observer; |
| 1252 TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
| 1253 |
| 1254 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
| 1255 TraceLog::RECORDING_MODE); |
| 1256 EndTraceAndFlush(); |
| 1257 TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); |
| 1258 EXPECT_TRUE(FindNamePhase("y", "I")); |
| 1259 } |
| 1260 |
1231 bool IsNewTrace() { | 1261 bool IsNewTrace() { |
1232 bool is_new_trace; | 1262 bool is_new_trace; |
1233 TRACE_EVENT_IS_NEW_TRACE(&is_new_trace); | 1263 TRACE_EVENT_IS_NEW_TRACE(&is_new_trace); |
1234 return is_new_trace; | 1264 return is_new_trace; |
1235 } | 1265 } |
1236 | 1266 |
1237 TEST_F(TraceEventTestFixture, NewTraceRecording) { | 1267 TEST_F(TraceEventTestFixture, NewTraceRecording) { |
1238 ASSERT_FALSE(IsNewTrace()); | 1268 ASSERT_FALSE(IsNewTrace()); |
1239 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), | 1269 TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
1240 TraceLog::RECORDING_MODE); | 1270 TraceLog::RECORDING_MODE); |
(...skipping 2107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3348 | 3378 |
3349 TEST_F(TraceEventTestFixture, ClockSyncEventsAreAlwaysAddedToTrace) { | 3379 TEST_F(TraceEventTestFixture, ClockSyncEventsAreAlwaysAddedToTrace) { |
3350 BeginSpecificTrace("-*"); | 3380 BeginSpecificTrace("-*"); |
3351 TRACE_EVENT_CLOCK_SYNC_RECEIVER(1); | 3381 TRACE_EVENT_CLOCK_SYNC_RECEIVER(1); |
3352 EndTraceAndFlush(); | 3382 EndTraceAndFlush(); |
3353 EXPECT_TRUE(FindNamePhase("clock_sync", "c")); | 3383 EXPECT_TRUE(FindNamePhase("clock_sync", "c")); |
3354 } | 3384 } |
3355 | 3385 |
3356 } // namespace trace_event | 3386 } // namespace trace_event |
3357 } // namespace base | 3387 } // namespace base |
OLD | NEW |