Index: base/trace_event/trace_event_unittest.cc |
diff --git a/base/trace_event/trace_event_unittest.cc b/base/trace_event/trace_event_unittest.cc |
index ace98fdf6e837c679a93cb87e3eb099f4dea6c6c..ac7983426c960d5ec6efaf2b2b923f6d1b0e5cc8 100644 |
--- a/base/trace_event/trace_event_unittest.cc |
+++ b/base/trace_event/trace_event_unittest.cc |
@@ -1092,6 +1092,7 @@ class MockEnabledStateChangedObserver : |
public: |
MOCK_METHOD0(OnTraceLogEnabled, void()); |
MOCK_METHOD0(OnTraceLogDisabled, void()); |
+ MOCK_METHOD0(OnBeforeTraceLogDisabled, void()); |
}; |
TEST_F(TraceEventTestFixture, EnabledObserverFiresOnEnable) { |
@@ -1119,6 +1120,7 @@ TEST_F(TraceEventTestFixture, EnabledObserverDoesntFireOnSecondEnable) { |
EXPECT_CALL(observer, OnTraceLogEnabled()) |
.Times(0); |
+ EXPECT_CALL(observer, OnBeforeTraceLogDisabled()).Times(0); |
EXPECT_CALL(observer, OnTraceLogDisabled()) |
.Times(0); |
TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
@@ -1142,6 +1144,7 @@ TEST_F(TraceEventTestFixture, EnabledObserverFiresOnFirstDisable) { |
EXPECT_CALL(observer, OnTraceLogEnabled()) |
.Times(0); |
+ EXPECT_CALL(observer, OnBeforeTraceLogDisabled()).Times(1); |
EXPECT_CALL(observer, OnTraceLogDisabled()) |
.Times(1); |
TraceLog::GetInstance()->SetDisabled(); |
@@ -1159,6 +1162,7 @@ TEST_F(TraceEventTestFixture, EnabledObserverFiresOnDisable) { |
MockEnabledStateChangedObserver observer; |
TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
+ EXPECT_CALL(observer, OnBeforeTraceLogDisabled()).Times(1); |
EXPECT_CALL(observer, OnTraceLogDisabled()) |
.Times(1); |
TraceLog::GetInstance()->SetDisabled(); |
@@ -1180,6 +1184,10 @@ class AfterStateChangeEnabledStateObserver |
EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); |
} |
+ void OnBeforeTraceLogDisabled() override { |
+ EXPECT_TRUE(TraceLog::GetInstance()->IsEnabled()); |
+ } |
+ |
void OnTraceLogDisabled() override { |
EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled()); |
} |
@@ -1228,6 +1236,28 @@ TEST_F(TraceEventTestFixture, SelfRemovingObserver) { |
EXPECT_EQ(0u, TraceLog::GetInstance()->GetObserverCountForTest()); |
} |
+// Tests that an event can be fired during OnBeforeTraceLogDisabled. |
+class EventWritingStateObserver : public TraceLog::EnabledStateObserver { |
+ public: |
+ // TraceLog::EnabledStateObserver overrides: |
+ void OnTraceLogEnabled() override {} |
+ void OnTraceLogDisabled() override {} |
+ void OnBeforeTraceLogDisabled() override { |
+ TRACE_EVENT_INSTANT0("x", "y", TRACE_EVENT_SCOPE_THREAD); |
+ } |
+}; |
+ |
+TEST_F(TraceEventTestFixture, WriteTraceEventOnBeforeTraceLogDisabled) { |
+ EventWritingStateObserver observer; |
+ TraceLog::GetInstance()->AddEnabledStateObserver(&observer); |
+ |
+ TraceLog::GetInstance()->SetEnabled(TraceConfig(kRecordAllCategoryFilter, ""), |
+ TraceLog::RECORDING_MODE); |
+ EndTraceAndFlush(); |
+ TraceLog::GetInstance()->RemoveEnabledStateObserver(&observer); |
+ EXPECT_TRUE(FindNamePhase("y", "I")); |
+} |
+ |
bool IsNewTrace() { |
bool is_new_trace; |
TRACE_EVENT_IS_NEW_TRACE(&is_new_trace); |